练习 - 创建 GitHub 操作以生成容器映像

已完成

在本单元中,你将完成以下任务:

  • 创建 GitHub 操作以实现生成管道。
  • 修改优惠券服务代码以触发生成工作流。
  • 实时监视生成工作流的进度。

创建生成操作

此过程中的 YAML 代码定义一个如下 GitHub 操作:

  • 在提交被推送到 main 分支中的优惠券服务源代码或单元测试时触发。
  • 定义特定于步骤的环境变量。
  • 有一个名为 Build and push image to ACR 的作业(或在同一工作流运行器上执行的一组步骤)。

重要

GitHub Actions 或工作流的触发条件和其他项目依赖于应用和环境。 为了便于理解,此示例简要地提供了详细信息。 生成和部署工作流的范围都限定为产品服务更改,因为所有微服务都保存在一个存储库下。 在实际的生产方案中,每个微服务都会保存在其自身单独的存储库中。

完成以下步骤以创建 GitHub Actions 生成操作:

  1. 转到 GitHub 中的分支存储库,选择 Actions 选项卡。

  2. Get started with GitHub Actions 页上,选择 set up a workflow yourself 链接。

    Screenshot that shows the Actions tab in the GitHub repository, highlighting the workflow creation link.

  3. 在下一页上,将以下 YAML 代码粘贴到编辑器中。

    name: Build and deploy an app to AKS
    
    on:
      push:
        branches: ["main"]
      workflow_dispatch:
    
    env:
      # Local environment variables used later in the workflow
      AZURE_CONTAINER_REGISTRY: 'name of your Azure Container Registry'
      CONTAINER_NAME: 'productservice'
      RESOURCE_GROUP: 'rg-eshop'
      CLUSTER_NAME: 'aks-eshop'
      DEPLOYMENT_MANIFEST_PATH: './product.yml'
      DOCKER_PATH: './DockerfileProducts'
    
    jobs:
      buildImage:
        permissions:
          contents: read
          id-token: write
        runs-on: ubuntu-latest
        steps:
          # Checks out the repository this file is in
          - uses: actions/checkout@v3
    
          # Logs in with your Azure credentials stored in GitHub secrets
          - name: Azure login
            uses: azure/login@v1.4.6
            with:
              creds: '${{ secrets.AZURE_CREDENTIALS }}'
    
          # Builds and pushes an image up to your Azure Container Registry
          - name: Build and push image to ACR
            run: |
              az acr build --file ${{ env.DOCKER_PATH }} --image ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.CONTAINER_NAME }}:${{ github.sha }} --registry ${{ env.AZURE_CONTAINER_REGISTRY }} -g ${{ env.RESOURCE_GROUP }} .
    
    

    将 Azure 容器注册表的名称替换为在上一单元中创建的 ACR 名称;例如 acseshop186748394

  4. 将默认工作流 main.yml 文件名替换为 azure-kubernetes-service.yml,然后选择 Commit changes

  5. Commit changes 屏幕上,选择 Commit directly to the main branch,然后选择 Commit changes

    你已经完成了为 CI/CD 管道创建生成工作流。

  6. 在终端中,运行以下命令以查看 ACR 中存储的产品服务的当前版本:

    az acr repository show-tags -n AZURE_CONTAINER_REGISTRY --repository productservice --orderby time_desc --output table
    

    通过将 AZURE_CONTAINER_REGISTRY 替换为 ACR 的名称,应会看到如下所示的输出:

    Result
    ----------------------------------------
    v1
    

触发生成

一旦提交工作流文件,生成工作流就会自动触发。 还可以手动触发生成。

  1. 在存储库中,选择 Actions 选项卡。
  2. 在左侧的 All workflows 下方,选择 Build and deploy an app to AKS 工作流,然后选择 Run workflow

监视生成

查看生成的实时进度:

  1. 在存储库中,选择 Actions 选项卡。

  2. 选择为 Build and deploy an app to AKS 工作流列出的最新工作流运行。 运行的名称是在上一步中使用的提交消息。

  3. 选择 buildImage 作业。

    Screenshot showing a GitHub workflow in progress.

  4. 如果等待几分钟,作业中的步骤应该会成功完成。

  5. 在终端中,再次运行此命令以查看 ACR 中存储的产品服务的版本。

    az acr repository show-tags -n AZURE_CONTAINER_REGISTRY --repository productservice --orderby time_desc --output table
    

    应会看到如下所示的输出,其中显示了新的映像版本已通过 GitHub 工作流添加到 ACR:

    Result
    ----------------------------------------
    8c75edb7a349ec570bd4eac397015bc3c547186e
    v1