如何从多个项目构建单个Azure DevOps工件并解决语法问题
修正后的YAML配置及说明
核心语法修正:projects参数的正确写法
你之前的projects参数用逗号分隔多个字符串不符合YAML语法规范,正确写法是使用YAML数组格式,每个项目路径单独一行并以-开头,也可以用方括号包裹的单行数组。
方案1:合并所有项目输出为目录形式的工件
该方案将所有项目的发布文件直接合并到同一个目录,最终工件是包含所有文件的目录:
steps: - task: DotNetCoreCLI@2 displayName: 'Build Front-End' inputs: command: 'build' projects: - '**/FirstUIProject.csproj' - '**/SecondUIProject.csproj' - '**/NthUIProject.csproj' arguments: '--configuration $(buildConfiguration)' - task: DotNetCoreCLI@2 displayName: 'Publish Front-End Projects' inputs: command: 'publish' publishWebProjects: False projects: - '**/FirstUIProject.csproj' - '**/SecondUIProject.csproj' - '**/NthUIProject.csproj' arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/UI' zipAfterPublish: False # 关闭单个项目自动打包,让所有文件合并到UI目录 - task: PublishBuildArtifacts@1 displayName: 'Publishing UI Artifact' inputs: pathtoPublish: '$(Build.ArtifactStagingDirectory)/UI' artifactName: 'UI Build Artifact'
方案2:合并所有项目输出为单个ZIP包
如果需要把所有内容打包成单个ZIP文件作为工件,可添加ArchiveFiles任务:
steps: - task: DotNetCoreCLI@2 displayName: 'Build Front-End' inputs: command: 'build' projects: - '**/FirstUIProject.csproj' - '**/SecondUIProject.csproj' - '**/NthUIProject.csproj' arguments: '--configuration $(buildConfiguration)' - task: DotNetCoreCLI@2 displayName: 'Publish Front-End Projects' inputs: command: 'publish' publishWebProjects: False projects: - '**/FirstUIProject.csproj' - '**/SecondUIProject.csproj' - '**/NthUIProject.csproj' arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/UI' zipAfterPublish: False # 关闭单个项目打包,先合并文件到统一目录 - task: ArchiveFiles@2 displayName: 'Combine UI Output into Single ZIP' inputs: rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/UI' includeRootFolder: False archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/UI_Combined.zip' replaceExistingArchive: True - task: PublishBuildArtifacts@1 displayName: 'Publishing UI Artifact' inputs: pathtoPublish: '$(Build.ArtifactStagingDirectory)/UI_Combined.zip' artifactName: 'UI Build Artifact'
关键说明
zipAfterPublish: False:禁用单个项目自动打包ZIP的功能,确保所有项目的输出文件直接合并到指定的UI目录中。如果保留zipAfterPublish: True,每个项目会生成单独的ZIP包,最终工件目录会包含多个独立ZIP文件。- 数组格式的
projects参数:YAML会正确识别多个项目路径,任务会依次处理每个项目。
内容的提问来源于stack exchange,提问作者guest98235
相关产品推荐
相关产品推荐

