分享方式:


使用 Azure Pipelines 發佈 NuGet 套件 (YAML/傳統)

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

使用 Azure Pipelines,您可以使用傳統或 YAML 管線,將 NuGet 套件發佈至組織中的 Azure Artifacts 摘要、其他組織中,以及公用登錄,例如 nuget.org。 在本文中,您將學會如何:

  • 將套件發佈至內部摘要
  • 將套件發佈至不同組織中的摘要
  • 套件版本控制

必要條件

將 NuGet 套件發佈至相同組織中的摘要

注意

若要使用 Azure Pipelines 將套件發佈至摘要,請確定 專案集合組建服務和 專案的 組建服務 身分識別都會獲得 摘要發行者(參與者) 角色,這些角色會指派給您的摘要設定。 如需詳細資訊,請參閱 管理許可權

  1. 登入您的 Azure DevOps 組織,然後瀏覽至您的專案。

  2. 選取 [ 管線],然後選取您的管線定義。

  3. 選取 [ 編輯],然後將下列代碼段新增至您的 YAML 管線。

steps:
- task: NuGetToolInstaller@1                            # Minimum required NuGet version: 4.8.0.5385+.
  displayName: 'NuGet Tool Installer'

- task: NuGetAuthenticate@0
  displayName: 'NuGet Authenticate'

- script: |
      nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
  displayName: Push
  1. 登入您的 Azure DevOps 組織,然後瀏覽至您的專案。

  2. 選取 [ 管線],然後選取您的管線定義。

  3. 選取 [ 編輯],然後將下列代碼段新增至您的 YAML 管線。

steps:
- task: NuGetToolInstaller@1                            # Minimum required NuGet version: 4.8.0.5385+.
  displayName: 'NuGet Tool Installer'

- task: NuGetAuthenticate@1
  displayName: 'NuGet Authenticate'

- script: |
      nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
  displayName: Push

將 NuGet 套件發佈至另一個組織中的摘要

若要將 NuGet 套件發佈至不同 Azure DevOps 組織中的摘要,您必須先在目標組織中建立個人存取令牌 (PAT)。 瀏覽至載入目標摘要的組織,並使用封裝>讀取和寫入範圍建立個人存取權杖。 建立 PAT 之後,請將它複製並儲存在安全的位置,因為您需要在下一節中設定服務連線。

  1. 登入管線將執行所在的 Azure DevOps 組織,然後流覽至您的專案。

  2. 流覽至您的項目設定>服務連線。

  3. 選取 [ 新增服務連線],選取 [NuGet],然後選取 [ 下一步]。

  4. 選取 [外部 Azure DevOps Server ] 作為 [驗證] 方法,然後輸入您的目標 摘要 URL。 貼上 您稍早建立的個人存取令牌 、為您的服務連線提供名稱,並在適用於您的案例時檢查 [授與所有管線 的訪問許可權]。

  5. 當完成時,選擇儲存

    此螢幕快照顯示如何設定 NuGet 服務連線,以在不同的組織中向外部摘要進行驗證。

  1. 登入您的 Azure DevOps 組織,然後瀏覽至您的專案。

  2. 選取 [ 管線],然後選取您的管線定義。

  3. 選取 [ 編輯],然後將下列代碼段新增至您的 YAML 管線。

    - task: NuGetToolInstaller@1                                # Minimum required NuGet version: 4.8.0.5385+.
      displayName: 'NuGet Tool Installer'
    
    - task: NuGetAuthenticate@1
      inputs:
        nuGetServiceConnections: <SERVICE_CONNECTION_NAME>
    
    - script: |
          nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
      displayName: Push       
    
  1. 登入您的 Azure DevOps 組織,然後瀏覽至您的專案。

  2. 選取 [ 管線],然後選取您的管線定義。

  3. 選取 [ 編輯],然後將下列代碼段新增至您的 YAML 管線。

    - task: NuGetToolInstaller@1                            # Minimum required NuGet version: 4.8.0.5385+.
      displayName: 'NuGet Tool Installer'
    
    - task: NuGetAuthenticate@0
      inputs:
        nuGetServiceConnections: <SERVICE_CONNECTION_NAME>
    
    - script: |
        nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
      displayName: Push          
    

螢幕快照,顯示封裝已成功發佈至不同組織中的摘要。

NuGet 工作套件版本控制

Azure Pipelines 支持 語意版本控制 ,並提供下列 NuGet 工作的組態選項:

  • 使用日期和時間 (傳統) | byPrereleaseNumber (YAML):您的套件版本會遵循格式: Major.Minor.Patch-ci-datetime ,您可以在其中彈性地自定義 Major、Minor 和 Patch 值。

  • 使用環境變數 (傳統) | byEnvVar (YAML):您的套件版本會設定為指定環境變數的值。

  • 使用組建編號 (傳統) | byBuildNumber (YAML):您的套件版本會設定為組建編號。 請確定您在管線 選項 中將組建編號格式定義為 $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)。 若要在 YAML 中指定格式,請在管線根目錄新增 name: 屬性,並定義您的格式。

以下範例示範如何使用日期和時間版本設定來產生格式化為: Major.Minor.Patch-ci-datetime 的 SemVer 兼容套件。

variables:
  Major: '1'
  Minor: '0'
  Patch: '0'

steps:
- task: NuGetCommand@2
  inputs:
    command: pack
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Major)'
    minorVersion: '$(Minor)'
    patchVersion: '$(Patch)'

注意

DotNetCoreDotNetStandard 套件應該與工作一起 DotNetCoreCLI@2 封裝,以避免 System.InvalidCastExceptions。 如需詳細資訊, 請參閱 .NET Core CLI 工作。

task: DotNetCoreCLI@2
inputs:
    command: pack
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Major)'
    minorVersion: '$(Minor)'
    patchVersion: '$(Patch)'