gpt4 book ai didi

azure-devops - 如何在 CD 的 Azure 管道中捕获和保留通用工件的工件包版本

转载 作者:行者123 更新时间:2023-12-02 16:55:08 24 4
gpt4 key购买 nike

我有这个使用 yaml 的 azure devops ci/cd 管道。我的 yaml 有两个阶段 CI 和 CD。我的 CI 阶段有一项名为 BuildandDeploy 的工作。 CD 阶段有一个部署作业。我正在使用通用工件来发布和下载它们。在 CD 阶段,我使用 UniversalPackages devops 任务来下载工件。该任务有一个名为 vstsPackageVersion 的输入变量,它是通用工件中显示的包版本。我知道可以使用 $(Build.BuildId)$(Build.BuildNumber) 的另外两个变量。作为临时解决方案,我正在对通用工件的包版本进行硬编码。

我无法使用任何一个内置变量下载工件。由于 CI 和 CD 在同一个管道中,有没有办法存储和检索工件的包版本?是否有像 latest 这样的标识符,我可以使用它从通用包中获取最新的工件。

# specific branch build with batching
trigger:
batch: true
branches:
include:
- master

stages:
- stage: CI
jobs:
- job: BuildAndPublish
pool:
vmImage: 'Ubuntu-16.04'
steps:
-
script: |
docker build -t $(dockerId).azurecr.io/$(imageName):$(version) .
docker login -u $(dockerId) -p $(pswd) $(dockerId).azurecr.io
docker push $(dockerId).azurecr.io/$(imageName):$(version)

- task: Bash@3
displayName: Initialize Helm Client - create local repo
inputs:
targetType: 'inline'
script: '
helm init --client-only
'
- task: HelmDeploy@0
displayName: Package helm chart
inputs:
connectionType: 'Kubernetes Service Connection'
command: 'package'
chartPath: 'my-helm-dir'

- task: UniversalPackages@0
displayName: Publish helm package to my-company-artifacts
inputs:
command: 'publish'
publishDirectory: '$(Build.ArtifactStagingDirectory)'
feedsToUsePublish: 'internal'
vstsFeedPublish: '$(my-feed-guid)'
vstsFeedPackagePublish: 'my-artifact-name'
versionOption: patch
packagePublishDescription: 'My helm package descrition'

- stage: CD
jobs:
- deployment: DeployJob
displayName: Deploy Job
pool:
vmImage: Ubuntu-16.04
environment: dev
strategy:
runOnce:
deploy:
steps:
- task: UniversalPackages@0
displayName: 'Universal download'
inputs:
command: download
vstsFeed: '$(my-feed-name)'
vstsFeedPackage: 'my-artifact-name'
vstsPackageVersion: 0.0.32

- task: ExtractFiles@1
displayName: 'Extract files '
inputs:
archiveFilePatterns: '*.tgz'
destinationFolder: 'my-folder'
cleanDestinationFolder: true

最佳答案

基于 az artifacts universal cli 的 Universal Packages 任务不支持“最新版本”,但仅支持特定版本(顺便说一句,此 cli 处于预览状态)。

作为解决方法,您可以使用 Rest API 检索最新版本并设置新变量,然后在下载任务中使用此变量。

例如,添加获取版本号并设置变量的 PowerShell 任务:

- powershell: |
$head = @{ Authorization = "Bearer $env:TOKEN" }
$url = "https://feeds.dev.azure.com/{organization}/_apis/packaging/Feeds/{feed-name}/packages/{package-guid}?api-version=5.0-preview.1"
$package = Invoke-RestMethod -Uri $url -Method Get -Headers $head -ContentType application/json
$latestVersion = ($package.versions.Where({ $_.isLatest -eq $True })).version
Write-Host "The latest version is $latestVersion"
Write-Host "##vso[task.setvariable variable=latestVersion]$latestVersion"
env:
TOKEN: $(system.accesstoken)

现在,在下载任务中使用它:

vstsPackageVersion: $(latestVersion)

enter image description here

enter image description here

关于azure-devops - 如何在 CD 的 Azure 管道中捕获和保留通用工件的工件包版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56812516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com