簡體   English   中英

如何在Azure DevOps上使用GitVersion將取決於發行版或預發行版的工件上傳到Artifactory?

[英]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'], '')))

這就是說必須滿足所有三個條件:

  1. 如果成功
  2. GitVersion.BranchName不能以'tags /'開頭(這可以確保此構建事件不是由標簽觸發的),並且,
  3. GitVersion.PreReleaseLabel不為空或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'))

這就是說必須滿足所有三個條件:

  1. 如果成功
  2. (GitVersion.PreReleaseLabel為空且GitVersion.BuildMetaData為空且GitVersion.BranchName為'master')或(GitVersion.BranchName以'tags /'開頭)
  3. Build.Reason不是“ PullRequest”

看起來像這樣:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM