Azure DevOps用Linux VMSS代理部署Nuget包缺失Mono的解决方案问询
Nuget推送缺失Mono问题解决方案
优先推荐:无需安装Mono的替代方案
你当前使用的VMSS代理已经预装.NET 5 SDK,可直接使用.NET CLI自带的dotnet nuget push命令完成Nuget包推送,完全不需要依赖Mono,直接替换原有Nuget推送任务即可从根源避开报错,是成本最低的解决方案。
对应YAML配置示例:
- task: DotNetCoreCLI@2 inputs: command: 'push' packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg' nuGetFeedType: 'internal' publishVstsFeed: '<替换为你的VSTS Feed ID>'
方案1:仅在流水线环节临时安装Mono
如果你必须使用依赖Mono的旧版Nuget推送任务,不需要修改VMSS的基础配置,只需在Nuget推送任务之前新增一个Bash执行任务,在当前作业的代理环境中临时安装Mono即可。该方案适合你无VMSS管理权限、仅少数流水线需要使用Mono的场景。
Ubuntu系统下的安装任务YAML示例:
- task: Bash@3 inputs: targetType: 'inline' script: | sudo apt update -y sudo apt install -y apt-transport-https dirmngr gnupg ca-certificates sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF # 下方Ubuntu版本代号需对应代理系统版本,20.04为focal、22.04为jammy echo "deb https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list sudo apt update -y sudo apt install -y mono-devel displayName: '临时安装Mono运行时'
方案2:修改VMSS配置预装Mono
如果该代理池的大量流水线都需要依赖Mono执行任务,建议修改VMSS的自定义镜像配置,将Mono的安装步骤写入镜像初始化脚本中,重新发布VMSS节点后,所有新启动的代理节点都会预装Mono,不需要每次流水线执行时重复安装,可节省构建执行时间。该方案需要你拥有VMSS的管理权限。
内容的提问来源于stack exchange,提问作者Tony Basallo
相关产品推荐
相关产品推荐

