在 Azure Devops 中,假设您有三个在同一 Windows Server 上运行的自托管代理(A1、A2、A3),并且它们都是默认代理池的一部分。当我们构建代码时,我们有一个构建阶段和一个发布阶段。这些可能会相隔好几个小时,并且不是一个接一个地运行。
假设代理 A1 构建了工件。现在,在稍后阶段,我想将工件部署给客户。为了让它工作,它需要访问正确的文件和工件。现在的问题是,我的发布在稍后阶段运行,如果代理 A1 现在被占用,它将选择下一个可用的代理,例如A2,但是该代理无法找到工件,因为它位于不同的文件夹中,并且发布作业失败。
所以,我的问题是: 有没有办法在发布阶段使用相同的代理?
构建代理之间不需要有任何依赖关系。
如果阶段在同一管道中运行,您可以使用构建工件在不同阶段之间共享工件。
如果您需要在不同管道之间共享工件,请使用管道工件。
使用构建工件的工作示例(同一管道):
trigger: none
pool:
vmImage: ubuntu-latest
stages:
- stage: A
displayName: Stage A
jobs:
- job: PublishArtifact
displayName: Publish Artifact
steps:
- script: |
echo "Creating dummy artifact..."
echo "Hello, World!" > $(Build.ArtifactStagingDirectory)/dummy.txt
displayName: Create Dummy Artifact
- task: PublishBuildArtifacts@1
inputs:
pathtoPublish: $(Build.ArtifactStagingDirectory)
artifactName: drop
displayName: Publish artifact
- stage: B
displayName: Stage B
dependsOn: A
jobs:
- job: DownloadArtifact
displayName: Download Artifact
steps:
- task: DownloadBuildArtifacts@0
inputs:
buildType: 'current'
artifactName: 'drop'
downloadPath: '$(Agent.TempDirectory)'
displayName: Download artifact
- script: |
echo "Displaying dummy artifact..."
cat $(Agent.TempDirectory)/drop/dummy.txt
displayName: Output Artifact Content
运行构建,您可以通过单击
1 artifact
来查看生成的工件: