两个作业是否可以在多阶段管道构建中共享文件? Publish
阶段有dotnet publish
个工作(单个任务)和publish artifacts
个工作(单个任务)。但是,dotnet publish
的输出似乎不可用于publish artifacts
。
答案 0 :(得分:0)
如果两个作业中的每一个都有一个任务,而第二个任务消耗了第一个任务的输出。那么为什么不将它们运行在同一工作下呢?
您可以参考下面的yaml
stages:
- stage: Publish
displayName: 'Publish stage'
jobs:
- job: dotnetpublishartifacts
pool:
vmImage: 'windows-latest'
steps:
- task: DotNetCoreCLI@2
displayName: 'dotnet publish'
inputs:
command: publish
projects: '**/*.csproj'
arguments: '-o $(build.artifactstagingdirectory)'
publishWebProjects: false
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)'
如果两个任务必须在单独的作业中。并且作业在同一代理上运行。然后,您可以尝试将dotnet发布任务输出到不会被下一个作业清除的文件夹(因为代理作业将清除上一个作业的build.artifactstagingdirectory
),
在以下示例dotnet将任务输出输出到$(Agent.BuildDirectory)\firtjobpublish
中,此文件夹将不会通过以下作业执行清除。
您可能需要单击yaml管道编辑页面右上角的 3点,单击触发器,然后转到 YAML ,然后在获取来源部分中将清除设置为否。
例如,下面的yaml:
jobs:
- job: dotnetpublishartifacts
pool: Default
steps:
- task: DotNetCoreCLI@2
displayName: 'dotnet publish'
inputs:
command: publish
projects: '**/*.csproj'
arguments: '-o $(Agent.BuildDirectory)\firtjobpublish'
publishWebProjects: false
- job: publishartifacts
dependsOn: dotnetpublishartifacts
pool: Default
steps:
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
inputs:
PathtoPublish: '$(Agent.BuildDirectory)\firtjobpublish'
添加: 为了在作业之间共享文件,如果作业在不同的代理上运行,则可以尝试在第一个作业中添加 publish artifacts任务,以将工件发布到azure服务器。然后在以下作业中添加下载工件任务,以下载由先前作业发布的工件。这种方法显然不适合您的情况。
希望以上内容对您有所帮助!