Asp.net core Azure管道发布:具有特定文件夹或项目的任务DotNetCoreCLI
我在运行具有以下项目/文件夹结构的Azure构建管道时遇到问题(不需要的行为) 我的存储库的根文件夹有两个主要文件夹:Asp.net core Azure管道发布:具有特定文件夹或项目的任务DotNetCoreCLI,asp.net-core,azure-devops,azure-pipelines,azure-pipelines-build-task,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:参数指定正确的路径 build和test命令运行正常,仅恢复/构建/测试后端文件夹,但publish命令同时针对两个文件夹运行:后端和前端 这是我的yaml文件: #b
- 前端(ASP.Net Core 2.x和Angular 7项目)
- 后端(ASP.Net Core 2.x)
projects:
参数指定正确的路径
build
和test
命令运行正常,仅恢复/构建/测试后端
文件夹,但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
我尝试了不同的文件夹路径,但它总是运行两个发布命令
如果我在CMDdotnetpublishbackend
(从repo的根文件夹)中本地运行,它可以正常工作,但显然不适用于Azure管道
非常感谢任何想法或修复。诀窍在于使用publishWebProjects/projects属性。这些事实上是相互排斥的。如果使用了
publishWebProjects
,则跳过projects
属性值
从:
发布Web项目*:如果为true,任务将尝试查找Web项目
项目,并对其运行“发布”命令。网状物
项目通过存在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
尝试使用'backend/***/.csproj'而不是'*/backend/***/.csproj'@D.J'。我根据你的建议尝试了,甚至使用了一个特定的项目而不是通配符,但它仍然同时运行两个发布命令。[命令]/usr/bin/dotnet publish/home/vsts/work/1/s/frontend/GaiaFront.Web.csproj。如果最后一个命令与build、test和restore命令一样工作,则不应执行它。谢谢,@hermancords!遗漏了那部分文档。它正确地执行了后端文件夹的发布命令。唯一的问题是它为该文件夹中的所有项目(web和类库)构建了ZIP。我可以让发布管道只获取drop文件夹的web项目,但是考虑到我只需要构建web项目,我将
projects:
参数更改为特定路径。谢谢,将publishWebProjects设置为false是解决我的问题的关键。可能只是我,但不清楚从文档中默认为真。我同意,只是花了一个小时试图弄明白为什么一个简单的“dotnet发布”对一个构建不起作用,因为它默认为true,并且只获取解决方案中的一个web csproj。如果它们是互斥的,那么如果我们只得到一个警告,说projects“xyz”将被忽略就好了,因为publishWebProjects已设置为true,而不是这样一个无声的忽略键配置参数。多么误导性的属性名称!!!花了好几个小时才弄明白。