TeamCity Azure 资源管理器模板:缺少 MSBuild

TeamCity Azure Resource Manager Template: Missing MSBuild

我正在使用 Azure Resource Manager Template 在同一个 Linux CoreOS Azure VM 上生成带有代理的 Azure TeamCity 服务器。所有工具都用于构建 .NET Core 项目,但对于 Xamarin 项目,我需要在盒子上启用 Visual Studio 构建工具。

按照 http://www.mono-project.com/download/vs/#download-lin 上的说明,我尝试通过 SSH 连接到 VM 来登录代理,然后 运行:

docker exec -it [container id] bash
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
apt install apt-transport-https
echo "deb https://download.mono-project.com/repo/ubuntu vs-xenial main" | tee /etc/apt/sources.list.d/mono-official-vs.list
apt update
apt install mono-devel #Also apt-install mono-complete

但是,即使在重新启动 TeamCity VM 之后,仍然存在未满足的要求,列为 "Mono4.5_x86 exists"。

在代理上安装 Mono 有效;但是,每次我重新启动代理时,安装都会被删除。

如何在构建代理上安装 Mono,以便在我重新启动代理时它仍然存在?

这花了很长时间才解决,但我最终设法找到了解决方案。

默认情况下,TeamCity 的 Azure 资源管理器在其 Docker 图像中不包含 Mono。您可以在 Docker 图像上安装 Mono,但是一旦您重新启动代理,更改就不会保留。

您必须按照 https://hub.docker.com/r/jetbrains/teamcity-agent/ 中的说明对其进行自定义。

首先创建一个新图像:

docker run -it -e SERVER_URL="http://<my-teamcity-server>.westeurope.cloudapp.azure.com" -v /mnt/data/teamcity-mono-agent:/data/teamcity_agent/conf --name="teamcity-mono-agent" jetbrains/teamcity-agent 

然后使用

启动代理
docker start teamcity-mono-agent

使用

在代理中启动 bash 会话
docker exec -it teamcity-mono-agent bash

并在 bash 终端中,使用原始问题中的指令序列安装 Mono。 (您可能需要检查容器中 Linux 的版本,即 运行,并相应地修改这些步骤。Mono 网站上有详细说明。)

安装 Mono 后,输入 mono 检查安装,然后退出 bash 会话。

使用

提交图像
docker commit teamcity-mono-agent mono-agent

然后重启代理:

docker restart teamcity-mono-agent

在您的 TeamCity 项目中,转到构建步骤并从下拉列表中选择 "MSBuild"。为 MSBuild 版本选择 "Mono xBuild 4.5",为 MSBuild 工具版本选择“4.0”,为平台选择 x64。

您的新代理现在应该能够获取需要 Mono 的构建。