如何解决Azure DevOps管道-规模集代理:安装Docker
我们最近重新配置了构建过程,使其完全在容器中运行,现在我们正寻求从本地构建代理迁移到使用Azure Scale Set中的代理。
我们希望避免为Azure Scale Set维护自己的VM映像,而是选择使用Azure中可用的默认Ubuntu 18.04 LTS映像。
此映像不包括Docker,因此我们已将Azure Scale Set配置为使用云配置脚本,该脚本将在VM首次启动时安装Docker:
#cloud-config
apt:
sources:
docker.list:
source: deb [arch=amd64] https://download.docker.com/linux/ubuntu $RELEASE stable
keyid: 9DC858229FC7DD38854AE2D88D81803C0EBFCD88
packages:
- docker-ce
- docker-ce-cli
groups:
- docker
这似乎很好,但是有时构建作业会失败:
Starting: Initialize containers
/usr/bin/docker version --format '{{.Server.APIVersion}}'
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
'
##[error]Exit code 1 returned from process: file name '/usr/bin/docker',arguments 'version --format '{{.Server.APIVersion}}''.
Finishing: Initialize containers
似乎cloud-init脚本失败,或者在cloud-init脚本完成之前在虚拟机上启动了Azure DevOps代理。
到目前为止,我已经看到以下情况:
- 配置新的VM可以正常工作,并且作业可以正常运行
- 前几个作业在新配置的VM上失败,然后正确运行。 (也许是因为cloud-init脚本与将代理部署到VM的Azure DevOps扩展并行运行,并且您有竞争条件吗?)
- 即使在30分钟后,所有作业也会失败。有时重新构想VM会有帮助,有时却无济于事。
有人有类似的设置吗?它运作正常吗?如果没有,在VM运行容器作业之前,有哪些其他方法可以将Docker部署到VM?
解决方法
当您配置Azure DevOps代理池以使用Azure规模集来供应构建计算机时,Microsoft.Azure.DevOps.Pipelines.Agent
/ TeamServicesAgentLinux
扩展名将自动添加到您的规模集。
此扩展负责在您的VM上安装Azure DevOps代理并将其添加到您的代理池中。
该扩展在VM启动时运行,大约与cloud-init脚本同时运行。这可能会导致比赛条件。
要解决此问题,请在您的云配置脚本中添加一个bootcmd
脚本,以强制walinuxagent
代理服务(将启动Azure DevOps扩展) cloud-config脚本,如下所示:
#cloud-config
bootcmd:
- mkdir -p /etc/systemd/system/walinuxagent.service.d
- echo "[Unit]\nAfter=cloud-final.service" > /etc/systemd/system/walinuxagent.service.d/override.conf
- sed "s/After=multi-user.target//g" /lib/systemd/system/cloud-final.service > /etc/systemd/system/cloud-final.service
- systemctl daemon-reload
apt:
sources:
docker.list:
source: deb [arch=amd64] https://download.docker.com/linux/ubuntu $RELEASE stable
keyid: 9DC858229FC7DD38854AE2D88D81803C0EBFCD88
packages:
- docker-ce
- docker-ce-cli
groups:
- docker
这允许您创建一个使用标准Ubuntu 18.04映像的Azure DevOps规模集代理程序池,并将docker安装在该映像之上。
有关更多背景信息,请参见https://github.com/microsoft/azure-pipelines-agent/issues/2866和https://github.com/Azure/WALinuxAgent/issues/1938#issuecomment-657293920。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。