次の方法で共有


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:
    #forceReinstallCredentialProvider: false # boolean. Reinstall the credential provider even if already installed. Default: false.
    #nuGetServiceConnections: # string. Service connection credentials for feeds outside this organization.
# 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.

入力

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

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


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

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


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

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

出力変数

何一つ。

備考

大事な

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

上記のいずれの方法でも問題が解決されていない場合は、プラグイン診断ログ 有効にし、問題を報告して、NuGet Azure Artifacts Credential Providerを します。

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

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

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

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

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

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

nuget.org など、ApiKey ("NuGet API キー") を使用する NuGet パッケージ ソースを構成するにはどうすればよいですか?

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

その代わりに:

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

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

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

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

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

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

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

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

このタスクに問題がある場合にデバッグするにはどうすればよいですか?

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

このタスクのしくみ

このタスクは、Azure Artifacts Credential Provider を 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)). プル要求が元の場所にマージされた後、そのイベントからトリガーされたパイプラインが適切に認証されます。

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

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

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 サービス接続 の名前であり、パイプラインで使用できるように構成および承認されており、nuget.config またはコマンド ライン引数の URL と一致する URL を持っています。

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

必要条件

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