ran*_*ing 2 continuous-delivery azure-devops azure-pipelines
我有这个使用 yaml 的 azure devops ci/cd 管道。我的 yaml 有两个阶段 CI 和 CD。我的 CI 阶段有一项名为BuildandDeploy 的工作。CD 阶段有一项部署作业。我正在使用通用工件来发布和下载相同的工件。在 CD 阶段,我使用UniversalPackagesdevops 任务下载工件。该任务有一个名为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
Run Code Online (Sandbox Code Playgroud)
基于az artifacts universalcli的通用包任务不支持“最新版本”,但仅支持特定版本(顺便说一下,此 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)
Run Code Online (Sandbox Code Playgroud)
现在,在下载任务中使用它:
vstsPackageVersion: $(latestVersion)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1617 次 |
| 最近记录: |