我一直在从tar文件(来自构建工件)加载Docker镜像,标记它并将其推送到Azure容器注册表。
这在“常规”构建代理中工作得很好。现在我们隔离了vnet中的所有内容,因此我尝试在vnet中的虚拟机上运行构建代理(因此我不需要在vnet中打开任何内容以进行外部访问(devops))。
对于Agent pool=Azure pipelines,我可以选择代理镜像,当选择“ubuntu-22.04”时,代理附带安装了docker,并且所有预定义的docker命令(load,push)都可以工作:
在选择vmss代理池时,我没有选择映像的选项:
我假设它只是使用在创建vmss时指定的图像,像这样:
az vmss create --name my-vmss --image Ubuntu2204 --vm-sku Standard_D2_v3 --storage-sku StandardSSD_LRS --disable-overprovision --authentication-type SSH --generate-ssh-keys --upgrade-policy-mode manual --single-placement-group false --platform-fault-domain-count 1 --load-balancer "" --resource-group my-rg --vnet-name my-vnet --subnet Build
这个镜像(Ubuntu 2204)缺少docker,我无法在pipeline脚本中以用户模式(无根)安装它。
下面是我安装无根Docker的方法:
sudo apt update -y
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update -y
sudo apt-get install -y uidmap
apt-cache policy docker-ce
sudo apt install -y docker-ce
dockerd-rootless-setuptool.sh install
export PATH=/usr/bin:$PATH
export XDG_RUNTIME_DIR=/home/AzDevOps/.docker/run
export DOCKER_HOST=unix:///home/AzDevOps/.docker/run/docker.sock
dockerd-rootless.sh
它只是挂在最后一行…
有什么提示可以让我获得“常规”构建代理使用的镜像,或者让无根Docker安装运行,或者更简单的方法来做到这一点?(这里的“this”是指将docker镜像部署到vnet中的容器注册表)
1条答案
按热度按时间ajsxfq5m1#
在Azure DevOps中将一个VMSS资源配置为自托管代理池的操作将向VMSS资源中添加
Microsoft.Azure.DevOps.Pipelines.Agent
扩展,该资源将执行配置脚本以创建名为AzDevOps
的本地用户。对于大多数情况,配置脚本会立即启动代理,以本地用户
AzDevOps
的身份运行。代理将联机并准备运行管道作业。此外,以当前版本的configuration script为例,它已经包含了下面的命令,可以将本地用户
AzDevOps
设置为使用docker Cli。所以我们需要做的就是在VMSS示例上安装Docker。在刚刚配置VMSS代理的时候,我们不能在管道脚本中运行
sudo
命令,因为它会卡住。相反,您可以尝试通过
SSH
连接到其中一个VMSS示例,并使用下面的命令为该VM安装Docker功能。我使用
azureuser
的密码运行ssh azureuser@<VMInstancePublicIP>
来连接我的一个VM示例azvmss-li000001
。之后,在代理机器
azvmss-li000001
上以AzDevOps
运行的管道作业能够运行docker命令。作为一个善意的提醒,这只是一个解决方案,您可以在一个示例中尝试。对于新扩展的VM示例,它将失败,因为它们从未安装过Docker。
为此,您可以考虑使用自定义脚本或生成自定义VM映像来为所有VMSS示例安装Docker,然后将其配置为管道的自托管代理。查看更多详情Azure Virtual Machine Scale Set agents - Azure Pipelines | Microsoft Learn