semantic-release를 사용하여 GitLab 패키지 레지스트리에 npm 패키지 발행하기
이 가이드에서는 semantic-release를 사용하여 npm 패키지를 자동으로 GitLab 패키지 레지스트리에 발행하는 방법을 보여줍니다.
전체 예제 소스를 확인하거나 복제할 수도 있습니다.
모듈 초기화
- 터미널을 열고 프로젝트 저장소로 이동합니다.
-
npm init
을 실행합니다. 프로젝트의 경로가gitlab-examples/semantic-release-npm
인 경우 모듈의 이름을@gitlab-examples/semantic-release-npm
으로 지정하세요. -
다음 npm 패키지를 설치합니다:
npm install semantic-release @semantic-release/git @semantic-release/gitlab @semantic-release/npm --save-dev
-
모듈의
package.json
에 다음 속성을 추가합니다:{ "scripts": { "semantic-release": "semantic-release" }, "publishConfig": { "access": "public" }, "files": [ <파일 경로 입력> ] }
-
files
키를 수정하여 발행된 모듈에 포함해야 하는 모든 파일을 선택하는 glob 패턴을 추가합니다.files
에 관한 자세한 정보는 npm 문서에서 찾을 수 있습니다. -
node_modules
를 커밋하지 않도록 프로젝트에.gitignore
파일을 추가하세요:node_modules
파이프라인 구성
다음 내용으로 .gitlab-ci.yml
을 생성합니다:
default:
image: node:latest
before_script:
- npm ci --cache .npm --prefer-offline
- |
{
echo "@${CI_PROJECT_ROOT_NAMESPACE}:registry=${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/npm/"
echo "${CI_API_V4_URL#https?}/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=\${CI_JOB_TOKEN}"
} | tee -a .npmrc
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- .npm/
workflow:
rules:
- if: $CI_COMMIT_BRANCH
variables:
NPM_TOKEN: ${CI_JOB_TOKEN}
stages:
- release
publish:
stage: release
script:
- npm run semantic-release
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
이 예제는 publish
작업을 실행하는 단일 작업인 release
를 포함하여 파이프라인을 구성합니다. semantic-release 라이브러리는 npm 패키지의 새 버전을 발행하고 필요한 경우 새로운 GitLab 릴리스를 생성합니다.
기본 before_script
는 publish
작업 중에 패키지 레지스트리에 인증하는 데 사용되는 임시 .npmrc
를 생성합니다.
CI/CD 변수 설정
패키지를 발행하는 일환으로 semantic-release는 package.json
에서 버전 번호를 증가시킵니다. 이 변경 사항을 커밋하고 GitLab에 푸시하도록 semantic-release를 구성하려면 파이프라인에 GITLAB_TOKEN
이라는 사용자 지정 CI/CD 변수가 필요합니다. 이 변수를 생성하려면 다음 단계를 수행하세요:
- 왼쪽 사이드바에서 아바타를 선택합니다.
- Preferences > Access Tokens를 선택합니다.
- Token name 상자에 토큰 이름을 입력합니다.
- select scopes 아래에서 api 확인란을 선택합니다.
- Create project access token을 선택합니다.
- 값을 복사합니다.
- 왼쪽 사이드바에서 Search or go to을 선택하여 프로젝트를 찾습니다.
- Settings > CI/CD를 선택합니다.
- Variables를 확장합니다.
- Add variable를 선택합니다.
-
Key 상자에
GITLAB_TOKEN
을 입력합니다. - Value 상자에 토큰을 붙여넣습니다.
- Mask variable 확인란을 선택합니다.
- Add variable을 선택합니다.
semantic-release 구성
semantic-release는 프로젝트의 루트에 있는 .releaserc.json
파일에서 구성 정보를 가져옵니다. 다음과 같이 프로젝트에 .releaserc.json
을 생성합니다:
{
"branches": ["master"],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/gitlab",
"@semantic-release/npm",
[
"@semantic-release/git",
{
"assets": ["package.json"],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
]
]
}
릴리즈 공개 시작하기
커밋 메시지를 포함하여 테스트를 위해 파이프라인을 테스트하세요:
fix: 테스트 패치 릴리즈
커밋을 기본 브랜치에 푸시하세요. 파이프라인은 프로젝트의 릴리즈 페이지에 새 릴리즈(v1.0.0
)를 생성하고, 패키지를 프로젝트의 패키지 레지스트리 페이지에 새 버전으로 게시해아 합니다.
마이너 릴리즈를 생성하려면 다음과 같은 커밋 메시지를 사용하세요:
feat: 테스트 마이너 릴리즈
또는, 메이저 변경 사항을 위해서:
feat: 테스트 메이저 릴리즈
BREAKING CHANGE: 이것은 메이저 변경 사항입니다.
커밋 메시지가 릴리즈에 어떻게 매핑되는지에 대한 자세한 정보는 semantic-releases 문서에서 찾을 수 있습니다.
프로젝트에서 모듈 사용하기
게시된 모듈을 사용하려면, 프로젝트에 모듈에 종속되는 .npmrc
파일을 추가하세요. 예를 들어, 예제 프로젝트의 모듈을 사용하려면:
@gitlab-examples:registry=https://gitlab.com/api/v4/packages/npm/
그런 다음, 모듈을 설치하세요:
npm install --save @gitlab-examples/semantic-release-npm
문제 해결
삭제된 Git 태그가 다시 나타남
저장소에서 삭제된 Git 태그가 때때로 semantic-release
에 의해 다시 생성될 수 있습니다. GitLab 러너가 저장소의 캐시 버전을 사용할 때 작업이 실행되면, 여전히 해당 태그가 있는 캐시된 저장소를 사용하여 semantic-release
가 주 저장소에 태그를 다시 생성합니다.
이 동작을 피하려면 다음 중 하나를 수행할 수 있습니다:
- 러너를
GIT_STRATEGY: clone
으로 구성. - CI/CD 스크립트에
git fetch --prune-tags
명령을 포함하세요.