Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Azure Artifacts를 사용하면 개발자가 npmjs.com 및 프라이빗 피드와 같은 퍼블릭 레지스트리를 포함하여 다양한 원본에서 패키지를 관리할 수 있습니다. Azure Artifacts를 사용하여 인증하려면 npm 구성 파일을 구성해야 합니다. 이 파일에는 npm에서 사용하는 피드 URL 및 자격 증명이 포함되어 있으며 프록시 설정, 기본 패키지 위치 정의 또는 프라이빗 패키지 피드 구성과 같은 npm 클라이언트 동작을 사용자 지정하는 옵션을 제공합니다. .npmrc 파일은 일반적으로 사용자의 홈 디렉터리에 있지만 기본 설정을 재정의하기 위해 프로젝트 수준에서 만들 수도 있습니다.
Azure Artifacts는 두 개의 별도 구성 파일을 사용하는 것이 좋습니다. 첫 번째는 Azure Artifacts를 사용하여 인증하는 데만 사용되는 반면, 두 번째는 자격 증명을 저장하기 위해 로컬로 유지해야 합니다. 이 방법을 사용하면 자격 증명을 안전하게 유지하면서 구성 파일을 공유할 수 있습니다.
두 번째 파일을 설정하려면 개발 컴퓨터의 홈 디렉터리에 배치하고 모든 레지스트리 자격 증명을 포함하기만 하면 됩니다. 이렇게 하면 npm 클라이언트가 인증을 위해 자격 증명에 쉽게 액세스할 수 있습니다.
; begin auth token
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/:username=[ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
; end auth token
프로젝트 범위 피드:
; begin auth token
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
; end auth token
; begin auth token
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=DefaultCollection
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/:username=DefaultCollection
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
; end auth token
프로젝트 범위 피드:
; begin auth token
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
; end auth token
; begin auth token
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=DefaultCollection
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/:username=DefaultCollection
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
; end auth token
프로젝트 범위 피드:
; begin auth token
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
; end auth token
사용자 .npmrc 파일의 자리 표시자 [BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]를 이전 단계에서 가져온 인코딩된 개인 액세스 토큰으로 바꿉니다.
Azure DevOps 컬렉션에 로그인한 다음 프로젝트로 이동합니다.
아티팩트 선택, 피드에 연결 선택
새 창이 표시됩니다. 왼쪽 탐색 창에서 npm을 선택합니다.
제공된 지침에 따라 프로젝트 및 사용자 .npmrc 파일을 구성합니다.
팁
.npmrc 파일에서 여러 레지스트리를 사용하는 것은 범위 및 업스트림 원본에서 지원됩니다.
파이프라인 인증
파이프라인을 사용하여 인증하려면 Azure Artifacts에서 npm 인증 작업을 사용하는 것이 좋습니다.
gulp 또는 Grunt와 같은 작업 실행기를 사용하는 경우 파이프라인 시작 시 npm 인증 작업 설정의 우선 순위를 지정합니다. 이 단계에서는 자격 증명이 프로젝트의 .npmrc 파일에 삽입되고 파이프라인 실행 전체에서 유지되도록 하여 후속 단계에서 구성 파일의 자격 증명에 액세스할 수 있도록 합니다.
- task: npmAuthenticate@0
inputs:
workingFile: .npmrc ## Path to the npmrc file
customEndpoint: #Optional ## Comma-separated list of npm service connection names for registries from external organizations. For registries in your org, leave this blank
참고 항목
파이프라인에서 피드에 액세스하려면 빌드 서비스 역할이 피드 설정>권한에서 피드 및 업스트림 판독기(참가자)로 설정되어 있는지 확인합니다.
참고 항목
조직에서 방화벽 또는 프록시 서버를 사용하는 경우 적절한 도메인 URL을 허용해야 합니다. 자세한 내용은 허용된 IP 주소 및 도메인 URL을 참조 하세요 .
문제 해결
vsts-npm-auth가 인식되지 않음
이 오류는 npm 모듈 폴더가 경로에 추가되지 않았음을 나타냅니다. Node.js 설정을 다시 실행하고 옵션을 선택 Add to PATH 해야 합니다. 또는 명령 프롬프트 또는 $env:APPDATA\npm PowerShell에서 PATH 변수를 수정하여 경로에 npm 모듈 폴더를 %APPDATA%\npm 추가할 수 있습니다.
인증할 수 없음
오류: 코드 E401 npm ERR! 인증할 수 없음: -> -F 플래그를 vsts-npm-auth 사용하여 명령을 실행하여 다시 인증합니다.
403 오류가 발생하면 이름 충돌이 표시될 수 있습니다. Azure Artifacts에서 패키지는 변경할 수 없습니다. 즉, 피드에 패키지를 게시하면 해당 버전 번호가 영구적으로 예약됩니다. 삭제하더라도 동일한 버전 번호의 새 패키지를 게시할 수 없습니다. 이 문제를 해결하려면 package.json 파일에서 패키지 버전을 업데이트한 다음 다시 시도합니다.