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 패키지 복원을 기본적으로 지원하는 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 인증 태스크에서 입력 forceReinstallCredentialProvider
true
설정하여 최신 자격 증명 공급자가 있는지 확인합니다. 또한 이 설정을 통해 문제가 해결되면 자격 증명 공급자가 자동으로 업데이트됩니다.
위의 두 항목 중 어느 것도 문제를 해결하지 않으면 플러그 인 진단 로깅 사용하도록 설정하고 NuGet 및 Azure Artifacts 자격 증명 공급자 문제를 보고합니다.
이 작업은 NuGetCommand 및 DotNetCoreCLI 작업과 어떻게 다른가요?
이 작업은 인증이 필요한 Azure Artifacts 또는 기타 리포지토리를 사용하여 인증하도록 nuget.exe, dotnet 및 MSBuild를 구성합니다. 이 작업을 실행한 후 이후 단계에서 직접 또는 스크립트를 통해 도구를 호출하여 패키지를 복원하거나 푸시할 수 있습니다.
Azure Artifacts에 대한 인증은 작업의 수명 내에만 구성되므로 NuGetCommand 및 DotNetCoreCLI 작업은 태스크를 사용하여 패키지를 복원하거나 푸시해야 합니다. 이렇게 하면 사용자 고유의 스크립트 내에서 패키지를 복원하거나 푸시하지 못할 수 있습니다. 또한 도구에 특정 명령줄 인수를 전달하지 못할 수도 있습니다.
NuGetAuthenticate 작업은 파이프라인 내에서 인증된 피드를 사용하는 데 권장되는 방법입니다.
파이프라인에서 이 작업을 언제 실행해야 하나요?
NuGet 도구를 사용하여 Azure Artifacts와 같은 인증된 패키지 원본에 패키지를 복원하거나 푸시하기 전에 이 작업을 실행해야 합니다. 다른 주문 요구 사항은 없습니다. 예를 들어 이 작업은 NuGet 또는 .NET Core 도구 설치 관리자 작업 전후에 안전하게 실행할 수 있습니다.
ApiKey("NuGet API 키")를 사용하는 NuGet 패키지 원본(예: nuget.org)을 구성하려면 어떻게 해야 하나요?
nuget.org 같은 일부 패키지 원본은 자격 증명을 username/password
대신 패키지를 푸시할 때 인증에 API 키를 사용합니다. NuGet의 제한 사항으로 인해 이 작업을 사용하여 API 키를 사용하는 NuGet 서비스 연결을 설정할 수 없습니다.
대신에:
- ApiKey를 포함하는 비밀 변수 구성
- 변수의 이름을
myNuGetApiKey
가정하여nuget push -ApiKey $(myNuGetApiKey)
또는dotnet nuget push --api-key $(myNuGetApiKey)
사용하여 패키지 푸시를 수행합니다.
내 에이전트가 웹 프록시 뒤에 있습니다. NuGetAuthenticate에서 내 프록시를 사용하도록 nuget.exe, dotnet 및 MSBuild를 설정하나요?
아니요. 에이전트가 사용하도록 구성된이 작업 자체는 웹 프록시 뒤에서 작동하지만 프록시를 사용하도록 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 자격 증명 공급자 NuGet 플러그 인 디렉터리에 설치합니다. 그런 다음 VSS_NUGET_URI_PREFIXES
및 VSS_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에는 NuGetAuthenticateV0에 필요하고 더 이상 지원되지 않는 .NET Core 2.1 대신 .NET 6이 필요합니다. 이 문제를 해결하려면 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
파이프라인에서 사용하도록 구성되고 권한이 부여된 NuGet 서비스 연결의 이름이며, nuget.config
또는 명령줄 인수의 URL과 일치하는 URL이 있습니다.
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
OtherOrganizationFeedConnection
및 ThirdPartyRepositoryConnection
파이프라인에서 사용하도록 구성되고 권한이 부여된 NuGet 서비스 연결 이름이며 nuget.config 또는 명령줄 인수의 URL과 일치하는 URL이 있습니다.
Azure Artifacts 피드를 가리키는 패키지 원본 URL은 프로젝트를 포함하거나 포함하지 않을 수 있습니다. 프로젝트 범위 피드의 URL은 프로젝트를 포함해야 하며 조직 범위 피드의 URL에는 프로젝트가 포함되어서는 안됩니다. 프로젝트 범위 피드 대해 자세히 알아봅니다.