NuGetAuthenticate@1 - NuGet 인증 v1 작업

Azure Artifacts 및 기타 NuGet 리포지토리로 인증하도록 NuGet 도구를 구성합니다. NuGet >= 4.8.5385, dotnet >= 6 또는 MSBuild >= 15.8.166.59604가 필요합니다.

Syntax

# 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 패키지 복원을 기본적으로 지원하는 nuget.exe, dotnet 및 최신 버전의 MSBuild가 포함되어 있습니다.

특히 이 작업은 다음을 구성합니다.

  • nuget.exe(버전 4.8.5385 이상)
  • dotnet / .NET 6 SDK 이상(이 작업의 이전 버전인 NuGetAuthenticateV0에는 더 이상 지원되지 않는 .NET Core 2.1이 필요합니다.)
  • MSBuild(버전 15.8.166.59604 이상)

문제가 발생하는 경우 안정적인 최신 버전으로 업그레이드하는 것이 좋습니다.

패키지 복원 중에 "작업이 취소되었습니다." 오류가 발생합니다.   어떻게 해야 합니까?

NuGet 및 Azure Artifacts 자격 증명 공급자의 알려진 문제로 인해 이러한 유형의 오류가 발생할 수 있으며 최신 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 자격 증명 공급자(이 작업에 의해 설치됨)와 관련된 알려진 문제도 있습니다. 이러한 문제가 발생하는 경우 NuGet 인증 작업에서 입력 forceReinstallCredentialProvidertrue 을 로 설정하여 최신 자격 증명 공급자가 있는지 확인합니다. 또한 이 설정을 통해 문제가 해결되면 자격 증명 공급자가 자동으로 업데이트됩니다.

위의 두 가지 중 어느 것도 문제를 해결하지 못하면 플러그 인 진단 로깅을 사용하도록 설정하고 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

내 에이전트가 웹 프록시 뒤에 있습니다. NuGetAuthenticate에서 프록시를 사용하도록 nuget.exe, dotnet 및 MSBuild를 설정하나요?

아니요. 이 작업 자체는 에이전트가 사용하도록 구성된 웹 프록시 뒤에서 작동하지만 프록시를 사용하도록 NuGet 도구를 구성하지는 않습니다.

이렇게 하려면 다음 중 하나를 수행할 수 있습니다.

  • 환경 변수 http_proxy 를 설정하고 필요에 따라 no_proxy 프록시 설정으로 설정합니다. 자세한 내용은 NuGet CLI 환경 변수를 참조하세요 . 이러한 변수는 다른 비 NuGet 도구(예: curl)도 사용할 수 있는 일반적으로 사용되는 변수입니다.

    주의:
    no_proxy 변수는 http_proxy Linux 및 Mac 운영 체제에서 대/소문자를 구분하며 소문자여야 합니다. Azure Pipelines 변수를 사용하여 환경 변수를 설정하려고 하면 대문자로 변환되므로 작동하지 않습니다. 대신 자체 호스팅 에이전트의 컴퓨터에서 환경 변수를 설정하고 에이전트를 다시 시작합니다.

  • nuget.config 참조 설명서에 설명된 대로 수동으로 또는 를 사용하여 nuget config -set사용자 수준 nuget.config 파일에 프록시 설정을 추가합니다.

    주의:
    프록시 설정(예: http_proxy)을 사용자 수준 구성에 추가해야 합니다. 다른 nuget.config 파일에 지정된 경우 무시됩니다.

이 작업에 문제가 있는 경우 디버그를 어떻게 할까요??

파이프라인에서 자세한 정보 표시 로그를 얻으려면 파이프라인 변수 system.debug 를 추가하고 를 로 true설정합니다.

이 작업은 어떻게 작동하나요?

이 작업은 아직 설치되지 않은 경우 Azure Artifacts 자격 증명 공급자 를 NuGet 플러그 인 디렉터리에 설치합니다. 그런 다음 및 VSS_NUGET_ACCESSTOKEN 와 같은 VSS_NUGET_URI_PREFIXES 환경 변수를 설정하여 자격 증명 공급자를 구성합니다. 이러한 변수는 작업 수명 동안 설정된 상태로 유지됩니다. 패키지를 복원하거나 푸시할 때 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

위의 예제 OtherOrganizationFeedConnection 에서 및 ThirdPartyRepositoryConnection 는 파이프라인에서 사용하도록 구성되고 권한이 부여되었으며 또는 명령줄 인수의 URL과 일치하는 URL이 있는 nuget.configNuGet 서비스 연결의 이름입니다.

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과 일치하는 URL이 있는 NuGet 서비스 연결 의 이름입니다.

Azure Artifacts 피드를 가리키는 패키지 원본 URL은 프로젝트를 포함하거나 포함하지 않을 수 있습니다. 프로젝트 범위 피드의 URL에는 프로젝트가 포함되어야 하며 조직 범위 피드의 URL에는 프로젝트가 포함되어서는 안됩니다. 프로젝트 범위 피드에 대해 자세히 알아봅니다.

요구 사항

요구 사항 Description
파이프라인 유형 YAML, 클래식 빌드, 클래식 릴리스
실행 중 에이전트, DeploymentGroup
요청 없음
Capabilities 이 작업은 작업의 후속 작업에 대한 요구를 충족하지 않습니다.
명령 제한 사항 모두
Settable 변수 모두
에이전트 버전 2.144.0 이상
작업 범주 패키지
요구 사항 Description
파이프라인 유형 YAML, 클래식 빌드, 클래식 릴리스
실행 중 에이전트, DeploymentGroup
요청 없음
Capabilities 이 작업은 작업의 후속 작업에 대한 요구를 충족하지 않습니다.
명령 제한 사항 모두
Settable 변수 모두
에이전트 버전 2.120.0 이상
작업 범주 패키지