【问题标题】:Azure Pipeline Publish: task DotNetCoreCLI with specific folder or projectAzure Pipeline Publish:具有特定文件夹或项目的任务 DotNetCoreCLI
【发布时间】:2018-11-20 22:19:59
【问题描述】:

在运行具有以下项目/文件夹结构的 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

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

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

非常感谢任何想法或修复。

【问题讨论】:

  • 尝试使用 'backend/**/*.csproj' 而不是 '*/backend/**/.csproj'
  • @D.J.我尝试了您的建议,甚至使用特定项目而不是通配符,但它仍在运行两个发布命令。 [命令]/usr/bin/dotnet 发布 /home/vsts/work/1/s/frontend/GaiaFront.Web.csproj。如果最后一个命令像构建、测试和恢复命令一样工作,则不应执行。

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


【解决方案1】:

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

来自documentation

发布网络项目*:如果为真,任务将尝试查找网络 存储库中的项目并在它们上运行发布命令。网络 项目通过存在 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

【讨论】:

  • 谢谢@HermanCordes!错过了文档的那部分。它正确执行了 backend 文件夹的发布命令。唯一的事情是它为该文件夹中的所有项目(网络和类库)构建了zip。我可以使发布管道仅获取放置文件夹的 web 项目,但考虑到我只需要构建 web 项目,我将 projects: 参数更改为特定路径。
  • 谢谢,将 publishWebProjects 设置为 false 是解决我的问题的关键。可能只是我,但不清楚这在文档中默认为 true。
  • 我同意,只是花了一个小时试图弄清楚为什么一个简单的 'dotnet publish' 不能用于构建,因为它默认为 true 并且只在解决方案中抓取一个 web csproj。
  • 如果它们是互斥的,如果我们得到一个警告说项目 'xyz' 将被忽略,那就太好了,因为 publishWebProjects 已设置为 true,而不是这样无声地忽略键配置参数。
  • 多么具有误导性的属性名称!!!花了好几个小时才弄清楚这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 2023-01-19
相关资源
最近更新 更多