發佈和下載管線成品
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
成品選取專案
單一下載步驟可以下載一或多個成品。 若要下載多個成品,請將 成品名稱 欄位保留空白,並使用檔案比對模式來限制要下載的檔案。 **
是預設檔案比對模式, (所有成品中的所有檔案) 。
單一成品
指定成品名稱時:
只會下載該特定成品的檔案。 如果成品不存在,工作將會失敗。
檔案比對模式會相對於成品的根目錄進行評估。 例如,模式
*.jar
會比對成品根目錄中副檔名.jar
為的所有檔案。
下列範例說明如何從成品 WebApp
下載所有 *.js
:
多個成品
未指定成品名稱時:
您可以下載多個成品,如果找不到任何檔案,工作就不會失敗。
系統會為每個成品建立子目錄。
檔案比對模式應該假設模式的第一個區段 (或比對) 成品名稱。 例如,
WebApp/**
符合成品中的所有檔案WebApp
。 此模式*/*.dll
會比對每個成品根目錄具有.dll
副檔名的所有檔案。
下列範例說明如何從所有成品下載所有 .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'
從組建成品移轉
管線成品是新一代的組建成品,也是使用成品的建議方式。 使用 [發佈組建成品] 工作 發佈的成品仍然可以使用 [下載組建成品] 來下載,但建議您改用最新的 下載管線成品 工作。
從組建成品移轉至管線成品時:
根據預設, [下載管線成品 ] 工作會將檔案下載至
$(Pipeline.Workspace)
。 這是所有類型的成品的預設和建議路徑。下載組建成品工作的檔案比對模式應該從 (開始,或比對) 成品名稱,不論是否指定特定成品。 在 [下載管線成品 ] 工作中,當已指定成品名稱時,模式不應該包含成品名稱。 如需詳細資訊,請參閱 單一成品選取專案。
範例
- 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 中,還是將它複製到必須可從管線代理程式存取的檔案共用。 選項:
pipeline
、filepath
。
常見問題集
問:什麼是組建成品?
答:組建成品是您組建所產生的檔案。 若要深入瞭解如何發佈及取用組建成品,請參閱 建置成品 。
問:您是否支援將成品發佈至共用資料夾?
答:目前不是,但這項功能已規劃完成。
問:我可以在重新執行失敗的作業時刪除管線成品嗎?
答:管線成品無法取消或覆寫。 如果您想要在重新執行失敗的作業時重新產生成品,您可以在成品名稱中包含作業識別碼。 $(system.JobId)
是適合此用途的變數。 若要深入瞭解預先定義的變數,請參閱 系統變數 。
問:如何存取防火牆後方的成品摘要?
答:如果您的組織使用防火牆或 Proxy 伺服器,請確定您允許 Azure Artifacts 網域 URL 和 IP 位址。
相關文章
- 建置成品
- Azure Pipelines 中的版本
- 發行成品和成品來源 \(部分機器翻譯\)
- 如何使用私人套件摘要來降低風險