Yarn을 사용하여 패키지 발행하기
Yarn 1 (Classic) 및 Yarn 2+로 패키지를 발행할 수 있습니다.
배포 컨테이너에서 사용된 Yarn 버전을 찾으려면 yarn --version
을 실행하여 yarn publish
를 호출하는 CI 스크립트 작업 블록의 script
블록에서 실행합니다. Yarn 버전은 파이프라인 출력에서 확인할 수 있습니다.
Yarn 패키지 빌드 방법을 알아보세요.
Yarn Classic 및 Yarn 2+을 시작하는 데 Yarn 문서를 사용할 수 있습니다.
GitLab 패키지 레지스트리로 발행
Yarn을 사용하여 GitLab 패키지 레지스트리로 발행할 수 있습니다.
패키지 레지스트리에 대한 인증
패키지를 발행하려면 토큰이 필요합니다. 원하는 작업에 따라 다양한 토큰을 사용할 수 있습니다. 자세한 내용은 토큰 사용 가이드를 참조하세요.
- 조직에서 2단계 인증(2FA)을 사용하는 경우
api
스코프로 설정된 개인 액세스 토큰을 사용해야 합니다. - CI/CD 파이프라인을 통해 패키지를 발행하는 경우, 개인 러너에서 CI 작업 토큰을 사용하거나 인스턴스 러너용으로 변수를 등록할 수 있습니다.
발행 구성
발행을 위해 .yarnrc.yml
에 다음 구성을 설정하세요. 이 파일은 package.json
을 찾는 파키지 프로젝트 소스의 루트 디렉터리에 있어야 합니다.
npmScopes:
<my-org>:
npmPublishRegistry: 'https://<your_domain>/api/v4/projects/<your_project_id>/packages/npm/'
npmAlwaysAuth: true
npmAuthToken: '<your_token>'
이 구성에서:
-
<my-org>
를 조직 스코프로 대체하고@
기호는 제외합니다. -
<your_domain>
을 도메인 이름으로 대체합니다. -
<your_project_id>
를 프로젝트 개요 페이지에서 찾을 수 있는 프로젝트 ID로 대체합니다. -
<your_token>
을 배포 토큰, 그룹 액세스 토큰, 프로젝트 액세스 토큰 또는 개인 액세스 토큰으로 대체합니다.
Yarn Classic에서는 package.json
파일에서 영역 지정 레지스트리가 작동하지 않습니다. Yarn Classic의 경우 publishConfig
아래에 @scope:registry
대신 registry
가 있어야 합니다. 명령 줄이나 CI/CD 파이프라인을 사용하여 GitLab 패키지 레지스트리로 발행할 수 있습니다.
명령줄을 통한 발행 - 매뉴얼 발행
# Yarn 1 (Classic)
yarn publish
# Yarn 2+
yarn npm publish
이제 패키지가 패키지 레지스트리에 발행되어야 합니다.
CI/CD 파이프라인을 통한 발행 - 자동화된 발행
이 메서드를 사용할 때는 파이프라인 변수를 사용할 수 있습니다.
인스턴스 러너 (기본값) 또는 개인 러너 (고급)을 사용할 수 있습니다.
인스턴스 러너
프로젝트 또는 그룹에 대한 인증 토큰을 생성하려면 다음 단계를 수행하세요.:
- 왼쪽 사이드 바에서 검색 또는 이동을 선택하고 프로젝트 또는 그룹을 찾습니다.
- 왼쪽 사이드 바에서 설정 > 리포지터리 > 배포 토큰을 선택합니다.
-
read_package_registry
및write_package_registry
스코프로 배포 토큰을 생성하고 복사합니다. - 왼쪽 사이드 바에서 설정 > CI/CD > 변수를 선택합니다.
-
변수 추가
를 선택하고 다음 설정을 사용합니다:
필드 | 값 |
---|---|
키 | NPM_AUTH_TOKEN
|
값 | <단계-3에서-생성된-토큰>
|
유형 | 변수 |
보호 변수 | 확인됨
|
마스크 변수 | 확인됨
|
변수 확장 | 확인됨
|
보호 변수를 사용하려면:
- Yarn 패키지 소스 코드를 포함하는 리포지터리로 이동합니다.
- 왼쪽 사이드 바에서 설정 > 리포지터리를 선택합니다.
- 태그가 있는 브랜치에서 빌드하려면 보호된 태그를 선택하고 의미 있는 버전 관리를 위해
v*
(와일드카드)를 추가합니다. - 태그가 없는 브랜치에서 빌드하려면 보호된 브랜치를 선택합니다.
- 태그가 있는 브랜치에서 빌드하려면 보호된 태그를 선택하고 의미 있는 버전 관리를 위해
그런 다음 위에서 만든 NPM_AUTH_TOKEN
을 패키지 프로젝트 루트 디렉터리의 .yarnrc.yml
구성에 추가하세요. 여기서 package.json
을 찾을 수 있습니다.
npmScopes:
esp-code:
npmPublishRegistry: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/npm/"
npmAlwaysAuth: true
npmAuthToken: "${NPM_AUTH_TOKEN}"
개인 러너
.yarnrc.yml
구성에 CI_JOB_TOKEN
을 추가하세요. 이 파일은 패키지 프로젝트 루트 디렉터리에 위치해야 합니다. 여기서 package.json
을 찾을 수 있습니다.
npmScopes:
esp-code:
npmPublishRegistry: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/npm/"
npmAlwaysAuth: true
npmAuthToken: "${CI_JOB_TOKEN}"
패키지를 CI/CD 파이프라인을 통해 발행하려면 yarnrc.yml
을 포함하는 GitLab 프로젝트에서 .gitlab-ci.yml
파일을 편집하거나 만들어야 합니다. 예를 들어 다음과 같이 태그 푸시에서만 트리거하도록 설정할 수 있습니다.
# Yarn 1
image: node:lts
stages:
- deploy
rules:
- if: $CI_COMMIT_TAG
deploy:
stage: deploy
script:
- yarn publish
# Yarn 2+
image: node:lts
stages:
- deploy
rules:
- if: $CI_COMMIT_TAG
deploy:
stage: deploy
before_script:
- corepack enable
- yarn set version stable
script:
- yarn npm publish
파이프라인 실행 시 이제 패키지가 패키지 레지스트리에 발행되어야 합니다.
패키지 설치
다음 두 가지 API 엔드포인트 중 하나를 사용하여 패키지를 설치할 수 있습니다.
-
인스턴스 수준: 조직 스코프에서 많은 패키지를 다룰 때 사용합니다.
-
인스턴스 수준에서 패키지를 설치하려면 패키지에 영역을 지정해야 합니다. 영역을 지정한 패키지는
@
로 시작하고@owner/package-name
형식을 갖습니다. 패키지를.yarnrc.yml
파일에서 설정하거나package.json
의publishConfig
옵션을 사용하여 영역을 설정할 수 있습니다.@scope
에 사용된 값은 패키지를 호스팅하는 조직 루트(최상위 프로젝트)...com/my-org
(@my-org)이고, 패키지 소스 코드를 포함하는 프로젝트의 루트가 아닙니다. 영역은 항상 소문자여야 합니다. 패키지 이름은@my-org/any-name
이 될 수 있습니다. -
프로젝트 수준: 일회성 패키지를 사용할 때 사용합니다.
프로젝트 수준에서 패키지를 설치하려면 이름 규칙을 준수할 필요가 없습니다.
프로젝트 URL | 패키지 레지스트리 | 조직 스코프 | 전체 패키지 이름 |
---|---|---|---|
https://gitlab.com/<my-org>/<group-name>/<package-name-example>
| Package Name Example | @my-org
| @my-org/package-name
|
https://gitlab.com/<example-org>/<group-name>/<project-name>
| Project Name | @example-org
| @example-org/project-name
|
인스턴스 수준 또는 프로젝트 수준에서 설치할 수 있습니다.
.yarnrc.yml
의 구성은 패키지를 사용하는 프로젝트의 루트에 추가하거나 시스템 사용자 홈 디렉터리에 있는 글로벌 구성을 사용할 수 있습니다.
인스턴스 레벨에서 설치
.yarnrc.yml
파일에서 글로벌 구성에 대해 다음 단계를 사용하십시오.
조직 범위 구성
npmScopes:
<my-org>:
npmRegistryServer: "https://<your_domain_name>/api/v4/packages/npm"
-
@
기호를 제외한 프로젝트의 루트 레벨 그룹으로 교체하십시오.<my-org>
을(를). - 예를 들어,
gitlab.com
과 같이 도메인 이름을<your_domain_name>
으로 교체하십시오.
레지스트리 설정
이 단계는 패키지가 공개되어 있고 개인적인 것이 아닌 경우에 건너뛰십시오.
npmRegistries:
//<your_domain_name>/api/v4/packages/npm:
npmAlwaysAuth: true
npmAuthToken: "<your_token>"
- 예를 들어, 도메인 이름을
<your_domain_name>
으로 교체하십시오,gitlab.com
과 같이. - 배포 토큰(권장), 그룹 액세스 토큰, 프로젝트 액세스 토큰 또는 개인 액세스 토큰으로
<your_token>
을(를) 교체하십시오.
프로젝트 레벨에서 설치
.yarnrc.yml
파일의 각 프로젝트에 대해 다음 단계를 사용하십시오.
- 프로젝트 범위 구성 설정.
- 레지스트리 설정 레지스트리 설정(프로젝트 레벨).
프로젝트 범위 구성
npmScopes:
<my-org>:
npmRegistryServer: "https://<your_domain_name>/api/v4/projects/<your_project_id>/packages/npm"
-
@
기호를 제외한 프로젝트의 루트 레벨 그룹으로 교체하십시오.<my-org>
을(를). - 예를 들어,
gitlab.com
과 같이 도메인 이름을<your_domain_name>
으로 교체하십시오. -
프로젝트 개요 페이지에서 찾을 수 있는 프로젝트 ID로
<your_project_id>
을(를) 교체하십시오.
레지스트리 설정(프로젝트 레벨)
이 단계는 패키지가 공개되어 있고 개인적인 것이 아닌 경우에 건너뛰십시오.
npmRegistries:
//<your_domain_name>/api/v4/projects/<your_project_id>/packages/npm:
npmAlwaysAuth: true
npmAuthToken: "<your_token>"
- 예를 들어, 도메인 이름을
<your_domain_name>
으로 교체하십시오,gitlab.com
과 같이. - 배포 토큰(권장), 그룹 액세스 토큰, 프로젝트 액세스 토큰 또는 개인 액세스 토큰으로
<your_token>
을(를) 교체하십시오. -
프로젝트 개요 페이지에서 찾을 수 있는 프로젝트 ID로
<your_project_id>
을(를) 교체하십시오.
패키지 설치
Yarn 2+의 경우, 명령줄이나 CI/CD 파이프라인에서 yarn add
를 사용하여 패키지를 설치하십시오:
yarn add @scope/my-package
Yarn Classic용
Yarn Classic 설치에는 .npmrc
및 .yarnrc
파일이 모두 필요합니다:
-
.npmrc
파일에 자격 증명을 배치하십시오. -
.yarnrc
파일에 범위가 지정된 레지스트리를 배치하십시오.
# .npmrc
//<your_domain_name>/api/v4/projects/<your_project_id>/packages/npm/:_authToken="<your_token>"
# .yarnrc
"@scope:registry" "https://<your_domain_name>/api/v4/projects/<your_project_id>/packages/npm/"
그런 다음 yarn add
를 사용하여 패키지를 설치할 수 있습니다.
관련 주제
문제 해결
npm 레지스트리에 대한 Yarn 실행 중 오류 발생
npm 레지스트리에서 Yarn을 사용하는 경우 다음과 같은 오류 메시지가 표시될 수 있습니다:
yarn install v1.15.2
warning package.json: No license field
info No lockfile found.
warning XXX: No license field
[1/4] 🔍 Resolving packages...
[2/4] 🚚 Fetching packages...
error An unexpected error occurred: "https://gitlab.example.com/api/v4/projects/XXX/packages/npm/XXX/XXX/-/XXX/XXX-X.X.X.tgz: Request failed \"404 Not Found\"".
info If you think this is a bug, please open a bug report with the information provided in "/Users/XXX/gitlab-migration/module-util/yarn-error.log".
info Visit https://classic.yarnpkg.com/en/docs/cli/install for documentation about this command
이 경우 다음 명령을 사용하여 현재 디렉터리에 .yarnrc
파일이라는 파일을 생성합니다. 글로벌 구성을 위해 사용자 홈 디렉터리나 프로젝트 루트 중 하나에 있도록합니다:
yarn config set '//gitlab.example.com/api/v4/projects/<your_project_id>/packages/npm/:_authToken' "<your_token>"
yarn config set '//gitlab.example.com/api/v4/packages/npm/:_authToken' "<your_token>"