我们最近重新配置了构建过程以完全在容器中运行,我们现在正在寻求从本地构建代理迁移到使用 Azure 规模集中的代理。
我们希望避免为 Azure Scale Set 维护我们自己的 VM 映像,并选择使用 Azure 中可用的默认 Ubuntu 18.04 LTS 映像。
此映像不包含 Docker,因此我们已将 Azure 规模集配置为使用 cloud-config 脚本,该脚本将在 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 脚本完成之前在 VM 上启动了 Azure DevOps 代理。
到目前为止,我已经看到了以下场景:
- 配置新 VM 工作正常,作业正常运行
- 前几个作业在新配置的 VM 上失败,然后正常运行。(可能是因为 cloud-init 脚本与将代理部署到 VM 的 Azure DevOps 扩展并行运行,并且您有竞争条件?)
- 即使在 30 分钟之后,所有作业都会失败。有时重新构想 VM 会有所帮助,有时则没有。
有没有人有类似的设置?它工作正常吗?如果不是,在 VM 运行容器作业之前将 Docker 部署到 VM 的替代方法是什么?