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 的构建。
我正在使用 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 的构建。