Загрузка содержимого артефакта из другой сборки конвейера - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть два azure devops конвейера следующим образом:

  • первый создает артефакт с именем AncientArtifact-1.2.0. $ (Build.BuildId) '.
  • второй пытается использовать этот артефакт с помощью задачи Download Build Artifacts , настроенной следующим образом: enter image description here

Это создает папку с именем 'AncientArtifact-1.2.0.12345' (первый самый последний конвейер BuildId = 12345) внутри $ (CustomDestinationFolder) во второй сборке конвейера.

Я хочу переименовать указанную выше папку в нечто вроде «древнего» и переместить это в другой каталог во второй конвейерной сборке для включения во второй конвейерный артефакт.

Я пытался использовать задачу copy files , но проблема в том, что я не знаю имени скачанная папка артефакта, поэтому я могу указать только ее родительский $ (CustomDestinationFolder) в качестве исходной папки, и поэтому моя папка назначения будет выглядеть примерно как $ (destinationFolder) \ AncientArtifact-1.2 .0.12345 *. Использование параметра flattenFolders сгладит все, и это не то, что я хочу.

Некоторые подходы приходят на ум:

  • Удалите $ (Build.BuildId) из имени артефакта. Таким образом, я знаю точное имя, которое будет иметь загруженный артефакт. Проблема в том, что я хотел бы сохранить его.
  • Пользовательский сценарий во втором конвейере, который будет перечислять папки внутри $ (CustomDestinationFolder), получать имя папки артефакта, переименовывать его в жестко закодированный «древний» имя. Чувствуется довольно хаки sh.

Есть ли лучший способ справиться с этим?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Отличается от Eri c, здесь я просто следую вашей idea1 , сохраняя $(Build.buildId) указанным в имени артефакта.

Если вы установите system.debug из pipeline2 как true, вы увидите, что задача DownloadBuildArtifacts сама генерирует одну переменную среды на основе разных используемых сборок: BuildNumber

enter image description here

Просто воспользуйтесь им, установите reference name из DownloadBuildArtifacts задача: ref.

Затем вы можете вызвать эту переменную для получить значение buildid на следующих шагах: $(ref.BuildNumber).

Тем временем вы можете использовать задачу copy files , сохранив в имени артефакта значение $(Build.BuildId).

0 голосов
/ 15 февраля 2020

Вы можете выполнить go вниз по маршруту с помощью задачи копирования файла и подстановочных знаков, чтобы получить то, что вы хотите.

Но если вы в конечном итоге захотите переименовать папку артефакта для включения во второй конвейер, я бы просто go переименовал папку артефакта после ее загрузки.

Я бы не назвал это хаки sh, если бы он решал проблему просто и легко для понимания.

- task: DownloadBuildArtifacts@0
  inputs:
    buildType: 'specific'
    project: 'your-project'
    pipeline: 'your-pipeline'
    buildVersionToDownload: 'latest'
    downloadType: 'specific'
    downloadPath: '$(System.ArtifactsDirectory)\customLocation'

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: Get-ChildItem $(System.ArtifactsDirectory)\customLocation | Rename-Item -NewName 'ancient'
...