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