NuGetAuthenticate@1 - NuGet で v1 タスクを認証する

Azure Artifacts やその他の NuGet リポジトリで認証するように NuGet ツールを構成します。 NuGet >= 4.8.5385、dotnet >= 6、または MSBuild >= 15.8.166.59604 が必要です。

構文

# NuGet authenticate v1
# Configure NuGet tools to authenticate with Azure Artifacts and other NuGet repositories. Requires NuGet >= 4.8.5385, dotnet >= 6, or MSBuild >= 15.8.166.59604.
- task: NuGetAuthenticate@1
  inputs:
    #nuGetServiceConnections: # string. Service connection credentials for feeds outside this organization. 
    #forceReinstallCredentialProvider: false # boolean. Reinstall the credential provider even if already installed. Default: false.

入力

nuGetServiceConnections - この組織外のフィードのサービス接続資格情報
string.

省略可能。 この組織またはコレクションの外部にあるフィードの NuGet サービス接続 名のコンマ区切りの一覧。 この組織またはコレクション内のフィードの場合は、空白のままにします。ビルドの資格情報は自動的に使用されます。


forceReinstallCredentialProvider - 既にインストールされている場合でも資格情報プロバイダーを再インストールする
boolean. 既定値: false

省略可能。 資格情報プロバイダーが既にインストールされている場合でも、ユーザー プロファイル ディレクトリに再インストールします。 資格情報プロバイダーがユーザー プロファイルに既にインストールされている場合、タスクはタスク指定の資格情報プロバイダーで上書きされるかどうかを判断します。 これは、資格情報プロバイダーをアップグレード (またはダウングレードする可能性があります) 可能性があります。


タスク コントロール のオプション

すべてのタスクには、タスク入力に加えて制御オプションがあります。 詳細については、「 コントロール オプションと一般的なタスク プロパティ」を参照してください。

出力変数

[なし] :

解説

重要

このタスクは、NuGet >= 4.8.0.5385、dotnet >= 6、または MSBuild >= 15.8.166.59604 とのみ互換性があります。

このタスクと互換性のあるツールは何ですか?

このタスクでは、 NuGet クロス プラットフォーム プラグインをサポートするツールを構成します。 現在、ツールには、nuget.exe、dotnet、および最新バージョンの MSBuild が含まれており、NuGet パッケージの復元が組み込まれています。

具体的には、このタスクで次の構成が行われます。

  • nuget.exe (バージョン 4.8.5385 以降)
  • dotnet/ .NET 6 SDK 以降 (このタスクの以前のバージョンである NuGetAuthenticateV0 には、サポートされなくなった .NET Core 2.1 が必要です)
  • MSBuild (バージョン 15.8.166.59604 以降)

問題が発生した場合は、最新の安定バージョンにアップグレードすることをお勧めします。

パッケージの復元中に "タスクが取り消されました" というエラーが表示されます。 どうすればよいですか。

NuGet と Azure Artifacts Credential Provider の既知の問題により、この種類のエラーが発生する可能性があり、最新の nuget への更新が役立つ場合があります。

一部のバージョンの nuget/dotnet で 既知の問題 が発生すると、特にリソースに制約のあるマシンでの大規模な復元中に、このエラーが発生する可能性があります。 この問題は 、NuGet 5.2 および .NET Core SDK 2.1.80X と 2.2.40X で修正されています。 古いバージョンを使用している場合は、NuGet または dotnet のバージョンをアップグレードしてみてください。 .NET Core ツール インストーラー タスクを使用して、新しいバージョンの .NET Core SDK をインストールできます。

また、artifacts-credprovider/#77 や artifacts-credprovider/#108 など、Azure Artifacts Credential Provider (このタスクによってインストールされます) に関する既知の問題もあります。 これらの問題が発生した場合は、NuGet 認証タスクで入力 forceReinstallCredentialProvider を に true 設定して、最新の資格情報プロバイダーがあることを確認します。 この設定により、問題が解決されると、資格情報プロバイダーが自動的に更新されます。

上記のいずれも問題が解決しない場合は、 プラグイン診断ログ を有効にして、 NuGetAzure Artifacts 資格情報プロバイダーに問題を報告します。

このタスクは、NuGetCommand タスクと DotNetCoreCLI タスクとどのように異なりますか?

このタスクでは、azure Artifacts または認証を必要とする他のリポジトリで認証するように、nuget.exe、dotnet、MSBuild を構成します。 このタスクを実行した後、後の手順 (直接またはスクリプトを使用して) ツールを呼び出して、パッケージを復元またはプッシュできます。

Azure Artifacts への認証はタスクの有効期間内にのみ構成されるため、NuGetCommand タスクと DotNetCoreCLI タスクでは、タスクを使用してパッケージを復元またはプッシュする必要があります。 これにより、独自のスクリプト内でパッケージを復元またはプッシュできなくなる可能性があります。 また、特定のコマンド ライン引数をツールに渡すことができなくなる場合もあります。

NuGetAuthenticate タスクは、パイプライン内で認証済みフィードを使用するための推奨される方法です。

パイプラインでこのタスクを実行する必要がある場合

このタスクは、NuGet ツールを使用して、Azure Artifacts などの認証済みパッケージ ソースにパッケージを復元またはプッシュする前に実行する必要があります。 その他の注文要件はありません。 たとえば、このタスクは、NuGet または .NET Core ツール インストーラー タスクの前または後に安全に実行できます。

nuget.org など、ApiKey ("NuGet API キー") を使用する NuGet パッケージ ソースを構成操作方法。

nuget.org などの一部のパッケージ ソースでは、資格情報ではなく username/password 、パッケージをプッシュするときに認証に API キーを使用します。 NuGet の制限により、このタスクを使用して API キーを使用する NuGet サービス接続を設定することはできません。

その代わりに、次の方法を使用します。

  1. ApiKey を含む シークレット変数 を構成する
  2. 変数に名前を付けたと仮定して、 または dotnet nuget push --api-key $(myNuGetApiKey)を使用してnuget push -ApiKey $(myNuGetApiKey)パッケージ プッシュを実行するmyNuGetApiKey

エージェントが Web プロキシの背後にあります。 NuGetAuthenticate はプロキシを使用するようにnuget.exe、dotnet、MSBuild を設定しますか?

いいえ。 このタスク自体は、 エージェントが使用するように構成されている Web プロキシの背後で機能しますが、プロキシを使用するように NuGet ツールを構成することはありません。

これを行うには、次のいずれかを実行できます。

  • 環境変数 http_proxy を設定し、必要に no_proxy 応じてプロキシ設定に設定します。 詳細については、「 NuGet CLI 環境変数 」を参照してください。 これらの変数は、他の NuGet 以外のツール (curl など) も使用できる一般的に使用される変数です。

    注意:
    および no_proxy 変数はhttp_proxy、Linux および Mac オペレーティング システムでは大文字と小文字が区別され、小文字である必要があります。 Azure Pipelines 変数を使用して環境変数を設定しようとすると、大文字に変換されるため、機能しません。 代わりに、セルフホステッド エージェントのマシンに環境変数を設定し、エージェントを再起動します。

  • ユーザー レベルのnuget.config ファイルにプロキシ設定を手動で追加するか、nuget.configリファレンス ドキュメントの説明に従って を使用nuget config -setします。

    注意:
    プロキシ設定 (など http_proxy) をユーザー レベルの構成に追加する必要があります。別のnuget.config ファイルで指定されている場合は無視されます。

このタスク操作方法問題がある場合はデバッグしますか?

パイプラインから詳細ログを取得するには、パイプライン変数 system.debug を追加し、 を に設定します true

このタスクはどのように機能しますか?

このタスクでは、 Azure Artifacts 資格情報プロバイダー がまだインストールされていない場合は、NuGet プラグイン ディレクトリにインストールします。 次に、 や などのVSS_NUGET_URI_PREFIXESVSS_NUGET_ACCESSTOKEN環境変数を設定して、資格情報プロバイダーを構成します。 これらの変数は、ジョブの有効期間中も設定されたままです。 パッケージを復元またはプッシュする場合、NuGet ツールは資格情報プロバイダーを実行します。このプロバイダーでは、上記の変数を使用して、資格情報をツールに返す必要があるかどうかを判断します。

詳細については、資格情報プロバイダーのドキュメントを参照してください。

パイプラインが別のプロジェクトのフィードにアクセスする必要がある

パイプラインがフィードをホストしているプロジェクトとは異なるプロジェクトで実行されている場合は、ビルド サービスへの読み取り/書き込みアクセスを許可するように他のプロジェクトを設定する必要があります。 詳細については、「 Azure Pipelines でのパッケージのアクセス許可 」を参照してください。

これは、外部フォークからトリガーされるパイプラインの実行に対して機能しますか?

いいえ。 外部フォークからトリガーされたパイプライン実行には、内部フィード認証用の適切なシークレットへのアクセス権がありません。 したがって、認証タスクは成功したように見えますが、認証を必要とする後続のタスク (Nuget プッシュなど) は、 の行に沿ってエラーで失敗します。 ##[error]The nuget command failed with exit code(1) and error(Response status code does not indicate success: 500 (Internal Server Error - VS800075: The project with id 'vstfs:///Classification/TeamProject/341ec244-e856-40ad-845c-af31c33c2152' does not exist, or you do not have permission to access it. (DevOps Activity ID: C12C19DC-642C-469A-8F58-C89F2D81FEA7)). Pull Request が配信元にマージされた後、そのイベントからトリガーされたパイプラインが正しく認証されます。

NuGetAuthenticateV0 から NuGetAuthenticateV1 に更新しましたが、dotnet コマンドが 401 で失敗する

NuGetAuthenticateV0 から NuGetAuthenticateV1 に更新していて、dotnet コマンドの実行中にエラーが発生する場合は、ログからメッセージ It was not possible to find any compatible framework version を探します。 dotnet ユーザーの場合、NuGetAuthenticateV1 には .NET Core 2.1 ではなく .NET 6 が必要です。これは NuGetAuthenticateV0 で必要であり、サポートされなくなりました。 この問題を解決するには、dotnet コマンドの前に UseDotNet@2 タスクを使用して .NET 6 をインストールします。

- task: UseDotNet@2
  displayName: Use .NET 6 SDK
  inputs:
    packageType: sdk
    version: 6.x

組織内の NuGet パッケージを復元してプッシュする

使用するすべての Azure Artifacts フィードがパイプラインと同じ組織にある場合は、入力を指定せずに NuGetAuthenticate タスクを使用できます。 パイプラインが実行されている場所とは異なるプロジェクト内にあるプロジェクト スコープ フィードの場合は、プロジェクトとフィードにパイプラインのプロジェクトのビルド サービスへのアクセス権を手動で付与する必要があります。

nuget.config

<configuration>
  <packageSources>
    <!-- 
      Any Azure Artifacts feeds within your organization will automatically be authenticated. Both dev.azure.com and visualstudio.com domains are supported.
      Project scoped feed URL includes the project, organization scoped feed URL does not.
    -->
    <add key="MyProjectFeed1" value="https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="MyProjectFeed2" value="https://{organization}.pkgs.visualstudio.com/{project}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="MyOtherProjectFeed1" value="https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed@view}/nuget/v3/index.json" />
    <add key="MyOrganizationFeed1" value="https://pkgs.dev.azure.com/{organization}/_packaging/{feed}/nuget/v3/index.json" />
  </packageSources>
</configuration>

サービス接続を使用するには、NuGet 認証タスクの入力で nuGetServiceConnections サービス接続を指定します。 その後、タスクで を使用してサービス接続 -ApiKey AzureArtifacts を参照できます。

nuget.exe

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: NuGetToolInstaller@1 # Optional if nuget.exe >= 4.8.5385 is already on the path
  inputs:
    versionSpec: '*'
    checkLatest: true
- script: nuget restore
# ...
- script: nuget push -ApiKey AzureArtifacts -Source "MyProjectFeed1" MyProject.*.nupkg

dotnet

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: UseDotNet@2 # Optional if the .NET Core SDK is already installed
- script: dotnet restore
# ...
- script: dotnet nuget push --api-key AzureArtifacts --source https://pkgs.dev.azure.com/{organization}/_packaging/{feed1}/nuget/v3/index.json MyProject.*.nupkg

上記の例では、 と ThirdPartyRepositoryConnection は、OtherOrganizationFeedConnectionパイプラインで使用するように構成および承認されており、または コマンド ライン引数の URL と一致する URL を持つ NuGet サービス接続nuget.config名前です。

Azure Artifacts フィードを指すパッケージ ソース URL には、プロジェクトが含まれている場合と含まれていない場合があります。 プロジェクト スコープ フィードの URL にはプロジェクトを含める必要があり、組織のスコープ フィードの URL にはプロジェクトを含めてはなりません。 詳細については、 プロジェクト スコープフィードに関するページを参照してください。

組織外で NuGet パッケージを復元してプッシュする

別の組織から Azure Artifacts フィードを使用する場合、またはサードパーティの認証済みパッケージ リポジトリを使用する場合は、 NuGet サービス接続 を設定し、入力で指定する nuGetServiceConnections 必要があります。 Azure Artifacts 組織内のフィードも自動的に認証されます。

nuget.config

<configuration>
  <packageSources>
    <!-- Any Azure Artifacts feeds within your organization will automatically be authenticated -->
    <add key="MyProjectFeed1" value="https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="MyOrganizationFeed" value="https://pkgs.dev.azure.com/{organization}/_packaging/{feed}/nuget/v3/index.json" />
    <!-- Any package source listed here whose URL matches the URL of a service connection in nuGetServiceConnections will also be authenticated.
         The key name here does not need to match the name of the service connection. -->
    <add key="OtherOrganizationFeed" value="https://pkgs.dev.azure.com/{otherorganization}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="ThirdPartyRepository" value="https://{thirdPartyRepository}/index.json" />
  </packageSources>
</configuration>

nuget.exe

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: NuGetToolInstaller@1 # Optional if nuget.exe >= 4.8.5385 is already on the path
  inputs:
    versionSpec: '*'
    checkLatest: true
- script: nuget restore
# ...
- script: nuget push -ApiKey AzureArtifacts -Source "MyProjectFeed1" MyProject.*.nupkg

dotnet

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: UseDotNet@2 # Optional if the .NET Core SDK is already installed
- script: dotnet restore
# ...
- script: dotnet nuget push --api-key AzureArtifacts --source "MyProjectFeed1"  MyProject.*.nupkg

OtherOrganizationFeedConnectionThirdPartyRepositoryConnection は、パイプラインで使用するように構成および承認され、nuget.configまたはコマンド ライン引数と一致する URL を持つ NuGet サービス接続 の名前です。

Azure Artifacts フィードを指すパッケージ ソース URL には、プロジェクトが含まれている場合と含まれていない場合があります。 プロジェクト スコープ フィードの URL にはプロジェクトを含める必要があり、組織のスコープ フィードの URL にはプロジェクトを含めてはなりません。 詳細については、 プロジェクト スコープフィードに関するページを参照してください。

必要条件

要件 説明
パイプラインの種類 YAML、クラシック ビルド、クラシック リリース
実行日 エージェント、DeploymentGroup
確認要求 なし
Capabilities このタスクは、ジョブ内の後続のタスクに対する要求を満たしていません。
コマンドの制限 Any
設定可能な変数 Any
エージェントのバージョン 2.144.0 以上
タスクのカテゴリ Package
要件 説明
パイプラインの種類 YAML、クラシック ビルド、クラシック リリース
実行日 エージェント、DeploymentGroup
確認要求 なし
Capabilities このタスクは、ジョブ内の後続のタスクに対する要求を満たしていません。
コマンドの制限 Any
設定可能な変数 Any
エージェントのバージョン 2.120.0 以上
タスクのカテゴリ Package