Yarnでパッケージを公開する
Yarn 1 (Classic)とYarn 2+を使用して、パッケージを公開およびインストールできます。
デプロイコンテナで使用されているYarnのバージョンを調べるには、yarn --versionを、yarn publishを呼び出すジョブがあるCI/CDスクリプトジョブのscriptブロックで実行します。Yarnのバージョンはパイプラインの出力に表示されます。
パッケージレジストリに対する認証
パッケージレジストリとやり取りするには、トークンが必要です。実現しようとしていることに応じて、さまざまなトークンを利用できます。詳細については、トークンに関するガイダンス参照してください。
- 組織が2要素認証(2FA)を使用している場合、スコープが
apiに設定されたパーソナルアクセストークンを使用する必要があります。 - CI/CDパイプラインでパッケージを公開する場合、プライベートRunnerでCI/CDジョブトークンを使用できます。インスタンスRunnerの変数を登録することもできます。
公開用にYarnを設定する
パッケージレジストリに公開するようにYarnを設定するには、.yarnrc.ymlファイルを編集します。このファイルは、package.jsonファイルと同じ、プロジェクトのルートディレクトリにあります。
.yarnrc.ymlを編集し、次の設定を追加します:npmScopes: <my-org>: npmPublishRegistry: 'https://<domain>/api/v4/projects/<project_id>/packages/npm/' npmAlwaysAuth: true npmAuthToken: '<token>'この設定では、次のようになります:
<my-org>を組織スコープに置き換えます。@記号は含めないでください。<domain>をドメイン名に置き換えます。<project_id>をプロジェクトのIDに置き換えます。これはプロジェクトの概要ページにあります。<token>をデプロイトークン、グループアクセストークン、プロジェクトアクセストークン、またはパーソナルアクセストークンに置き換えます。
Yarn Classicでは、publishConfig["@scope:registry"]を使用したスコープレジストリはサポートされていません。詳細については、Yarnプルリクエスト7829を参照してください。代わりに、publishConfigをregistryに設定します。package.jsonファイル。
パッケージを公開する
コマンドラインから、またはGitLab CI/CDでパッケージを公開できます。
コマンドラインを使用する
パッケージを手動で公開するには:
次のコマンドを実行します:
# Yarn 1 (Classic) yarn publish # Yarn 2+ yarn npm publish
CI/CDを使用する
インスタンスRunner(デフォルト)またはプライベートRunner(高度)を使用して、パッケージを自動的に公開できます。CI/CDで公開するときにパイプライン変数を使用できます。
プロジェクトまたはグループの認証トークンを作成します:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトまたはグループを見つけます。
- 左側のサイドバーで、設定 > リポジトリ > Deploy Tokens(デプロイトークン)を選択します。
read_package_registryおよびwrite_package_registryスコープを持つデプロイトークンを作成し、生成されたトークンをコピーします。- 左側のサイドバーで、設定 > CI/CD > 変数を選択します。
Add variableを選択し、次の設定を使用します:
フィールド 値 キー: NPM_AUTH_TOKEN値 <DEPLOY-TOKEN>タイプ: 変数 保護された変数 CHECKEDマスクされた変数 CHECKED変数を展開します。 CHECKEDオプション。保護された変数を使用するには:
- Yarnパッケージのコードソースを含むリポジトリに移動します。
- 左側のサイドバーで、設定 > リポジトリを選択します。
- タグ付けのあるブランチからビルドする場合は、保護されたタグを選択し、セマンティックバージョニングのために
v*(ワイルドカード)を追加します。 - タグ付けのないブランチからビルドする場合は、ブランチルールを選択します。
- タグ付けのあるブランチからビルドする場合は、保護されたタグを選択し、セマンティックバージョニングのために
作成した
NPM_AUTH_TOKENを、パッケージプロジェクトのルートディレクトリにある、package.jsonが見つかる.yarnrc.yml設定に追加します:npmScopes: <my-org>: npmPublishRegistry: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/npm/' npmAlwaysAuth: true npmAuthToken: '${NPM_AUTH_TOKEN}'この設定で、
@記号を除外して、<my-org>を組織スコープに置き換えます。
package.jsonが配置されているパッケージプロジェクトのルートディレクトリにある.yarnrc.yml設定に、CI_JOB_TOKENを追加します:npmScopes: <my-org>: npmPublishRegistry: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/npm/' npmAlwaysAuth: true npmAuthToken: '${CI_JOB_TOKEN}'この設定で、
@記号を除外して、<my-org>を組織スコープに置き換えます。.yarnrc.ymlを含むGitLabプロジェクトで、.gitlab-ci.ymlファイルを編集または作成します。たとえば、任意のタグプッシュでのみトリガーするには:Yarn 1の場合:
image: node:lts stages: - deploy rules: - if: $CI_COMMIT_TAG deploy: stage: deploy script: - yarn publishYarn 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
パイプラインが実行されると、パッケージがパッケージレジストリに追加されます。
パッケージをインストールする
インスタンスまたはプロジェクトからインストールできます。複数のパッケージの名前とバージョンが同じ場合、パッケージをインストールすると、最後に公開されたパッケージのみが取得されます。
スコープパッケージ名
インスタンスからインストールするには、パッケージにスコープを指定して名前を付ける必要があります。.yarnrc.ymlファイルで、package.jsonのpublishConfigオプションを使用して、パッケージのスコープを設定できます。プロジェクトまたはグループからインストールする場合は、パッケージの命名規則に従う必要はありません。
パッケージスコープは@で始まり、形式@owner/package-nameに従います:
@ownerは、パッケージソースコードを含むプロジェクトのルートではなく、パッケージをホストするトップレベルグループです。- パッケージ名は任意に設定できます。
例:
| プロジェクトURL | パッケージレジストリ | 組織スコープ | パッケージのフルネーム |
|---|---|---|---|
https://gitlab.com/<my-org>/<group-name>/<package-name-example> | パッケージ名の例 | @my-org | @my-org/package-name |
https://gitlab.com/<example-org>/<group-name>/<project-name> | プロジェクト名: | @example-org | @example-org/project-name |
インスタンスからインストール
同じ組織スコープで多数のパッケージを操作する場合は、インスタンスからのインストールを検討してください。
組織スコープを設定します。
.yarnrc.ymlファイルで、以下を追加します:npmScopes: <my-org>: npmRegistryServer: 'https://<domain_name>/api/v4/packages/npm'@記号を除外して、<my-org>をパッケージのインストール元のプロジェクトのルートレベルグループに置き換えます。<domain_name>をドメイン名に置き換えます(例:gitlab.com)。
オプション。パッケージがプライベートの場合は、パッケージレジストリへのアクセスを設定する必要があります:
npmRegistries: //<domain_name>/api/v4/packages/npm: npmAlwaysAuth: true npmAuthToken: '<token>'<domain_name>をドメイン名に置き換えます(例:gitlab.com)。<token>を、デプロイトークン(推奨)、グループアクセス、プロジェクトアクセス、またはパーソナルアクセスに置き換えます。
グループまたはプロジェクトからインストール
1回限りのパッケージがある場合は、グループまたはプロジェクトからインストールできます。
グループスコープを設定します。
.yarnrc.ymlファイルで、以下を追加します:npmScopes: <my-org>: npmRegistryServer: 'https://<domain_name>/api/v4/groups/<group_id>/-/packages/npm'- インストール元のグループを含む、
<my-org>をトップレベルグループに置き換えます。@記号を除外します。 <domain_name>をドメイン名に置き換えます(例:gitlab.com)。<group_id>を、グループの概要ページにあるグループIDに置き換えます。
- インストール元のグループを含む、
オプション。パッケージがプライベートの場合は、レジストリを設定する必要があります:
npmRegistries: //<domain_name>/api/v4/groups/<group_id>/-/packages/npm: npmAlwaysAuth: true npmAuthToken: "<token>"<domain_name>をドメイン名に置き換えます(例:gitlab.com)。<token>を、デプロイトークン(推奨)、グループアクセス、プロジェクトアクセス、またはパーソナルアクセスに置き換えます。<group_id>を、グループの概要ページにあるグループIDに置き換えます。
プロジェクトスコープを設定します。
.yarnrc.ymlファイルで、以下を追加します:npmScopes: <my-org>: npmRegistryServer: "https://<domain_name>/api/v4/projects/<project_id>/packages/npm"- インストール元のプロジェクトを含む、
<my-org>をトップレベルグループに置き換えます。@記号を除外します。 <domain_name>をドメイン名に置き換えます(例:gitlab.com)。<project_id>を、プロジェクトの概要ページのプロジェクトIDに置き換えます。
- インストール元のプロジェクトを含む、
オプション。パッケージがプライベートの場合は、レジストリを設定する必要があります:
npmRegistries: //<domain_name>/api/v4/projects/<project_id>/packages/npm: npmAlwaysAuth: true npmAuthToken: "<token>"<domain_name>をドメイン名に置き換えます(例:gitlab.com)。<token>を、デプロイトークン(推奨)、グループアクセス、プロジェクトアクセス、またはパーソナルアクセスに置き換えます。<project_id>を、プロジェクトの概要ページのプロジェクトIDに置き換えます。
Yarnでインストール
- コマンドラインから、またはCI/CDパイプラインから
yarn addを実行します:
yarn add @scope/my-packageYarn Classicには、.npmrcファイルと.yarnrcファイルの両方が必要です。詳細については、Yarn issue 4451を参照してください。
.npmrcファイルに認証情報を配置し、.yarnrcファイルにスコープレジストリを配置します:# .npmrc ## For the instance //<domain_name>/api/v4/packages/npm/:_authToken='<token>' ## For the group //<domain_name>/api/v4/groups/<group_id>/-/packages/npm/:_authToken='<token>' ## For the project //<domain_name>/api/v4/projects/<project_id>/packages/npm/:_authToken='<token>' # .yarnrc ## For the instance '@scope:registry' 'https://<domain_name>/api/v4/packages/npm/' ## For the group '@scope:registry' 'https://<domain_name>/api/v4/groups/<group_id>/-/packages/npm/' ## For the project '@scope:registry' 'https://<domain_name>/api/v4/projects/<project_id>/packages/npm/'コマンドラインから、またはCI/CDパイプラインから
yarn addを実行します:yarn add @scope/my-package
関連トピック
トラブルシューティング
npmレジストリのパッケージレジストリでYarnを実行中にエラーが発生しました
Yarnをnpmレジストリで使用している場合は、次のようなエラーメッセージが表示されることがあります:
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/<project_id>/packages/npm/:_authToken' '<token>'
yarn config set '//gitlab.example.com/api/v4/packages/npm/:_authToken' '<token>'yarn installは、依存関係としてリポジトリのクローン作成に失敗します
Dockerfileからyarn installを使用する場合、Dockerfileをビルドすると、次のようなエラーが発生する可能性があります:
...
#6 8.621 fatal: unable to access 'https://gitlab.com/path/to/project/': Problem with the SSL CA cert (path? access rights?)
#6 8.621 info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
#6 ...このイシューを解決するには、感嘆符(!)を追加します。.dockerignoreファイルのYarn関連のすべてのパス。
**
!./package.json
!./yarn.lock
...