Azure DevOps: как извлечь артефакт сборки из сборки Azure конвейер из скрипта PowerShell в выпуске конвейера? - PullRequest
1 голос
/ 16 января 2020

У меня есть опубликованный артефакт сборки, опубликованный в $ (Build.ArtifactStagingDirectory) / drop с artifactName "some_sidebar", и местоположение артефакта sh равно Azure Pipeline.

Как я могу получить это артефакт теперь в моем выпуске Конвейер, если у меня в задаче релиза только сценарий PowerShell?

вот код, указывающий c часть:

$path = ".\_some_sidebar\drop"
#$path = $(Build.Repository.LocalPath)
$SPFolderName = "Style Library/_some_sidebar";

# Upload template list
$status = "Uploading template list to Location: " + $SPFolderName
Write-Host $status
$te = Add-PnPFile -Path $path"\some_sidebar.js" -Folder $SPFolderName -Checkout
Set-PnPFileCheckedIn -Url $te.ServerRelativeUrl

Я получаю следующую ошибку:

 Uploading template list to Location: Style Library/_some_sidebar
2020-01-16T09:51:20.5062033Z Add-PnPFile : Local file was not found.
2020-01-16T09:51:20.5062546Z At D:\_work\_temp\6d682160-e8a7-4c56-ab30-7ff8c40f2958.ps1:51 char:7
2020-01-16T09:51:20.5062832Z + $te = Add-PnPFile -Path $path"\some_sidebar.js" -Folder $SPFolderName  ...

Я предполагаю, что путь артефакта сборки в azure конвейере - это какой-то путь на виртуальной машине ... но я не знаю, как указать этот путь внутри сценария оболочки или каков этот путь в любом случае ...

Ответы [ 2 ]

1 голос
/ 17 января 2020

Azure DevOps: Как извлечь артефакт сборки из сборки Azure Конвейер из скрипта PowerShell в Releaseline?

В вашем посте есть три вопроса, которые вызывают эту проблему проблема.

Первая , так как вы выбрали местоположение артефакта sh, равное Azure Pipeline, вы не можете установить targetPath. Вы можете проверить документ Publi sh Задача Build Artifacts :

enter image description here

Я полагаю, что то, что вы сказали, должно быть установлено * От 1020 * до $(Build.ArtifactStagingDirectory)/dro p с именем-артефактом "some_sidebar", например:

enter image description here

Но используется pathtoPublish установить путь к папке или файлу для публикации sh, другими словами, это местоположение источника артефакта, а не цель.

Итак, мы делаем не нужно использовать \drop в сценариях powershell для получения артефакта.

Second , MS предоставляет серию Release переменных , чтобы мы могли их использовать

Вы можете использовать System.DefaultWorkingDirectory, System.ArtifactsDirectory или Agent.ReleaseDirectory:

enter image description here

Итак, мы могли бы использовать одна из трех переменных в скриптах powershell, чтобы получить артефакт, но переменная - не полный путь к файлу, это путь к артефакту в конвейере выпуска, нам нужно сделать еще один шаг.

Третий , когда вы используете релиз конвейера, чтобы получить артефакт, который установит артефакт в папку, содержащую Source alias:

enter image description here

В качестве теста я создаю Пример со следующими сценариями powershell:

$path = "$(System.DefaultWorkingDirectory)\<SourceAliasVlaue>\<AartifactName>"
#$path = $(Build.Repository.LocalPath)
$SPFolderName = "Style Library/_some_sidebar";

# Upload template list
$status = "Uploading template list to Location: " + $SPFolderName
Write-Host $status

Get-ChildItem -Path $path

Я использую сценарии powershell Get-ChildItem -Path $path, чтобы перечислить файл в артефакте:

enter image description here

Теперь я могу получить файл артефакта some_sidebar.js в задаче powershell.

Примечание: Вы можете попробовать использовать подстановочный знак для получения артефакта, например:

$te = Add-PnPFile -Path "$(System.DefaultWorkingDirectory)\**\some_sidebar.js"

Надеюсь, это поможет.

0 голосов
/ 16 января 2020

Вы должны иметь возможность использовать System.ArtifactsDirectory.

Вот мой конвейер с примером того, как я использую артефакт из предыдущего шага. Эту переменную следует использовать в сценарии powershell. (Этот пример взят из конвейера yaml для сборки и выпуска.)

stages:
- stage: build
  displayName: 'Build and package solution'
  jobs:
  - job: buildsteps
    displayName: 'Steps to build and package'
    pool: 'PrivateVS2017'
    steps:
    - task: ArchiveFiles@2
      inputs:
        rootFolderOrFile: '$(Build.SourcesDirectory)/Web'
        includeRootFolder: true
        archiveType: 'zip'
        archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
        replaceExistingArchive: true
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'it-service-wiki-build'
        publishLocation: 'Container'

- stage: deploy_to_development
  displayName: 'Deploy to development Environment'
  dependsOn: build
  jobs:
  - deployment: deploy
    displayName: 'Deploy the solution to Dev'
    pool: 'PrivateVS2017'
    environment: 'ITServiceWiki-Dev'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadBuildArtifacts@0
            inputs:
              buildType: 'current'
              buildVersionToDownload: 'latest'
              downloadType: 'single'
              ArtifactName: 'it-service-wiki-build'
              downloadPath: '$(System.ArtifactsDirectory)'
          - task: ExtractFiles@1
            inputs:
              archiveFilePatterns: '../a/**/$(Build.BuildId).zip'
              destinationFolder: '$(Build.DefaultWorkingDirectory)/$(Build.BuildId)'
              cleanDestinationFolder: true

Обратите внимание на ../a/**/ при поиске почтового индекса после загрузки артефакта. Не уверен, что / a / одинаков, и все агенты сборки могут также использовать system.artifactsDirectory.

...