我创建了一个任务,从另一个管道下载最新的工件,并依次通过命令行识别要进行静默安装的文件。
- task: DownloadPipelineArtifact@2
inputs:
source: 'specific'
project: 'TestApp'
pipeline: 'TestApp'
runVersion: 'latest'
branchName: 'refs/heads/master'
allowPartiallySucceededBuilds: true
patterns: '**/*.msi'
downloadPath: $(Build.ArtifactStagingDirectory)
- task: CmdLine@2
inputs:
script: |
cd $(Build.ArtifactStagingDirectory)/TestApp-20201015.2
TestApp.1-setup.msi /s /v
是否有一个变量存储了从管道生成的最后一个工件的名称?像这样:
- task: CmdLine@2
inputs:
script: |
cd $(Build.ArtifactStagingDirectory)/$(latestArtifact)
$(latestInstaller).msi /s /v
我尝试使用$(Build.DefinitionName(或TestApp-$(Build.BuildNumber(,但没有成功。我现在很抱歉,因为我是Azure的初学者,很难理解管道是如何工作的。
恐怕没有现成的变量可以表示最新下载的工件。
但是您可以在管道中创建一个变量来获得工件名称。
根据我的测试,当您使用Download Pipeline Artifacts task
时,管道将生成一个环境变量:$(DOWNLOADPIPELINEARTIFACT.BUILDNUMBER)
。
然后您可以使用Powershell运行Rest API来获得工件名称。
这是我的样品:
steps:
- powershell: |
$token = "PAT"
$url=" https://dev.azure.com/{Organization Name}/{Project Name}/_apis/build/builds/$(DOWNLOADPIPELINEARTIFACT.BUILDNUMBER)/artifacts?api-version=6.0"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
$latestvalue = $response.value.name
echo $latestvalue
echo "##vso[task.setvariable variable=latest]$latestvalue"
displayName: 'PowerShell Script'
然后可以创建一个变量名:$(latest)
。它的值是最新工件的名称(例如TestApp-20201015.2
(。
您可以在下一个任务中使用该变量。
cd $(Build.ArtifactStagingDirectory)/$(latest)
TestApp.1-setup.msi /s /v
对于最新的安装程序名称
您可以对该值进行硬编码。从.msi文件的名称来看,它似乎与管道的变量无关,所以我不确定是否可以创建一个变量来表示它。