我不认为这是一个gitlab-ci问题。将您的调试工作集中在与您正在使用的跑步者相关的服务器(或容器内)上执行该MSBuild命令。
我建议使用before_script
来调用验证您的管道所需的依赖关系的脚本。例如,您的预生成脚本可以验证MSBuild,NuGet和Git位于您的亚军/虚拟机/容器的路径上(这可让您使用Puppet或Powershell DSC控制这些先决条件,而不是在管道中管理它们)。
nuget restore
应作为restore
阶段的一部分而不是before_script
进行调用。恢复的软件包可以作为工件在各阶段之间传递。
您是双引号你的MSBuild调用你的build
工作。下面是我如何在管道中,我目前正与调用的MSBuild:
build_dev: stage: build script: - MSBuild $env:TARGETS /t:Build /p:Configuration=Debug artifacts: paths: - ./*/bin <<: *default_expiration <<: *default_tags
在这种情况下,我before_script
已证实,MSBuild
的路径上,所以我可以自由地使用它。它可能会引用MSBuild 12.0或14.0,具体取决于跑步者。 $env:TARGETS
来自gitlab-ci变量;它指向一个MSBuild文件,build.targets
。
我相信你正在使用一个基本的shell
执行器;当您在runner配置中指定shell = powershell
时,有些事情会变得更加简单,Powershell语法在将流水线拼接在一起时更加平坦。
最后的MSBuild是否自动恢复的NuGet依赖是真的给你.csproj
文件的编写方式。我认为最好是将nuget restore
作为一个单独的步骤。例如,当你需要恢复由MSBuild自己使用的Nuget包时,单独的步骤就派上用场了。
确认只需在解决方案文件中运行MSBuild,即可通过在命令行中自行运行MSBuild自动恢复NuGet包。我不认为gitlab-ci会影响该命令的成功。
自发布此问题后,我在新笔记本电脑上,因此我不得不再次执行大多数CI/runner步骤。 我不知道这些脚本是如何工作的,我尝试在cmd中运行MSbuild,它不在解决方案的文件夹中运行,也不在MSbuild文件夹中运行。我已经证实,MSbuild确实存在于脚本的顶部位置。 我已经花了好几天的时间来处理yml和你的建议,并在CI上加载了大量的yml错误。 我甚至不知道从哪里开始/修复。 – Kir