Это заняло целую вечность, но мне все-таки удалось найти решение.
По умолчанию диспетчер ресурсов Azure для TeamCity не содержит Mono в своем образе Docker. Вы можете установить Mono на образ Docker, но затем, как только вы перезапустите агент, изменения не сохранятся.
Вы должны настроить его, следуя инструкциям в 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» из выпадающего списка. Выберите «Mono xBuild 4.5» для версии MSBuild, «4.0» для версии MSBuild Tools и x64 для платформы.
Теперь ваш новый агент сможет подбирать сборки, требующие моно.