[英]How do I upload Artifacts depending on Release or Prerelease to Artifactory using GitVersion on Azure DevOps?
我更喜歡在Artifactory中以Repo [dev | test | prod]-> Artifact Name-> Releases Artifacts的層次結構來組織我的工件,在這里-> Pre-Releases進入子文件夾。
為什么? 因此,當我在Artifactory Repository Browser中導航時,我沒有一棵過長的樹。 我可以擴展存儲庫,並按工件名稱查看第一級,但仍然看不到任何工件,然后擴展工件名稱葉,然后查看我發布的工件。 但是,下面的第一項將是一個名為“ prerelease”的子目錄文件夾。 這樣做是為了使我可以輕松地手動刪除所有預發行版本(如果希望執行一項操作),或計划清理它們。
[My Repo]
|
+-\prerelease\
| |--artifact-1.2.3-ci0004.nupkg
| |--artifact-1.0.1-ci0002.nupkg
|--artifact-1.0.0.nupkg
|--artifact-1.0.1.nupkg
我知道如何使用Artifactory filespec將軟件包上傳到我的存儲庫:
** For Pre-Release
{
"files": [
{
"pattern": "$(build.artifactstagingdirectory)\*.nupkg",
"target": "myrepo-nuget-dev-local/$(PackageName)/prerelease/"
}
]
}
** For Release
{
"files": [
{
"pattern": "$(build.artifactstagingdirectory)\*.nupkg",
"target": "myrepo-nuget-dev-local/$(PackageName)/"
}
]
}
我需要做的是將每個文件規范放到其自己的構建步驟中,然后添加條件,這些條件將在一個構建步驟或另一個構建步驟中執行,而從不執行。 為什么? 因為構建工件將是預發布工件,也可能是發布工件,但永遠不會都是。 我正在使用GitVersion和Git標記以及Azure DevOps。
那么問題來了:“自定義條件”需要什么才能生效?
此邏輯適用於任何CI系統,但是此語法適用於Azure DevOps。
如何創建這些文件,可以在這里找到: https : //docs.microsoft.com/zh-cn/azure/devops/pipelines/process/expressions?view=azure-devops
看起來像這樣:
對於預發布:
and(succeeded(), not(startsWith(variables['GitVersion.BranchName'], 'tags/')), or(ne(variables['GitVersion.PreReleaseLabel'], ''),ne(variables['GitVersion.BuildMetaData'], '')))
這就是說必須滿足所有三個條件:
發布:
and(succeeded(), or(and(eq(variables['GitVersion.PreReleaseLabel'], ''), eq(variables['GitVersion.BuildMetaData'], ''), eq(variables['GitVersion.BranchName'], 'master')), startsWith(variables['GitVersion.BranchName'], 'tags/')), ne(variables['Build.Reason'], 'PullRequest'))
這就是說必須滿足所有三個條件:
看起來像這樣:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.