两个作业是否可以在多阶段管道构建中共享文件?Publish
阶段有dotnet publish
工作(单个任务)和publish artifacts
工作(单个任务)。但是, 的输出dotnet publish
似乎不适用于publish artifacts
.
问问题
3740 次
1 回答
4
如果两个作业中的每一个都有一个任务,并且第二个任务消耗第一个任务的输出。那么为什么不在同一个工作下运行它们呢。
可以参考下面的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 点,单击triggers,转到YAML,然后在Get sources部分将Clean设置为false。
下面的 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'
补充:为了在作业之间共享文件,如果作业在不同的代理上运行,您可以尝试在第一个作业中添加发布工件任务以将工件发布到 Azure 服务器。并在以下作业中添加一个下载工件任务以下载上一个作业发布的工件。这种方法显然不适合您的情况。
希望以上对您有所帮助!
于 2019-10-31T02:44:43.373 回答