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": [ <path(s) to files here> ] }
-
files
公開モジュールに含まれるべきすべてのファイルを選択するグロブパターンのキーをfiles
更新します。files
詳細は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
という単一のジョブでパイプラインを設定し、semantic-release
を実行しています。semantic-releaseライブラリは、npmパッケージの新しいバージョンを公開し、新しいGitLabリリースを作成します(必要な場合)。
デフォルトのbefore_script
は、publish
のジョブ中にパッケージレジストリへの認証に使われる一時的な.npmrc
を生成します。
CI/CD変数の設定
パッケージのパブリッシュの一環として、semantic-release はpackage.json
のバージョン番号を増やします。semantic-release がこの変更をコミットして GitLab にプッシュするために、パイプラインはGITLAB_TOKEN
という名前のカスタム CI/CD 変数を必要とします。この変数を作成するには
- 左のサイドバーで、自分のアバターを選択してください。
- 環境設定 > アクセストークン を選択します。
- トークン名]ボックスに、トークン名を入力します。
- select scopesで、apiチェックボックスを選択します。
- プロジェクトアクセストークンの作成」を選択します。
- 値をコピーします。
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- Settings > CI/CDを選択します。
- 変数]を展開します。
- 変数の追加を選択します。
-
キーボックスに、
GITLAB_TOKEN
と入力します。 - Value] ボックスにトークンを貼り付けます。
- 変数のマスクチェックボックスを選択します。
- 変数の追加を選択します。
semantic-releaseの設定
semantic-releaseは設定情報を.releaserc.json
プロジェクト内のファイルから .releaserc.json
取得します。リポジトリのルートに.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: testing patch releases
コミットをデフォルトブランチにプッシュします。パイプラインはプロジェクトのリリースページに新しいリリース (v1.0.0
) を作成し、パッケージの新しいバージョンをプロジェクトのパッケージレジストリページに公開します。
マイナーリリースを作成するには、次のようなコミットメッセージを使用します:
feat: testing minor releases
あるいは、ブレークチェンジの場合は
feat: testing major releases
BREAKING CHANGE: This is a 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 Runnerがリポジトリのキャッシュバージョンを使う semantic-release
ことで再作成されることがあります。semantic-release
タグが残っているキャッシュリポジトリを持つ Runner でジョブが実行されると、 semantic-release
メインリポジトリにタグが再作成されます。
この挙動を避けるには、以下のどちらかを行います:
-
GIT_STRATEGY: clone
でランナーを設定します。 - CI/CD スクリプトに
git fetch --prune-tags
コマンド を含めます。