Azure Pipeline Publish:具有特定文件夹或项目的任务DotNetCoreCLI

Fed*_*uez 6 azure-devops asp.net-core azure-pipelines-build-task azure-pipelines

运行具有以下项目/文件夹结构的Azure Build Pipeline时,我遇到了问题(不需要的行为).

我的存储库的根文件夹有两个主文件夹:

  • 前端(ASP.Net Core 2.x和Angular 7项目)
  • 后端(ASP.Net Core 2.x)

我正在尝试为后端构建一个单独的Azure管道,为前端构建一个,所以我使用该projects:参数指定正确的路径.

buildtest命令运行良好,并只还原/建筑/测试backend文件夹,但该publish命令运行这两个文件夹:后端和前端.

这是我的yaml文件:

 #build backend project
 task: DotNetCoreCLI@2
   displayName: dotnet build --configuration $(buildConfiguration)
   name: BuildBackendProject
   inputs:
     command: build
     projects: '**/backend/**/*.csproj'
     arguments: '--configuration $(buildConfiguration)'

 ... #run some tests

 #publish backend project
 task: DotNetCoreCLI@2
   displayName: dotnet publish backend --configuration $(buildConfiguration)
   name: PublishBackendProject
   inputs:
     command: publish
     projects: '**/backend/**/*.csproj'
     publishWebProjects: True
     arguments: '--configuration $(BuildConfiguration) --output 
     $(Build.ArtifactStagingDirectory)/backend'
     zipAfterPublish: True
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的文件夹路径,但它总是运行两个发布命令.

如果我在CMD中本地运行dotnet publish backend(来自repo的根文件夹),它工作正常,但显然不适用于Azure管道.

任何想法或修复都非常感激.

Her*_*des 15

诀窍在于使用publishWebProjects/projects属性.这些实际上是相互排斥的.如果publishWebProjects使用,projects则跳过属性值.

文档:

发布Web项目*:如果为true,则任务将尝试在存储库中查找Web项目并对其运行publish命令.通过目录中存在web.config文件或wwwroot文件夹来识别Web项目.

因此,您可以尝试以下代码进行发布:

task: DotNetCoreCLI@2
  displayName: dotnet publish backend --configuration $(buildConfiguration)
  name: PublishBackendProject
  inputs:
    command: publish
    projects: '**/backend/**/*.csproj'
    publishWebProjects: false
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/backend'
    zipAfterPublish: true
Run Code Online (Sandbox Code Playgroud)

  • 多么具有误导性的财产名称!花了几个小时才弄清楚这一点。 (5认同)
  • 谢谢,将publishWebProjects设置为false是解决我的问题的关键。可能只有我一个人,但尚不清楚文档中的默认设置是否为true。 (4认同)
  • 我同意,只是花了一个小时试图弄清楚为什么简单的“dotnetpublish”不适用于构建,因为它默认为 true 并且只获取解决方案中的一个 web csproj。 (3认同)
  • 谢谢,@HermanCordes!错过了文档的那部分。它正确执行了 _backend_ 文件夹的发布命令。唯一的问题是它为该文件夹中的*所有项目*(Web 和类库)构建了 zip。我可以让发布管道只获取 drop 文件夹的 _web project_,但考虑到我只需要构建 web 项目,我将 `projects:` 参数更改为特定路径。 (2认同)
  • 如果它们是互斥的,那么如果我们只收到一条警告,指出项目“xyz”将被忽略(因为publishWebProjects已设置为true),而不是默默地忽略关键配置参数,那就太好了。 (2认同)