如何在作业之间共享文件
How to share files between jobs
两个作业是否可以在多阶段管道构建中共享文件? Publish
阶段有 dotnet publish
个作业(单个任务)和 publish artifacts
个作业(单个任务)。但是,dotnet publish
的输出似乎不适用于 publish artifacts
。
如果两个作业中的每一个都有一个任务,并且第二个任务消耗第一个任务的输出。那么为什么不 运行 他们在同一份工作中呢。
你可以参考下面的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 publish 任务输出到 $(Agent.BuildDirectory)\firtjobpublish
,此文件夹将不会被以下作业执行清除。
您可能需要单击 yaml 管道编辑页面右上角的 3dots,单击 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'
加法:
对于在作业之间共享文件,如果 作业 运行 在不同的代理上 ,您可以尝试在第一个作业中添加一个 publish artifacts 任务 将工件发布到 Azure 服务器。并在以下作业中添加一个 下载工件任务 以下载上一个作业发布的工件。这种方法显然不适合你的情况。
希望以上内容对您有所帮助!
两个作业是否可以在多阶段管道构建中共享文件? Publish
阶段有 dotnet publish
个作业(单个任务)和 publish artifacts
个作业(单个任务)。但是,dotnet publish
的输出似乎不适用于 publish artifacts
。
如果两个作业中的每一个都有一个任务,并且第二个任务消耗第一个任务的输出。那么为什么不 运行 他们在同一份工作中呢。
你可以参考下面的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 publish 任务输出到 $(Agent.BuildDirectory)\firtjobpublish
,此文件夹将不会被以下作业执行清除。
您可能需要单击 yaml 管道编辑页面右上角的 3dots,单击 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'
加法: 对于在作业之间共享文件,如果 作业 运行 在不同的代理上 ,您可以尝试在第一个作业中添加一个 publish artifacts 任务 将工件发布到 Azure 服务器。并在以下作业中添加一个 下载工件任务 以下载上一个作业发布的工件。这种方法显然不适合你的情况。
希望以上内容对您有所帮助!