练习 - 创建 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 链接。

    显示 GitHub 存储库中的“作”选项卡的屏幕截图,其中突出显示了工作流创建链接。

  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.acr'
    
    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职位。

    GitHub 工作流正在进行中的屏幕截图。

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

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

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

    应会看到类似于以下内容的输出,其中显示了已从 GitHub 工作流将新的映像版本添加到 ACR:

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