正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

パッケージレジストリ内のConan 2パッケージ

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
  • ステータス: ベータ版

この機能の可用性は機能フラグによって制御されます。詳細については、履歴を参照してください。

プロジェクトのパッケージレジストリにConan 2パッケージを公開します。これにより、依存関係として使用する必要がある場合に、いつでもパッケージをインストールできるようになります。

GitLab用のConan 2パッケージレジストリは開発中であり、機能が限られているため、本番環境での使用には適していません。このエピックでは、本番環境で使用できるようになるまでの残りの作業とタイムラインについて詳しく説明します。

Conan 2パッケージをパッケージレジストリに公開するには、パッケージレジストリをリモートとして追加し、それに認証する必要があります。

その後、conanコマンドを実行して、パッケージをパッケージレジストリに公開できます。

ConanレジストリはFIPSに準拠しておらず、FIPSモードが有効になっている場合は無効になります。

Conan 2パッケージマネージャークライアントが使用する特定のAPIエンドポイントのドキュメントについては、Conan v2 APIを参照してください。

Conan 2パッケージをビルドする方法を学びます。

Conanリモートとしてパッケージレジストリを追加

conanコマンドを実行するには、パッケージレジストリをプロジェクトまたはインスタンス用のConanリモートとして追加する必要があります。その後、パッケージレジストリに対してパッケージを公開したり、パッケージをインストールしたりできます。

プロジェクトのリモートを追加

リモートを設定すると、すべてのコマンドでリモート名を指定することなく、プロジェクト内のパッケージを操作できます。

プロジェクトのリモートを設定する場合、パッケージ名は小文字にする必要があります。また、コマンドには、ユーザーとチャンネルを含む完全なレシピ(例: package_name/version@user/channel)を含める必要があります。

リモートを追加するには:

  1. お使いのターミナルで、このコマンドを実行してください:

    conan remote add gitlab https://gitlab.example.com/api/v4/projects/<project_id>/packages/conan
  2. Conan 2コマンドの末尾に--remote=gitlabを追加してリモートを使用します。

    例:

    conan search hello* --remote=gitlab

パッケージレジストリに対して認証する

GitLabでは、パッケージのアップロード、およびプライベートまたは内部プロジェクトからのパッケージのインストールに認証が必要です。(ただし、公開プロジェクトからのパッケージは認証なしでインストールできます。)

パッケージレジストリに認証するには、次のいずれかが必要です:

認証されていない場合、プライベートおよび内部プロジェクトのパッケージは非表示になります。プライベートまたは内部プロジェクトのパッケージを認証せずに検索またはダウンロードしようとすると、Conan 2クライアントでエラーunable to find the package in remoteが表示されます。

GitLabリモートに認証情報を追加

あなたのトークンをGitLabリモートと関連付けることで、すべてのConan 2コマンドにトークンを明示的に追加する必要がなくなります。

前提条件:

  • あなたは認証トークンを持っている必要があります。
  • Conanリモートは設定されている必要があります。

ターミナルで、このコマンドを実行してください。この例では、リモート名はgitlabです。リモートの名前を使用してください。

conan remote login -p <personal_access_token or deploy_token> gitlab <gitlab_username or deploy_token_username>

これで、--remote=gitlabを使用してコマンドを実行すると、あなたのユーザー名とパスワードがリクエストに含まれるようになります。

GitLabでの認証は定期的に期限切れになるため、時々パーソナルアクセストークンを再入力する必要がある場合があります。

Conan 2パッケージを公開する

プロジェクトにアクセスできる誰もがパッケージを依存として使用できるように、Conan 2パッケージをパッケージレジストリに公開します。

前提条件:

パッケージを公開するには、conan uploadコマンドを使用します:

conan upload hello/0.1@mycompany/beta -r gitlab

CI/CDを使用してConan 2パッケージを公開する

GitLab CI/CDでConan 2コマンドを操作するには、コマンド内でパーソナルアクセストークンの代わりにCI_JOB_TOKENを使用できます。

各ConanコマンドとともにCONAN_LOGIN_USERNAMECONAN_PASSWORD.gitlab-ci.ymlファイルに指定できます。例:

create_package:
  image: <conan 2 image>
  stage: deploy
  script:
    - conan remote add gitlab ${CI_API_V4_URL}/projects/$CI_PROJECT_ID/packages/conan
    - conan new <package-name>/0.1
    - conan create . --channel=stable --user=mycompany
    - CONAN_LOGIN_USERNAME=ci_user CONAN_PASSWORD=${CI_JOB_TOKEN} conan upload <package-name>/0.1@mycompany/stable --remote=gitlab
  environment: production

公式ガイドに従って、CIファイルのベースとして使用する適切なConan 2イメージを作成してください。

同じレシピのパッケージを再公開する

既存のパッケージと同じレシピ(package-name/version@user/channel)を持つパッケージを公開すると、Conanはすでにサーバーに存在するためアップロードをスキップします。

Conan 2パッケージをインストールする

Conan 2パッケージをパッケージレジストリからインストールすると、それを依存として使用できます。プロジェクトのスコープからパッケージをインストールできます。複数のパッケージが同じレシピを持つ場合、パッケージをインストールすると、最も最近公開されたパッケージが取得するされます。

Conan 2パッケージは、conanfile.txtファイルを使用して依存としてインストールされることがよくあります。

前提条件:

  • Conanリモートは設定されている必要があります。
  • プライベートおよび内部プロジェクトの場合、パッケージレジストリでの認証を設定する必要があります。
  1. Conan 2パッケージガイドに従って、別のパッケージを作成してください。プロジェクトのルートに、conanfile.txtというファイルを作成します。

  2. Conanレシピをファイルの[requires]セクションに追加します:

    [requires]
    hello/0.1@mycompany/beta
  3. プロジェクトのルートにbuildディレクトリを作成し、そのディレクトリに移動します:

    mkdir build && cd build
  4. conanfile.txtにリストされている依存をインストールします:

    conan install ../conanfile.txt

このチュートリアルで作成したパッケージをインストールしようとしても、そのパッケージはすでに存在するため、インストールコマンドは効果がありません。このコマンドを使用して、既存のパッケージをローカルで削除してから、もう一度試してください:

conan remove hello/0.1@mycompany/beta

Conan 2パッケージを削除する

GitLabパッケージレジストリからConan 2パッケージを削除するには、2つの方法があります。

  • コマンドラインから、Conan 2クライアントを使用:

    conan remove hello/0.1@mycompany/beta --remote=gitlab

    このコマンドにはリモートを明示的に含める必要があります。そうしないと、パッケージはローカルシステムキャッシュからのみ削除されます。

    このコマンドは、すべてのレシピおよびバイナリパッケージファイルをパッケージレジストリから削除します。

  • GitLabユーザーインターフェースから:

    プロジェクトのデプロイ > パッケージレジストリに移動します。パッケージを、リポジトリを削除 ( remove ) を選択して削除します。

パッケージレジストリでConan 2パッケージを検索する

完全または部分的なパッケージ名、または正確なレシピで検索するには、conan searchコマンドを実行します。

  • 特定のパッケージ名を持つすべてのパッケージを検索するには:

    conan search hello --remote=gitlab
  • 部分名(例: heで始まるすべてのパッケージ)で検索するには:

    conan search "he*" --remote=gitlab

検索のスコープは、Conanリモートの設定によって異なります。アクセス権限がある限り、検索にはターゲットプロジェクト内のすべてのパッケージが含まれます。

検索結果の制限は500パッケージで、結果は最も最近公開されたパッケージによってソートされます。

パッケージを検索する場合、Conan v2 CLIは、Conan v2でアップロードされたパッケージの詳細のみを表示します。Conan v1でアップロードされたパッケージは検索結果に表示されますが、その詳細は表示されません。これは、Conan v2がrecipe_hashフィールドのないパッケージ参照を期待しているためです。このフィールドはConan v1でアップロードされたパッケージには存在します。

Conan 2パッケージをダウンロードする

Conan 2パッケージのレシピとバイナリを、conan downloadコマンドを使用する設定なしでローカルキャッシュにダウンロードできます。

前提条件:

  • Conanリモートは設定されている必要があります。
  • プライベートおよび内部プロジェクトの場合、パッケージレジストリでの認証を設定する必要があります。

すべてのバイナリパッケージをダウンロードする

パッケージレジストリから、レシピに関連付けられたすべてのバイナリパッケージをダウンロードできます。

すべてのバイナリパッケージをダウンロードするには、次のコマンドを実行してください:

conan download hello/0.1@mycompany/beta --remote=gitlab

レシピファイルをダウンロードする

バイナリパッケージなしでレシピファイルのみをダウンロードできます。

レシピファイルをダウンロードするには、次のコマンドを実行してください:

conan download hello/0.1@mycompany/beta --remote=gitlab --only-recipe

特定のバイナリパッケージをダウンロードする

パッケージ参照(Conan 2のドキュメントではpackage_idとして知られています)を参照することで、単一のバイナリパッケージをダウンロードできます。

特定のバイナリパッケージをダウンロードするには、次のコマンドを実行してください:

conan download Hello/0.1@foo+bar/stable:<package_reference> --remote=gitlab

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

GitLab Conanリポジトリは、次のConan 2 CLIコマンドをサポートしています:

  • conan upload: レシピとパッケージファイルをパッケージレジストリにアップロードします。
  • conan install: Conan 2パッケージをパッケージレジストリからインストールします。これにはconanfile.txtファイルの使用が含まれます。
  • conan download: パッケージのレシピとバイナリを、設定を使用せずにローカルキャッシュにダウンロードします。
  • conan search: 公開パッケージ、および表示権限のあるプライベートパッケージをパッケージレジストリで検索します。
  • conan list: 既存のレシピ、リビジョン、またはパッケージをリスト表示します。
  • conan remove: パッケージレジストリからパッケージを削除します。

Conanリビジョン

Conanリビジョンは、パッケージレジストリでパッケージの不変性を提供します。レシピまたはパッケージをバージョンを変更せずに変更すると、Conanはこれらの変更を追跡するための固有識別子(リビジョン)を計算します。

リビジョンの種類

Conanは2種類のリビジョンを使用します:

  • Recipe revisions (RREV): レシピがエクスポートするされるときに生成されます。デフォルトでは、Conanはレシピマニフェストのチェックサムハッシュを使用してレシピリビジョンを計算します。
  • **Package revisions (PREV)**リビジョン(PREV): パッケージがビルドするされるときに生成されます。Conanはパッケージコンテンツのハッシュを使用してパッケージリビジョンを計算します。

参照リビジョン

次の形式でパッケージを参照できます:

参照説明
lib/1.0@conan/stablelib/1.0@conan/stableの最新のRREV。
lib/1.0@conan/stable#RREVlib/1.0@conan/stableの特定のRREV。
lib/1.0@conan/stable#RREV:PACKAGE_REFERENCE特定のRREVに属するバイナリパッケージ。
lib/1.0@conan/stable#RREV:PACKAGE_REFERENCE#PREV特定のRREVに属するバイナリパッケージリビジョンPREV。

リビジョンをアップロードする

すべてのリビジョンとそれらのバイナリをGitLabパッケージレジストリにアップロードするには:

conan upload "hello/0.1@mycompany/beta#*" --remote=gitlab

複数のリビジョンをアップロードすると、古いものから新しいものへとアップロードされます。相対的な順序はレジストリで保持されます。

リビジョンをリスト表示する

Conan 2で特定のレシピのすべてのリビジョンをリスト表示するには:

conan list "hello/0.1@mycompany/beta#*" --remote=gitlab

このコマンドは、指定されたレシピで使用可能なすべてのリビジョンを、リビジョンハッシュと作成日とともに表示します。

特定のリビジョンの詳細情報を取得するには:

conan list "hello/0.1@mycompany/beta#revision_hash:*#*" --remote=gitlab

このコマンドは、特定のバイナリパッケージと、そのリビジョンで利用可能なパッケージリビジョンを表示します。

リビジョンを持つパッケージを削除する

パッケージは、異なる粒度レベルで削除できます:

特定のレシピリビジョンを削除する

特定のレシピリビジョンとそれに関連付けられたすべてのバイナリパッケージを削除するには:

conan remove "hello/0.1@mycompany/beta#revision_hash" --remote=gitlab

特定のレシピリビジョンのパッケージを削除する

特定のレシピリビジョンに関連付けられたすべてのパッケージを削除するには:

conan remove "hello/0.1@mycompany/beta#revision_hash:*" --remote=gitlab

リビジョン内の特定のパッケージを削除する

レシピリビジョン内の特定のパッケージを削除するには、次を使用できます:

conan remove "package_name/version@user/channel#revision_hash:package_id" --remote=gitlab

イミュータブルなリビジョンワークフロー

リビジョンはイミュータブルであるように設計されています。レシピまたはそのソースcodeを修正する場合:

  • レシピをエクスポートするすると、新しいレシピリビジョンが作成されます。
  • 以前のレシピリビジョンに属する既存のバイナリは含まれません。新しいレシピリビジョン用に新しいバイナリをビルドするする必要があります。
  • パッケージをインストールすると、Conan 2はリビジョンを指定しない限り、自動的に最新のリビジョンを取得するします。

パッケージのバイナリの場合、レシピリビジョンおよびパッケージ参照(Conan 2ドキュメントではpackage_idとして知られています)ごとに1つのパッケージリビジョンのみを含める必要があります。同じレシピリビジョンとパッケージIDに対して複数のパッケージリビジョンが存在する場合、そのパッケージが不必要に再ビルドするされたことを示します。