Azure Pipelines で NuGet パッケージを発行する (YAML/クラシック)

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

Azure Pipelines を使用すると、Classic または YAML パイプラインを使用して、NuGet パッケージを組織内または他の組織内の Azure Artifacts フィードや、nuget.org などのパブリック レジストリに発行できます。 この記事では、次の方法について学習します。

  • パッケージを内部フィードに発行する
  • 別の組織のフィードにパッケージを発行する
  • パッケージのバージョン管理

前提条件

同じ組織内のフィードに NuGet パッケージを発行する

Note

Azure パイプラインを使用してパッケージをフィードに公開するには、 プロジェクト コレクション ビルド サービス とプロジェクトの ビルド サービス ID の両方に、フィード設定で割り当てられた フィード発行者 (共同作成者) ロールが付与されていることを確認します。 詳細については、 権限の管理 を参照してください。

  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 パイプラインはセマンティック バージョニングをサポートし、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)'

Note

DotNetCore パッケージと DotNetStandard パッケージは、System.InvalidCastExceptions を回避するために、DotNetCoreCLI@2 タスクでパッケージ化する必要があります。 詳しくは、.NET Core CLI タスクに関する記事を参照してください。

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