Conan 2パッケージレジストリ内のパッケージ
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
- ステータス: 実験的機能
この機能の利用可否は、機能フラグによって制御されます。詳細については、履歴を参照してください。
GitLabのConan 2パッケージレジストリは開発中であり、機能が限られているため、本番環境での使用には適していません。このエピックでは、本番環境で使用できるようになるまでの残りの作業とタイムラインについて詳しく説明します。
Conan 2レジストリはFIPSに準拠しておらず、FIPSモードが有効になっている場合は無効になります。
プロジェクトのパッケージパッケージレジストリにConan 2パッケージを公開します。これにより、依存関係として使用する必要がある場合に、いつでもパッケージをインストールできるようになります。
GitLabパッケージレジストリにConan 2パッケージを公開するには、パッケージレジストリをリモートとして追加し、認証します。
次に、conanコマンドを実行して、パッケージレジストリにパッケージを公開できます。
Conan 2パッケージマネージャークライアントが使用する特定のAPIエンドポイントのドキュメントについては、Conan v2 APIを参照してください
Conan 2パッケージのビルド方法について説明します。
パッケージレジストリをConanリモートとして追加する
conanコマンドを実行するには、プロジェクトまたはインスタンスのConanリモートとしてパッケージレジストリを追加する必要があります。次に、パッケージレジストリとの間でパッケージを公開およびインストールできます。
プロジェクトのリモートを追加する
すべてのコマンドでリモート名を指定しなくても、プロジェクト内のパッケージを操作できるように、リモートを設定します。
プロジェクトのリモートを設定する場合、パッケージ名は小文字にする必要があります。また、コマンドには、ユーザー名とチャンネルを含む完全なレシピを含める必要があります(例: package_name/version@user/channel)。
リモートを追加するには:
ターミナルで、次のコマンドを実行します:
conan remote add gitlab https://gitlab.example.com/api/v4/projects/<project_id>/packages/conanConan 2コマンドの最後に
--remote=gitlabを追加して、リモートを使用します。例:
conan search hello* --remote=gitlab
パッケージレジストリに対して認証する
GitLabでは、パッケージのアップロード、およびプライベートプロジェクトと内部プロジェクトからのパッケージのインストールには、認証が必要です。(ただし、認証なしでパブリックプロジェクトからパッケージをインストールできます)。
パッケージレジストリに認証するには、次のいずれかが必要です:
- スコープが
apiに設定されたパーソナルアクセストークン。 - スコープが
read_package_registryとwrite_package_registryのどちらか、または両方に設定されたデプロイトークン。 - CIジョブトークン。
認証されていない場合、プライベートプロジェクトと内部プロジェクトからのパッケージは非表示になります。認証なしでプライベートプロジェクトまたは内部プロジェクトからパッケージを検索またはダウンロードしようとすると、Conan 2クライアントでエラーunable to find the package in remoteが表示されます。
GitLabリモートに認証情報を追加する
すべてのConan 2コマンドにトークンを明示的に追加する必要がないように、GitLabリモートにトークンを関連付けます。
前提要件:
- 認証トークンが必要です。
- Conanリモートが構成されている必要があります。
ターミナルで、次のコマンドを実行します。この例では、リモート名はgitlabです。リモートの名前を使用します。
conan remote login -p <personal_access_token or deploy_token> gitlab <gitlab_username or deploy_token_username>--remote=gitlabでコマンドを実行すると、リクエストにユーザー名とパスワードが含まれるようになります。
GitLabでの認証は定期的に期限切れになるため、パーソナルアクセストークンの再入力が必要になる場合があります。
Conan 2パッケージを公開する
GitLabパッケージレジストリにConan 2パッケージを公開して、プロジェクトにアクセスできるすべてのユーザーが依存関係としてパッケージを使用できるようにします。
前提要件:
- Conanリモートが構成されている必要があります。
- パッケージレジストリでの認証を構成する必要があります。
- ローカルConan 2パッケージが存在する必要があります。
- プロジェクトの概要ページに表示されるプロジェクトIDが必要です。
パッケージを公開するには、conan uploadコマンドを使用します:
conan upload hello/0.1@mycompany/beta -r gitlabCI/CDを使用してConan 2パッケージを公開する
GitLab CI/CDでConan 2コマンドを使用するには、コマンドでパーソナルアクセストークンの代わりにCI_JOB_TOKENを使用できます。
.gitlab-ci.ymlファイル内の各ConanコマンドでCONAN_LOGIN_USERNAMEおよびCONAN_PASSWORDを指定できます。例:
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: productionCIファイルのベースとして使用する適切なConan 2イメージを作成するには、公式ガイドに従ってください。
同じレシピでパッケージを再公開する
既存のパッケージと同じレシピ(package-name/version@user/channel)を持つパッケージを公開すると、Conanはそれらが既にサーバーにあるため、アップロードをスキップします。
Conan 2パッケージをインストールする
依存関係として使用できるように、パッケージレジストリからConan 2パッケージをインストールします。プロジェクトのスコープからパッケージをインストールできます。複数のパッケージが同じレシピを持つ場合、パッケージをインストールすると、最後に公開されたパッケージが取得されます。
Conan 2パッケージは、多くの場合、conanfile.txtファイルを使用して依存関係としてインストールされます。
前提要件:
Conan 2パッケージガイドに従って、別のパッケージを作成します。プロジェクトのルートで、
conanfile.txtという名前のファイルを作成します。Conanレシピをファイルの
[requires]セクションに追加します:[requires] hello/0.1@mycompany/betaプロジェクトのルートに
buildディレクトリを作成し、そのディレクトリに移動します:mkdir build && cd buildconanfile.txtにリストされている依存関係をインストールします:conan install ../conanfile.txt
このチュートリアルで作成したパッケージをインストールしようとすると、パッケージが既に存在するため、インストールコマンドは無効になります。既存のパッケージをローカルで削除してから、再試行するには、このコマンドを使用します:
conan remove hello/0.1@mycompany/betaConan 2パッケージを削除する
GitLabパッケージレジストリからConan 2パッケージを削除するには、2つの方法があります。
コマンドラインから、Conan 2クライアントを使用します:
conan remove hello/0.1@mycompany/beta --remote=gitlabそれ以外の場合、パッケージはお客様のローカルシステムのキャッシュからのみ削除されるため、このコマンドにはリモートを明示的に含める必要があります。
このコマンドは、すべてのレシピとバイナリパッケージファイルをパッケージレジストリから削除します。
GitLabユーザーインターフェースから:
プロジェクトのデプロイ > パッケージレジストリに移動します。リポジトリを削除 ( )を選択して、パッケージを削除します。
パッケージレジストリでConan 2パッケージを検索する
パッケージ名の一部または全部、あるいは正確なレシピで検索するには、conan searchコマンドを実行します。
特定のパッケージ名を持つすべてのパッケージを検索するには:
conan search hello --remote=gitlabheで始まるすべてのパッケージのように、部分的な名前を検索するには:conan search "he*" --remote=gitlab
検索のスコープは、Conanリモート構成によって異なります。アクセス許可がある限り、検索にはターゲットプロジェクト内のすべてのパッケージが含まれます。
検索結果の上限は500個のパッケージであり、結果は最も新しく公開されたパッケージ順にソートされます。
Conan 2パッケージをダウンロードする
conan downloadコマンドを使用する設定を使用せずに、Conan 2パッケージのレシピとバイナリをローカルキャッシュにダウンロードできます。
前提要件:
すべてのバイナリパッケージをダウンロードする
パッケージレジストリから、レシピに関連付けられているすべてのバイナリパッケージをダウンロードできます。
すべてのバイナリパッケージをダウンロードするには、次のコマンドを実行します:
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:conanfile.txtファイルの使用を含め、パッケージレジストリからConan 2パッケージをインストールします。conan download: 設定を使用せずに、パッケージレシピとバイナリをローカルキャッシュにダウンロードします。conan search: パブリックパッケージ、および表示する権限があるプライベートパッケージについて、パッケージレジストリを検索します。conan list: 既存のレシピ、リビジョン、またはパッケージをリストします。conan remove: パッケージレジストリからパッケージを削除します。
Conanリビジョン
Conanリビジョンは、パッケージレジストリにパッケージの不変性を提供します。バージョンを変更せずにレシピまたはパッケージに変更を加えると、Conanはこれらの変更を追跡するための一意の識別子(リビジョン)を計算します。
リビジョンの種類
Conanは、次の2つの種類のリビジョンを使用します:
- Recipe revisions (RREV)(レシピリビジョン(RREV)): レシピがエクスポートされるときに生成されます。デフォルトでは、Conanはレシピマニフェストのチェックサムハッシュを使用してレシピリビジョンを計算します。
- Package revisions (PREV)(パッケージリビジョン(PREV)): パッケージのビルド時に生成されます。Conanは、パッケージコンテンツのハッシュを使用してパッケージリビジョンを計算します。
参照リビジョン
次の形式でパッケージを参照できます:
| 参照 | 説明 |
|---|---|
lib/1.0@conan/stable | lib/1.0@conan/stableの最新のRREV。 |
lib/1.0@conan/stable#RREV | lib/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イミュータブルなリビジョンのワークフロー
リビジョンはイミュータブルであるように設計されています。レシピまたはそのコードを変更する場合:
- レシピをエクスポートすると、新しいレシピリビジョンが作成されます。
- 以前のレシピリビジョンに属する既存のバイナリは含まれていません。新しいレシピリビジョンの新しいバイナリをビルドする必要があります。
- パッケージをインストールすると、リビジョンを指定しない限り、Conan 2は自動的に最新のリビジョン取得します。
パッケージバイナリの場合、レシピリビジョンおよびパッケージ参照ごとに1つのパッケージリビジョンのみを含める必要があります(Conan 2ドキュメントではpackage_idと呼ばれます)。同じレシピリビジョンとパッケージIDの複数のパッケージリビジョンは、パッケージが不必要に再ビルドされたことを示します。