Azure Pipelines で NuGet パッケージを発行する (YAML/クラシック)
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Azure Pipelines を使用すると、Classic または YAML パイプラインを使用して、NuGet パッケージを組織内または他の組織内の Azure Artifacts フィードや、nuget.org などのパブリック レジストリに発行できます。 この記事では、次の方法について学習します。
- パッケージを内部フィードに発行する
- 別の組織のフィードにパッケージを発行する
- パッケージのバージョン管理
前提条件
新しいフィードを作成します (ない場合)。
セルフホステッド エージェントを使用している場合は、.NET Core SDK (2.1.400 以降) と NuGet (4.8.0.5385 以降) がインストールされていることを確認します。
Note
Ubuntu 24.04 以降を使用している場合は、nuget.exeではなく.NET CLI で NuGetAuthenticate
タスクを使用する必要があります。 詳細については、Ubuntu でホストされる新しいイメージ のサポートに関するページを参照してください。
同じ組織内のフィードに NuGet パッケージを発行する
Azure DevOps 組織にサインインしてから、プロジェクトに移動します。
[パイプライン] を選択し、使用するパイプライン定義を選択します。
[編集] を選択し、次のスニペットを 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
Azure DevOps 組織にサインインしてから、プロジェクトに移動します。
[パイプライン] を選択し、使用するパイプライン定義を選択します。
[編集] を選択し、次のスニペットを 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
Note
Azure パイプラインを使用してパッケージをフィードに公開するには、 プロジェクト コレクション ビルド サービス とプロジェクトの ビルド サービス ID の両方に、フィード設定で割り当てられた フィード発行者 (共同作成者) ロールが付与されていることを確認します。 詳細については、 権限の管理 を参照してください。
別の組織内のフィードに NuGet パッケージを発行する
NuGet パッケージを別の Azure DevOps 組織のフィードに発行するには、まずターゲット組織で個人用アクセス トークン (PAT) を作成する必要があります。 ターゲット フィードをホストしている組織に移動し、[パッケージ化]> スコープで 個人用アクセス トークンを作成します。 PAT が作成されたら、それをコピーして安全な場所に保存します。これは、次のセクションでサービス接続を設定するときに必要になります。
パイプラインを実行する Azure DevOps 組織にサインインし、プロジェクトに移動します。
[プロジェクト設定]>[サービス接続] に移動します。
[新しいサービス接続]、[NuGet]、[次へ] の順に選択します。
[認証方法] として [外部の Azure DevOps Server] を選択し、ターゲットの [フィード URL] を入力します。 先ほど作成した個人用アクセス トークンを貼り付け、サービス接続の名前を指定して、シナリオに該当する場合は [すべてのパイプラインへのアクセス許可を与える] をオンにします。
完了したら、 [保存] を選択します。
Azure DevOps 組織にサインインしてから、プロジェクトに移動します。
[パイプライン] を選択し、使用するパイプライン定義を選択します。
[編集] を選択し、次のスニペットを 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
Azure DevOps 組織にサインインしてから、プロジェクトに移動します。
[パイプライン] を選択し、使用するパイプライン定義を選択します。
[編集] を選択し、次のスニペットを 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)'