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

时间:2018-11-16 16:51:34

标签: asp.net-core azure-devops azure-pipelines azure-pipelines-build-task

在运行具有以下项目/文件夹结构的Azure生成管道时,我遇到了问题(异常行为)。

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

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

我正在尝试构建两个单独的Azure管道,一个用于后端,一个用于前端,因此我使用projects:参数来指定正确的路径。

buildtest命令运行正常,仅还原/构建/测试backend文件夹,但两个文件夹均运行publish命令:backend和前端。

这是我的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

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

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

任何想法或修正都非常感谢。

1 个答案:

答案 0 :(得分:7)

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

来自documentation

  

发布Web项目*:如果为true,则该任务将尝试查找网络   存储库中的项目,然后在它们上运行publish命令。网页   通过存在web.config文件或   目录中的wwwroot文件夹。

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

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