發佈和下載管線成品

Azure DevOps Services

使用 Azure Pipelines,您可以從管線或另一個管線中的舊階段下載成品。 您也可以將成品發佈至檔案共用,或讓它以管線成品的形式提供。

發佈成品

您可以使用 YAML、傳統編輯器或 Azure CLI 來發佈成品:

注意

發行管線不支援發佈管線成品。

steps:
- publish: $(System.DefaultWorkingDirectory)/bin/WebApp
  artifact: WebApp

注意

publish關鍵字是發佈管線成品工作的快捷方式。

雖然成品的名稱是選擇性的,但最好指定能正確反映成品內容的名稱。 如果您打算從在不同作業系統上執行的作業取用成品,您必須確定所有檔案路徑都對目標環境有效。 例如,包含字元 \ 的檔案名,或 * 無法在 Windows 上下載。

您需要發佈之檔案/資料夾的路徑。 這可以是 的絕對路徑或相對路徑 $(System.DefaultWorkingDirectory)

Azure Artifacts 中的套件是不可變的。 發佈套件之後,其版本將會永久保留。 如果套件已發佈,重新執行失敗的作業將會失敗。 如果您想要能夠在沒有遇到錯誤 套件的情況下重新執行失敗的工作,最好使用 條件 ,只有在先前的工作成功時才能執行。

  jobs:
  - job: Job1
    steps:
      - script: echo Hello Job1!

  - job: Job2
    steps:
      - script: echo Hello Job2!
    dependsOn: Job1

注意

您不會支付儲存管線成品的費用。 管線快取也可豁免儲存體計費。 請參閱 哪些成品計入我的總計費儲存體

警告

刪除管線執行會導致刪除與該執行相關聯的所有成品。

使用 .artifactignore

.artifactignore 使用類似語法 .gitignore 來 (,但) 一些限制來指定發行成品時應忽略哪些檔案。 如需詳細資訊 ,請參閱使用 .artifactignore 檔案

注意

URL 路徑不支援加號字元 + ,有些會建置套件類型的中繼資料,例如 Maven。

範例:忽略 .exe 檔案以外的所有檔案:

**/*
!*.exe

重要

當您沒有.artifactignore檔案時,Azure Artifacts 會自動忽略 .git資料夾路徑。 您可以藉由建立空 的 .artifactignore 檔案來略過此檔案。

下載成品

您可以使用 YAML、傳統編輯器或 Azure CLI 來下載成品。

steps:
- download: current
  artifact: WebApp
  • current:下載目前管線執行所產生的成品。 選項:目前、特定。

注意

已發佈的成品清單僅適用于下列相依性工作。 因此,請只在相依于具有發行成品工作之作業的不同作業中使用 current 選項。

提示

您可以使用 管線資源 在一個位置定義您的來源,並在管線中的任何位置使用它。

注意

download關鍵字是下載管線成品工作的快捷方式。

根據預設,檔案會下載至 $ (Pipeline.Workspace) 。 如果未指定成品名稱,將會為每個下載的成品建立子目錄。 您可以使用比對模式來限制下載的檔案。 如需詳細資訊 ,請參閱檔案比對模式

steps:
- download: current
  artifact: WebApp
  patterns: |
    **/*.js
    **/*.zip

成品選取專案

單一下載步驟可以下載一或多個成品。 若要下載多個成品,請將 成品名稱 欄位保留空白,並使用檔案比對模式來限制要下載的檔案。 ** 是預設檔案比對模式, (所有成品中的所有檔案) 。

單一成品

指定成品名稱時:

  1. 只會下載該特定成品的檔案。 如果成品不存在,工作將會失敗。

  2. 檔案比對模式會相對於成品的根目錄進行評估。 例如,模式 *.jar 會比對成品根目錄中副檔名 .jar 為的所有檔案。

下列範例說明如何從成品 WebApp 下載所有 *.js

steps:
- download: current
  artifact: WebApp
  patterns: '**/*.js'

多個成品

未指定成品名稱時:

  1. 您可以下載多個成品,如果找不到任何檔案,工作就不會失敗。

  2. 系統會為每個成品建立子目錄。

  3. 檔案比對模式應該假設模式的第一個區段 (或比對) 成品名稱。 例如, WebApp/** 符合成品中的所有檔案 WebApp 。 此模式 */*.dll 會比對每個成品根目錄具有 .dll 副檔名的所有檔案。

下列範例說明如何從所有成品下載所有 .zip 檔案:

steps:
- download: current
  patterns: '**/*.zip'

發行和部署作業中的成品

成品只會在部署作業中自動下載。 根據預設,成品會下載至 $(Pipeline.Workspace) 。 只有在部署中使用生命週期勾點時, deploy 才會自動插入下載成品工作。 若要停止自動下載成品,請新增 download 步驟並將其值設定為 none。 在一般建置作業中,您必須明確使用 download 步驟關鍵字或 下載管線成品 工作。 若要深入瞭解其他類型的 勾點,請參閱生命週期勾點

steps:
- download: none

跨階段使用成品

如果您想要能夠在管線中的不同階段存取您的成品,您現在可以在一個階段中發佈成品,然後在下一個階段中利用相依性下載。 如需詳細資訊 ,請參閱暫存相依性階段

範例

在下列範例中,我們會將腳本資料夾從存放庫 $(Build.ArtifactStagingDirectory) 複製到 。 在第二個階段中,我們將下載並執行腳本。

trigger:
- main
stages:
- stage: build
  jobs:
  - job: run_build
    pool:
      vmImage: 'windows-latest'
    steps:
    - task: VSBuild@1
      inputs:
        solution: '**/*.sln'
        msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
        platform: 'Any CPU'
        configuration: 'Release'

    - task: CopyFiles@2
      displayName: 'Copy scripts'
      inputs:
        contents: 'scripts/**'
        targetFolder: '$(Build.ArtifactStagingDirectory)'

    - publish: '$(Build.ArtifactStagingDirectory)/scripts'
      displayName: 'Publish script'
      artifact: drop

- stage: test
  dependsOn: build
  jobs:
  - job: run_test
    pool:
      vmImage: 'windows-latest'
    steps:
    - download: current
      artifact: drop
    - task: PowerShell@2
      inputs:
        filePath: '$(Pipeline.Workspace)\drop\test.ps1'

顯示 PowerShell 工作輸出的螢幕擷取畫面

從組建成品移轉

管線成品是新一代的組建成品,也是使用成品的建議方式。 使用 [發佈組建成品] 工作 發佈的成品仍然可以使用 [下載組建成品] 來下載,但建議您改用最新的 下載管線成品 工作。

從組建成品移轉至管線成品時:

  1. 根據預設, [下載管線成品 ] 工作會將檔案下載至 $(Pipeline.Workspace) 。 這是所有類型的成品的預設和建議路徑。

  2. 下載組建成品工作的檔案比對模式應該從 (開始,或比對) 成品名稱,不論是否指定特定成品。 在 [下載管線成品 ] 工作中,當已指定成品名稱時,模式不應該包含成品名稱。 如需詳細資訊,請參閱 單一成品選取專案。

範例

- task: PublishPipelineArtifact@1
  displayName: 'Publish'
  inputs:
    targetPath: $(Build.ArtifactStagingDirectory)/**
    ${{ if eq(variables['Build.SourceBranchName'], 'main') }}:
        artifactName: 'prod'
    ${{ else }}:
        artifactName: 'dev'
    artifactType: 'pipeline'
  • targetPath:要發佈的檔案或目錄路徑。 可以是絕對或相對於預設工作目錄。 可以包含變數,但不支援萬用字元。

  • artifactName:要發佈的成品名稱。 如果未設定,則預設為限定于作業的唯一識別碼。

  • artifactType:選擇要將成品儲存在 Azure Pipelines 中,還是將它複製到必須可從管線代理程式存取的檔案共用。 選項: pipelinefilepath

常見問題集

問:什麼是組建成品?

答:組建成品是您組建所產生的檔案。 若要深入瞭解如何發佈及取用組建成品,請參閱 建置成品

問:您是否支援將成品發佈至共用資料夾?

答:目前不是,但這項功能已規劃完成。

問:我可以在重新執行失敗的作業時刪除管線成品嗎?

答:管線成品無法取消或覆寫。 如果您想要在重新執行失敗的作業時重新產生成品,您可以在成品名稱中包含作業識別碼。 $(system.JobId) 是適合此用途的變數。 若要深入瞭解預先定義的變數,請參閱 系統變數

問:如何存取防火牆後方的成品摘要?

答:如果您的組織使用防火牆或 Proxy 伺服器,請確定您允許 Azure Artifacts 網域 URL 和 IP 位址