パッケージ・レジストリの Composer パッケージ

  • GitLab 13.2 で導入されました
  • 13.3でGitLab PremiumからGitLab Freeへ移行
  • GitLab 13.10でComposer 2.0をサポート。
  • GitLab 14.6 でデプロイトークンのサポートが追加れました。
caution
GitLab用のComposerパッケージレジストリは開発中であり、機能が限られているため本番環境での使用にはまだ対応していません。このエピックでは、本番環境で使えるようにするための残りの作業とスケジュールについて詳しく説明します。

Composerパッケージをプロジェクトのパッケージレジストリに公開します。そして、依存関係として使用する必要があるときはいつでもパッケージをインストールしてください。

Composer クライアントが使用する特定の API エンドポイントのドキュメントについては、Composer API ドキュメントを参照してください。

Composer v2.0 を推奨します。Composer v1.0もサポートされていますが、非常に多くのパッケージを含むグループでの作業ではパフォーマンスが低下します。

Composerパッケージの構築方法をご覧ください。

APIを使ったComposerパッケージの公開

Composer パッケージをパッケージレジストリに発行して、プロジェクトにアクセスできる人なら誰でもそのパッケージを依存関係として使えるようにします。

前提条件:

  • GitLabリポジトリにあるパッケージ。Composer のパッケージは、Composer の仕様に基づいてバージョン管理されている必要があります。バージョンが有効でない場合、例えば3つのドット (1.0.0.0) がある場合、公開時にエラー (Validation failed: Version is invalid) が発生します。
  • プロジェクトのルートディレクトリにある有効なcomposer.json ファイル。
  • GitLabリポジトリでPackages機能が有効になっていること。
  • プロジェクトのホームページにあるプロジェクトID。
  • 以下のトークンタイプのいずれか:

個人アクセストークンでパッケージを公開するには、以下のようにします:

  • Packages APIに POST

    例えば、curl

     curl --data tag=<tag> "https://__token__:<personal-access-token>@gitlab.example.com/api/v4/projects/<project_id>/packages/composer"
    
    • <personal-access-token> はあなたの個人アクセストークンです。
    • <project_id> はあなたのプロジェクトIDです。
    • <tag> は、公開したいバージョンの Git タグ名です。ブランチを公開するには、tag=<tag>ではなくbranch=<branch> を使います。

デプロイトークンを使ってパッケージを公開するには、次のようにします:

  • Packages APIに POST

    例えば、curl

     curl --data tag=<tag> --header "Deploy-Token: <deploy-token>" "https://gitlab.example.com/api/v4/projects/<project_id>/packages/composer"
    
    • <deploy-token> がデプロイトークンです。
    • <project_id> はあなたのプロジェクトIDです。
    • <tag> は、公開したいバージョンの Git タグ名です。ブランチを公開するには、tag=<tag>ではなくbranch=<branch> を使います。

公開したパッケージは、デプロイ > パッケージレジストリComposerタブを選択すると表示できます。

CI/CDを使用したComposerパッケージの発行

CI/CDプロセスの一環として、Composerパッケージをパッケージレジストリに公開できます。

  1. .gitlab-ci.yml ファイルでCI_JOB_TOKEN を指定してください:

    stages:
      - deploy
       
    deploy:
      stage: deploy
      script:
        - apk add curl
        - 'curl --header "Job-Token: $CI_JOB_TOKEN" --data tag=<tag> "${CI_API_V4_URL}/projects/$CI_PROJECT_ID/packages/composer"'
      environment: production
    
  2. パイプラインを実行します。

パブリッシュされたパッケージを表示するには、[デプロイ] > [パッケージレジストリ]で[Composer]タブを選択します。

CI/CDテンプレートの使用

より詳細なComposer CI/CDファイルは、.gitlab-ci.yml テンプレートとしても利用できます:

  1. 左のサイドバーでProject overviewを選択します。
  2. ファイルリストの上で、Set up CI/CDを選択します。このボタンがない場合は、CI/CD設定を選択し、編集を選択します。
  3. Apply a templatelistからComposerを選択します。
caution
既存のCI/CDファイルを上書きしない限り、保存しないでください。

同じ名前またはバージョンのパッケージの公開

公開するとき

  • 同じパッケージを異なるデータで公開すると、既存のパッケージが上書きされます。
  • 同じパッケージで同じデータを使用すると、400 Bad request エラーが発生します。

Composerパッケージのインストール

パッケージアーカイブをダウンロードするための作成者はGitLab 14.10から導入されました。

パッケージレジストリからパッケージをインストールして、依存関係として使えるようにしましょう。

前提条件:

  • パッケージレジストリにあるパッケージ。
  • グループのホームページにあるグループID。
  • 以下のトークンタイプのいずれか:

パッケージをインストールするには

  1. パッケージのレジストリ URL を、インストールしたいパッケージ名とバージョンとともに、プロジェクトのcomposer.json ファイルに追加します:

    • グループのパッケージレジストリに接続します:
    composer config repositories.<group_id> composer https://gitlab.example.com/api/v4/group/<group_id>/-/packages/composer/packages.json
    
    • 必要なパッケージのバージョンを設定します:
    composer require <package_name>:<version>
    

    結果はcomposer.json ファイルに:

    {
      ...
      "repositories": {
        "<group_id>": {
          "type": "composer",
          "url": "https://gitlab.example.com/api/v4/group/<group_id>/-/packages/composer/packages.json"
        },
        ...
      },
      "require": {
        ...
        "<package_name>": "<version>"
      },
      ...
    }
    

    コマンドでこの設定を解除できます:

    composer config --unset repositories.<group_id>
    
    • <group_id> はグループIDです。
    • <package_name> はパッケージのcomposer.json ファイルで定義されているパッケージ名です。
    • <version> はパッケージのバージョンです。
  2. GitLab の認証情報を使ってauth.json ファイルを作成します:

    個人アクセストークンを使います:

    composer config gitlab-token.<DOMAIN-NAME> <personal_access_token>
    

    結果はauth.json ファイルに:

    {
      ...
      "gitlab-token": {
        "<DOMAIN-NAME>": "<personal_access_token>",
        ...
      }
    }
    

    デプロイトークンを使用しています:

    composer config gitlab-token.<DOMAIN-NAME> <deploy_token_username> <deploy_token>
    

    auth.json ファイルの結果:

    {
      ...
      "gitlab-token": {
        "<DOMAIN-NAME>": {
          "username": "<deploy_token_username>",
          "token": "<deploy_token>",
        ...
      }
    }
    

    コマンドでこの設定を解除できます:

    composer config --unset --auth gitlab-token.<DOMAIN-NAME>
    
    • <DOMAIN-NAME> は GitLab インスタンスの URLgitlab.com あるいはgitlab.example.com です。
    • <personal_access_token> スコープをapi に設定した場合、またはスコープをread_package_registry および/またはwrite_package_registryに設定した場合の<deploy_token> です。
  3. GitLab セルフマネージドインスタンスを使っている場合は、gitlab-domainscomposer.json に追加してください。

    composer config gitlab-domains gitlab01.example.com gitlab02.example.com
    

    結果はcomposer.json ファイルに:

    {
      ...
      "repositories": [
        { "type": "composer", "url": "https://gitlab.example.com/api/v4/group/<group_id>/-/packages/composer/packages.json" }
      ],
      "config": {
        ...
        "gitlab-domains": ["gitlab01.example.com", "gitlab02.example.com"]
      },
      "require": {
        ...
        "<package_name>": "<version>"
      },
      ...
    }
    

    コマンドでこの設定を解除できます:

    composer config --unset gitlab-domains
    
    note
    GitLab.comでは、Composerはauth.json 、GitLabトークンを非公開トークンとしてデフォルトで使用します。composer.jsongitlab-domains 定義がない場合、Composer は GitLab トークンを basic-auth として使用し、トークンをユーザー名と空白のパスワードとして使用します。この結果、401エラーが発生します。
  4. composer.jsonauth.json ファイルを設定したら、パッケージをインストールしてください:

    composer update
    

    または、単一パッケージをインストールします:

    composer req <package-name>:<package-version>
    

    成功すれば、パッケージが正常にインストールされたことを示す出力が表示されるはずです。

    --prefer-source オプションを使ってソースから(Git リポジトリから直接)インストールすることもできます:

    composer update --prefer-source
    
caution
決してauth.json ファイルをリポジトリにコミットしないでください。CI/CD ジョブからパッケージをインストールするには、GitLab CI/CD 変数または](https://getcomposer.org/doc/articles/handling-private-packages.md#satis)HashiCorp Vault](https://getcomposer.org/doc/articles/handling-private-packages.md#satis)に保存されているアクセストークンを使用してcomposer config ツールを使用することを検討してください。

デプロイトークンでの作業

Composer パッケージはグループレベルでアクセスされますが、グループまたはプロジェクトのデプロイトークンを使用してアクセスすることができます:

  • グループデプロイトークンは、そのグループまたはそのサブグループのプロジェクトに公開されているすべてのパッケージにアクセスできます。
  • プロジェクトデプロイトークンは、その特定のプロジェクトに公開されているパッケージにのみアクセスできます。

トラブルシューティング

キャッシュ

パフォーマンスを向上させるために、Composerはパッケージに関連するファイルをキャッシュします。Composerは自分ではデータを削除しません。キャッシュは新しいパッケージがインストールされるにつれて増えていきます。イシューが発生した場合は、このコマンドでキャッシュをクリアしてください:

composer clearcache

このコマンドでキャッシュをクリアしてください。composer install

GitLab 14.9以前では、作成したcomposer.lock. composer.lockNET Frameworkがあればcomposer install を使うのに作成者の認証は必要ありませんでした。をcomposer.lockコミットして composer.lockいれば、認証情報を設定しなくても CI でcomposer install を実行することができました。

GitLab 14.10 以降では、パッケージアーカイブエンドポイントのダウンロードには作成者が必要です。composer installを使っているときに認証プロンプトが表示された場合は、Composer パッケージのインストールセクションの指示に従ってauth.json ファイルを作成してください。

で発行に失敗します。The file composer.json was not found

The file composer.json was not found というエラーが表示されるかもしれません。

このイシューは、パッケージを公開するための設定要件が満たされていない場合に発生します。

このエラーを解決するには、composer.json ファイルをプロジェクトのルート・ディレクトリにコミットします。

サポートされているCLIコマンド

GitLab Composer リポジトリは以下の Composer CLI コマンドをサポートしています:

  • composer install:Composer の依存関係をインストールします。
  • composer update:Composerの最新バージョンをインストールします。