我不确定搜索是否正确,但是希望在这里能得到一些指导。
当前设置
我对两个项目有一个解决方案:
我正在将Azure DevOps
与2个Builds
一起使用,每个都有自己的Releases
,每个项目一个。每个构建定义仅在其各自的项目被更新/更改时触发。
这很好用!
我注意到,每个构建实际上都在构建整个解决方案。为了不浪费处理能力,我希望每个项目仅构建自己的项目,并附带一些警告。
Web Api项目不依赖于对Node.js项目的更改,但是 Node.js 可以依赖于对Web Api的更改。因此,如果Web Api失败,我不希望构建/发布Node.js。
目标
我想做的是设置构建定义,以便Web Api构建仅构建Web Api项目。无论是完成还是出错,都可以照常进行构建。
但是,我希望Node.js项目同时构建Web Api 和 Node.js项目,这样,如果Web Api构建失败,那么即使Node也会使整个构建失败。 js不会失败。
我尝试添加新的Visual Studio Build task
并仅选择项目,但是出现以下错误:
[警告] C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ 15.0 \ Bin \ Microsoft.Common.CurrentVersion.targets(781,5):警告:未设置OutputPath属性用于项目“ MyProject.csproj”。请检查以确保为该项目指定了配置和平台的有效组合。配置=“发布”平台=“任何CPU”。您可能会看到此消息,因为您正试图在没有解决方案文件的情况下构建项目,并且指定了该项目不存在的非默认配置或平台。
我目前正在寻找解决方法,但是我想提出以下问题,以防我朝错误的方向前进。
问题
内部定义
答案 0 :(得分:1)
我想做的是设置构建定义,以便Web Api构建仅构建Web Api项目。无论是完成还是出错,都可以照常进行构建。
在这种情况下,您需要针对项目文件而不是.sln
的构建定义。您的错误是构建.csproj
要求 OutputPath 属性具有一个值,因此只需将其添加到 MSBuild Arguments 框:/p:OutputPath="$(build.binariesDirectory)\MyProject"
。 Build.BinariesDirectory是预定义的变量,但不是必需的目录值。您可以使用对您有意义的东西。
我希望Node.js项目同时构建Web Api和Node.js项目,以便如果Web Api构建失败,那么即使Node.js不会失败,整个构建也会失败。
根据我对您的情况的了解,此案无需要求进行任何其他更改。如果构建解决方案,则如果其中一个项目中断,则管道将失败。缺点是:
在Node.js管道上设置构建完成触发器,当Web API管道成功时将触发构建。这类似于您现在所拥有的,但有所不同。通过构建完成并在Node.js管道上触发CI,无论下游Node.js的结果如何,Web API的构建都可以成功,但是即使未对该项目进行更改,您也将在构建Node.js项目。明确地。 (如果您想节省座席活动,这可能不是您想要的)
然后,您的Node.js管道可以有2个单独的构建步骤,每个步骤都针对一个项目文件。但是,如果 Build.Reason 为 BuildCompletion ,则Web API项目构建的步骤可能会导致condition无法执行。这使Node.js成为Web API的下游项目,但是如果我们已经知道成功的话,就不会构建Web API。
注意:在此解决方案中,取决于您的引用在这些项目之间的工作方式,您可能需要添加其他任务来下载构建工件,以及执行其他操作,以确保构建时一切都在原处。< / em>