使用ACR Task在云中自动化生成容器镜像
使用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以读取提交状态和在存储库中创建 Webhook 所需的步骤,接下来可以创建Task,以便在向存储库提交内容时触发容器映像生成。
执行如下命令以创建对于的环境变量:
ACR_NAME=ACR_NAme GIT_USER=GIT_USER GIT_PAT=GIT_PAT
使用如下命令创建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生产镜像:az acr task run --registry $ACR_NAME --name buildhelloword
可以看到,容器镜像已经生产成功,并且已经上传到ACR:
测试了手动触发构建以后,我们来测试一下当提交代码时自动触发构建镜像,在这里我直接在GIThub上对文件进行编辑了,当然也可以在本地进行编辑然后再推送到github
当我编辑完提交以后,将触发ACR Task创建的Webhook,并开始构建过程。如果想查看日志,可以使用以下命令:az acr task logs --registry $DEV_ACR_NAME
我们也可以使用以下命令来查看构建状态:az acr task list-runs --registry $DEV_ACR_NAME --output table
同时我们可以在Azure Portal中查看对于ACR存储库中的容器镜像: