Azure DevOps 如何在发布构建管道后在输出(放置)文件夹中获取文件名
Azure DevOps how to get file name in output (drop) folder after publishing build pipeline
我正在使用 Azure DevOps 构建一个 python 轮子。我想让它尽可能通用,这样团队中的每个人都可以使用相同的管道来构建自己的 python 轮子并将它们部署在某个数据块工作区中。为此,我需要知道构建管道输出中文件的名称,以便在我的发布管道中使用它。
目前在这种情况下,文件是一个 python 轮子,保存在构建管道输出中。我在我的管道 yaml 中使用以下代码在构建管道输出和 Azure 工件提要中发布它。
- task: PublishBuildArtifacts@1
inputs:
pathToPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: dfordbx
- task: UniversalPackages@0
displayName: Publish
inputs:
command: publish
publishDirectory: $(Build.ArtifactStagingDirectory)/dist/
vstsFeedPublish: 'MyProject/py_artifacts_1732'
vstsFeedPackagePublish: $(packageBuildName)
build pipeline 运行结束后,dist文件夹中有一个wheel文件。我需要得到这个轮子的名字。对于我自己的代码,我当然知道名字。但是当其他人 运行 管道用于他们的代码时,我不清楚这一点。我需要在我的发布管道中获得这个名称。
换句话说,我正在我的 yaml 文件中寻找一种方法来获取以下结构中的“py_sample_package-0.6.5-py3-none-any.whl”名称:
通过选择已发布的工件:
获取文件:
突出显示的部分是我需要进入管道的部分。谢谢。
经典发布管道
在经典发布管道中,您引用构建工件并将其用作触发器。工件下载到 $(System.DefaultWorkingDirectory)$(Build.DefinitionName)
.
要识别工件中的 .whl
文件,请将 powershell 脚本添加到您的发布管道中,以识别文件并使用 ##vso
日志语法创建新变量...
例如:
# find the first .whl file in the artifact folder
$whlFile = Get-ChildItem `
-Filter *.whl `
-Path "$(System.DefaultWorkingDirectory)$(Build.DefinitionName)\dfordbx" |
ForEach-Object { $_.fullname } |
Select-Object -First 1
# create a variable with the full path to the file
Write-Host "##vso[task.setvariable variable=whlFile]$whlFile"
现在您可以像使用任何其他定义的管道变量一样使用该变量$(whlFile)
Multi-Stage YAML 管道
如果您正在使用 multi-stage YAML 管道并且需要在阶段之间使用工件,您不能假设该文件将出现在机器上,因为每个作业都可能 运行 在不同的机器上。您需要在作业开始时下载工件。
variables:
- artifactName: dfordbx
stages:
- stage: build
jobs:
- job: buildJob
steps:
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifactName: $(artifactName)
artifactType: 'pipeline'
# or use the 'publish' alias
- publish: '$(Build.ArtifactStagingDirectory)'
artifact: '$(artifactName)'
- stage: deploy
dependsOn: build
condition: success('build')
jobs:
- job: deployJob
steps:
- task: DownloadPipelineArtifact@1
inputs:
source: 'current'
artifact: $(artifactName)
path: '$(Pipeline.Workspace)/$(artifactName)'
# or use the 'download' alias
- download: current
artifact: $(artifactName)
- pwsh: |
$whlFile = Get-ChildItem -Path "$(Pipeline.Workspace)/$(artifactName)" -Filter *.whl |
ForEach-Object { $_.fullName } |
Select-Object -First 1
Write-Host "##vso[task.setvariable variable=whlFile]$whlFile"
我正在使用 Azure DevOps 构建一个 python 轮子。我想让它尽可能通用,这样团队中的每个人都可以使用相同的管道来构建自己的 python 轮子并将它们部署在某个数据块工作区中。为此,我需要知道构建管道输出中文件的名称,以便在我的发布管道中使用它。
目前在这种情况下,文件是一个 python 轮子,保存在构建管道输出中。我在我的管道 yaml 中使用以下代码在构建管道输出和 Azure 工件提要中发布它。
- task: PublishBuildArtifacts@1
inputs:
pathToPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: dfordbx
- task: UniversalPackages@0
displayName: Publish
inputs:
command: publish
publishDirectory: $(Build.ArtifactStagingDirectory)/dist/
vstsFeedPublish: 'MyProject/py_artifacts_1732'
vstsFeedPackagePublish: $(packageBuildName)
build pipeline 运行结束后,dist文件夹中有一个wheel文件。我需要得到这个轮子的名字。对于我自己的代码,我当然知道名字。但是当其他人 运行 管道用于他们的代码时,我不清楚这一点。我需要在我的发布管道中获得这个名称。
换句话说,我正在我的 yaml 文件中寻找一种方法来获取以下结构中的“py_sample_package-0.6.5-py3-none-any.whl”名称:
通过选择已发布的工件:
获取文件:
突出显示的部分是我需要进入管道的部分。谢谢。
经典发布管道
在经典发布管道中,您引用构建工件并将其用作触发器。工件下载到 $(System.DefaultWorkingDirectory)$(Build.DefinitionName)
.
要识别工件中的 .whl
文件,请将 powershell 脚本添加到您的发布管道中,以识别文件并使用 ##vso
日志语法创建新变量...
例如:
# find the first .whl file in the artifact folder
$whlFile = Get-ChildItem `
-Filter *.whl `
-Path "$(System.DefaultWorkingDirectory)$(Build.DefinitionName)\dfordbx" |
ForEach-Object { $_.fullname } |
Select-Object -First 1
# create a variable with the full path to the file
Write-Host "##vso[task.setvariable variable=whlFile]$whlFile"
现在您可以像使用任何其他定义的管道变量一样使用该变量$(whlFile)
Multi-Stage YAML 管道
如果您正在使用 multi-stage YAML 管道并且需要在阶段之间使用工件,您不能假设该文件将出现在机器上,因为每个作业都可能 运行 在不同的机器上。您需要在作业开始时下载工件。
variables:
- artifactName: dfordbx
stages:
- stage: build
jobs:
- job: buildJob
steps:
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifactName: $(artifactName)
artifactType: 'pipeline'
# or use the 'publish' alias
- publish: '$(Build.ArtifactStagingDirectory)'
artifact: '$(artifactName)'
- stage: deploy
dependsOn: build
condition: success('build')
jobs:
- job: deployJob
steps:
- task: DownloadPipelineArtifact@1
inputs:
source: 'current'
artifact: $(artifactName)
path: '$(Pipeline.Workspace)/$(artifactName)'
# or use the 'download' alias
- download: current
artifact: $(artifactName)
- pwsh: |
$whlFile = Get-ChildItem -Path "$(Pipeline.Workspace)/$(artifactName)" -Filter *.whl |
ForEach-Object { $_.fullName } |
Select-Object -First 1
Write-Host "##vso[task.setvariable variable=whlFile]$whlFile"