说到Azure Container Registry,想必大家都有一定的了解,ACR是Azure中提供的私有的容器映像仓库。ACR Task是 ACR中的一个功能套件。 它为 Linux、Windows 和 ARM 等平台提供基于云的容器映像生成,并可以针对 Docker 容器自动执行 OS 和框架修补。 ACR Task不仅可以使用按需容器映像生成将“内部循环”开发周期扩展到云,而且还能启用源代码更新、容器基础映像或计时器更新所触发的自动生成。 例如,使用基本映像更新触发器,可以自动执行 OS 和应用程序框架修补工作流,在遵守不可变容器原则的前提下维护安全的环境。
使用ACR Task可以在以下情况下自动进行容器构建:

  • 检测GitHub或Azure DevOps中的源代码更改,并自动构建新映像并存储在ACR中
  • 检测基本映像更新并自动构建新映像并存储在ACR中
  • 按照计划,构建新映像并将其存储在ACR中
  • 手动构建单个容器映像并将其按需推送到ACR中,而无需本地Docker Engine安装
  • 使用基于多步骤、多容器的工作流扩展 ACR 任务的单一映像生成和推送功能

闲言少叙,下面我们就一起看一下如何使用ACR Task在提交代码/代码变更时自动生产容器镜像:
完成本次实验我们需要准备一下先决条件:

  • Azure Container Regisitry(ACR):可以参考我之前的博文https://blog.51cto.com/wuyvzhang/2465520
  • GitHub账户:带有可以生产容器镜像的Dockerfile
  • GitHub的个人访问令牌(PTA)

创建Github个人访问令牌:
若要在向 Git 存储库提交内容时触发任务,ACR 任务需要用于访问存储库的个人访问令牌 (PAT)。 如果还没有 PAT,请按照以下步骤在 GitHub 中生成一个:
导航到 GitHub 上的 PAT 创建页面 :https://github.com/settings/tokens/new
输入令牌的简短说明,例如“ACR Task Demo”,然后选择 ACR 的作用域以访问存储库。 要像本次博客一样访问公共存储库,请在“repo”下方,启用“repo:status”和“public_repo”,然后点击生产令牌:
使用ACR Task在云中自动化生成容器镜像_第1张图片

生产令牌后,我们点击复制并将其保存(在后面我们会用到):
使用ACR Task在云中自动化生成容器镜像_第2张图片

创建生成任务:
现已完成启用 ACR Task以读取提交状态和在存储库中创建 Webhook 所需的步骤,接下来可以创建Task,以便在向存储库提交内容时触发容器映像生成。
执行如下命令以创建对于的环境变量:

 ACR_NAME=ACR_NAme
 GIT_USER=GIT_USER
 GIT_PAT=GIT_PAT

使用ACR Task在云中自动化生成容器镜像_第3张图片
使用如下命令创建ACR构建任务:
注意:{{.Run.ID}}构成标签值。这样可以确保图像被唯一标记。–Context仅链接到您的git repo。然后,设置要与–branch开关一起使用的分支。–file是您的docker文件的位置和名称。git-access-token是您先前从GitHub创建的令牌。
如果要创建Windows容器,则需要使用–platform 开关。如果要创建Linux容器,则不需要提供它。

az acr task create \
    --registry $ACR_NAME \
    --name buildhelloword \
    --image helloworld:{{.Run.ID}} \
    --context https://github.com/$GIT_USER/acrtaskdemo.git \
    --branch master \
    --file ACRTasks/dockerfile \
    --git-access-token $GIT_PAT \
    --platform windows

使用ACR Task在云中自动化生成容器镜像_第4张图片

测试生成任务
使用如下命令来手动出发ACR Task生产镜像:
az acr task run --registry $ACR_NAME --name buildhelloword
使用ACR Task在云中自动化生成容器镜像_第5张图片
可以看到,容器镜像已经生产成功,并且已经上传到ACR:
使用ACR Task在云中自动化生成容器镜像_第6张图片

测试了手动触发构建以后,我们来测试一下当提交代码时自动触发构建镜像,在这里我直接在GIThub上对文件进行编辑了,当然也可以在本地进行编辑然后再推送到github
使用ACR Task在云中自动化生成容器镜像_第7张图片
当我编辑完提交以后,将触发ACR Task创建的Webhook,并开始构建过程。如果想查看日志,可以使用以下命令:
az acr task logs --registry $DEV_ACR_NAME
使用ACR Task在云中自动化生成容器镜像_第8张图片

我们也可以使用以下命令来查看构建状态:
az acr task list-runs --registry $DEV_ACR_NAME --output table
使用ACR Task在云中自动化生成容器镜像

同时我们可以在Azure Portal中查看对于ACR存储库中的容器镜像:
使用ACR Task在云中自动化生成容器镜像_第9张图片