Conan 1のパッケージレジストリ内のパッケージ
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
- ステータス: 実験的機能
GitLabのConanパッケージレジストリは開発中であり、機能が限られているため、本番環境での使用には適していません。このエピックでは、本番環境で使用できるようになるまでの残りの作業とタイムラインについて詳しく説明します。
ConanレジストリはFIPSに準拠しておらず、FIPSモードが有効になっていると無効になります。
プロジェクトのパッケージレジストリにConanパッケージを公開します。これにより、依存関係として使用する必要がある場合に、いつでもパッケージをインストールできるようになります。
Conanパッケージをパッケージレジストリに公開するには、パッケージレジストリをリモートとして追加し、認証します。
次に、conanコマンドを実行して、パッケージレジストリにパッケージを公開できます。
Conanパッケージマネージャークライアントが使用する特定のAPIエンドポイントのドキュメントについては、Conan v1 APIまたはConan v2 APIを参照してください。
Conan 1パッケージをビルドする方法をご覧ください。
パッケージレジストリをConanリモートとして追加する
conanコマンドを実行するには、プロジェクトまたはインスタンスのConanリモートとしてパッケージレジストリを追加する必要があります。次に、パッケージレジストリとの間でパッケージを公開およびインストールできます。
プロジェクトのリモートを追加する
すべてのコマンドでリモート名を指定しなくても、プロジェクト内のパッケージを操作できるように、リモートを設定します。
プロジェクトのリモートを設定する場合、パッケージ名に制限はありません。ただし、コマンドには、たとえばpackage_name/version@user/channelなど、ユーザーとチャンネルを含む完全なレシピを含める必要があります。
リモートを追加するには:
ターミナルで、次のコマンドを実行します:
conan remote add gitlab https://gitlab.example.com/api/v4/projects/<project_id>/packages/conanConanコマンドの最後に
--remote=gitlabを追加して、リモートを使用します。例:
conan search Hello* --remote=gitlab
インスタンスのリモートを追加する
単一のリモートを使用して、GitLabインスタンス全体のパッケージにアクセスします。
ただし、このリモートを使用する場合は、これらのパッケージの命名規則に従う必要があります。
リモートを追加するには:
ターミナルで、次のコマンドを実行します:
conan remote add gitlab https://gitlab.example.com/api/v4/packages/conanConanコマンドの最後に
--remote=gitlabを追加して、リモートを使用します。例:
conan search 'Hello*' --remote=gitlab
インスタンスリモートのパッケージレシピの命名規則
標準のConanレシピの命名規則はpackage_name/version@user/channelですが、インスタンスリモートを使用している場合、レシピのuserは、プラス記号(+)で区切られたプロジェクトパスである必要があります。
レシピ名の例:
| プロジェクト | パッケージ | サポート対象 |
|---|---|---|
foo/bar | my-package/1.0.0@foo+bar/stable | √ |
foo/bar-baz/buz | my-package/1.0.0@foo+bar-baz+buz/stable | √ |
gitlab-org/gitlab-ce | my-package/1.0.0@gitlab-org+gitlab-ce/stable | √ |
gitlab-org/gitlab-ce | my-package/1.0.0@foo/stable | いいえ |
プロジェクトのリモートには、より柔軟な命名規則があります。
パッケージレジストリに対して認証する
GitLabでは、パッケージのアップロード、およびプライベートプロジェクトと内部プロジェクトからパッケージをインストールするには、認証が必要です。(ただし、認証なしで公開プロジェクトからパッケージをインストールできます)。
パッケージレジストリに認証するには、次のいずれかが必要です:
- スコープが
apiに設定されたパーソナルアクセストークン。 - スコープが
read_package_registryとwrite_package_registryのどちらか、または両方に設定されたデプロイトークン。 - CIジョブトークン。
認証されていない場合、プライベートプロジェクトと内部プロジェクトのパッケージは非表示になります。認証せずに、プライベートプロジェクトまたは内部プロジェクトからパッケージを検索またはダウンロードしようとすると、Conanクライアントでエラーunable to find the package in remoteが表示されます。
GitLabリモートに認証情報を追加する
すべてのConanコマンドにトークンを明示的に追加する必要がないように、トークンをGitLabリモートに関連付けます。
前提要件:
- 認証トークンが必要です。
- Conanリモートを設定する必要があります。
ターミナルで、次のコマンドを実行します。この例では、リモート名はgitlabです。リモートの名前を使用します。
conan user <gitlab_username or deploy_token_username> -r gitlab -p <personal_access_token or deploy_token>--remote=gitlabでコマンドを実行すると、ユーザー名とパスワードがリクエストに含まれるようになります。
GitLabでの認証は定期的に期限切れになるため、パーソナルアクセストークンを再入力する必要がある場合があります。
プロジェクトのデフォルトリモートを設定する(オプション)
リモートを指定せずにGitLabパッケージレジストリとやり取りする場合は、Conanにパッケージのパッケージレジストリを常に使用するように指示できます。
ターミナルで、次のコマンドを実行します:
conan remote add_ref Hello/0.1@mycompany/beta gitlabパッケージレシピにはバージョンが含まれているため、Hello/0.1@user/channelのデフォルトリモートはHello/0.2@user/channelでは機能しません。
デフォルトのユーザーまたはリモートを設定しない場合でも、コマンドにユーザーとリモートを含めることができます:
CONAN_LOGIN_USERNAME=<gitlab_username or deploy_token_username> CONAN_PASSWORD=<personal_access_token or deploy_token> <conan command> --remote=gitlabConanパッケージを公開する
Conanパッケージをパッケージレジストリに公開して、プロジェクトにアクセスできるすべてのユーザーが、依存関係としてパッケージを使用できるようにします。
前提要件:
- Conanリモートを設定する必要があります。
- パッケージレジストリでの認証を設定する必要があります。
- ローカルConanパッケージが存在する必要があります。
- インスタンスリモートの場合、パッケージは命名規則を満たしている必要があります。
- プロジェクトの概要ページに表示されるプロジェクトIDが必要です。
パッケージを公開するには、conan uploadコマンドを使用します:
conan upload Hello/0.1@mycompany/beta --allCI/CDを使用してConanパッケージを公開する
GitLab CI/CDでConanコマンドを使用するには、コマンドでパーソナルアクセストークンの代わりにCI_JOB_TOKENを使用できます。
.gitlab-ci.ymlファイル内の各Conanコマンドで、CONAN_LOGIN_USERNAMEとCONAN_PASSWORDを指定できます。例:
create_package:
image: conanio/gcc7
stage: deploy
script:
- conan remote add gitlab ${CI_API_V4_URL}/projects/$CI_PROJECT_ID/packages/conan
- conan new <package-name>/0.1 -t
- conan create . <group-name>+<project-name>/stable
- CONAN_LOGIN_USERNAME=ci_user CONAN_PASSWORD=${CI_JOB_TOKEN} conan upload <package-name>/0.1@<group-name>+<project-name>/stable --all --remote=gitlab
environment: productionCIファイルの基盤として使用する追加のConanイメージは、Conanドキュメントで入手できます。
同じレシピでパッケージを再公開する
既存のパッケージと同じレシピ(package-name/version@user/channel)を持つパッケージを公開すると、重複ファイルが正常にアップロードされ、UIからアクセスできます。ただし、パッケージをインストールすると、最後に公開されたパッケージのみが返されます。
Conanパッケージをインストールする
パッケージレジストリからConanパッケージをインストールして、依存関係として使用できるようにします。インスタンスまたはプロジェクトのスコープからパッケージをインストールできます。複数のパッケージのレシピが同じ場合、パッケージをインストールすると、最後に公開されたパッケージが取得されます。
Conanパッケージは、多くの場合、conanfile.txtファイルを使用して依存関係としてインストールされます。
前提要件:
依存関係としてパッケージをインストールするプロジェクトで、
conanfile.txtを開きます。または、プロジェクトのルートで、conanfile.txtという名前のファイルを作成します。Conanレシピをファイルの
[requires]セクションに追加します:[requires] Hello/0.1@mycompany/beta [generators] cmakeプロジェクトのルートで、
buildディレクトリを作成し、そのディレクトリに変更します:mkdir build && cd buildconanfile.txtにリストされている依存関係をインストールします:conan install .. <options>
このチュートリアルで作成したパッケージをインストールしようとすると、パッケージが既に存在するため、インストールコマンドは無効になります。キャッシュに保存されているパッケージをクリーンアップするには、~/.conan/dataを削除します。
Conanパッケージを削除する
GitLabパッケージレジストリからConanパッケージを削除する方法は2つあります。
コマンドラインから、Conanクライアントを使用する:
conan remove Hello/0.2@user/channel --remote=gitlabこのコマンドにはリモートを明示的に含める必要があります。そうしないと、パッケージはローカルシステムのキャッシュからのみ削除されます。
このコマンドは、すべてのレシピファイルとバイナリパッケージファイルをパッケージレジストリから削除します。
GitLabのユーザーインターフェースから:
プロジェクトのデプロイ > パッケージレジストリに移動します。リポジトリを削除( )を選択して、パッケージを削除します。
パッケージレジストリでConanパッケージを検索する
パッケージ名の全部または一部、あるいは正確なレシピで検索するには、conan searchコマンドを実行します。
特定のパッケージ名のすべてのパッケージを検索するには:
conan search Hello --remote=gitlabHeで始まるすべてのパッケージなど、部分的な名前を検索するには:conan search He* --remote=gitlab
検索のスコープは、Conanリモートの設定によって異なります:
インスタンス用に設定されたリモートがある場合、検索には、アクセス許可を持つすべてのプロジェクトが含まれます。これには、プライベートプロジェクトとすべてのパブリックプロジェクトが含まれます。
プロジェクト用に設定されたリモートがある場合、検索には、アクセス許可を持つ限り、ターゲットプロジェクト内のすべてのパッケージが含まれます。
検索結果の制限は500個のパッケージであり、結果は最後に公開されたパッケージによってソートされます。
パッケージレジストリからConanパッケージ情報をフェッチする
conan infoコマンドは、パッケージに関する情報を返します:
conan info Hello/0.1@mycompany/betaConanパッケージをダウンロードする
Conan情報のメタデータ抽出が有効になる前にアップロードされたパッケージは、conan download CLIコマンドでダウンロードできません。
conan downloadコマンドを使用する設定を使用せずに、Conanパッケージのレシピとバイナリをローカルキャッシュにダウンロードできます。
前提要件:
すべてのバイナリパッケージをダウンロードする
パッケージレジストリからレシピに関連付けられているすべてのバイナリパッケージをダウンロードできます。
すべてのバイナリパッケージをダウンロードするには、次のコマンドを実行します:
conan download Hello/0.1@foo+bar/stable --remote=gitlabレシピファイルをダウンロードする
任意のバイナリパッケージなしで、レシピファイルのみをダウンロードできます。
レシピファイルをダウンロードするには、次のコマンドを実行します:
conan download Hello/0.1@foo+bar/stable --remote=gitlab --recipe特定のバイナリパッケージをダウンロードする
パッケージ参照(Conanドキュメントではpackage_idとして知られています)を参照することにより、単一のバイナリパッケージをダウンロードできます。
特定のバイナリパッケージをダウンロードするには、次のコマンドを実行します:
conan download Hello/0.1@foo+bar/stable:<package_reference> --remote=gitlabサポートされているCLIコマンド
GitLab Conanリポジトリは、次のConan CLIコマンドをサポートしています:
conan upload: レシピファイルとパッケージファイルをパッケージレジストリにアップロードします。conan install:conanfile.txtファイルの使用を含む、パッケージレジストリからConanパッケージをインストールします。conan download: 設定を使用せずに、パッケージのレシピとバイナリをローカルキャッシュにダウンロードします。conan search: パッケージレジストリで、パブリックパッケージと、表示する権限のあるプライベートパッケージを検索します。conan info: パッケージレジストリから特定のパッケージに関する情報を表示します。conan remove: パッケージレジストリからパッケージを削除します。
Conanメタデータを抽出する
Conanパッケージをアップロードすると、GitLabはconaninfo.txtファイルからメタデータを自動的に抽出します。このメタデータには、以下が含まれます:
- パッケージ設定(
os、arch、compiler、build_typeなど) - パッケージオプション
- パッケージの要件と依存関係
この機能が有効になる前にアップロードされたパッケージ(GitLab 17.10)は、メタデータが抽出されていません。これらのパッケージでは、一部の検索機能とダウンロード機能が制限されています。
Conanリバージョン
この機能の利用可否は、機能フラグによって制御されます。詳細については、履歴を参照してください。
Conan 1のリバージョンは、パッケージレジストリでパッケージの不変性を提供します。バージョンを変更せずにレシピまたはそのコードに変更を加えると、Conanは、これらの変更を追跡するための固有識別子(リバージョン)を計算します。
リバージョンのタイプ
Conanは、次の2種類のリバージョンを使用します:
- Recipe revisions (RREV)(レシピのリバージョン(RREV)): レシピがエクスポートされるときに生成されます。デフォルトでは、Conanはレシピのマニフェストのチェックサムハッシュを使用してレシピのリバージョンを計算します。
- Package revisions (PREV)(パッケージのリバージョン(PREV)): パッケージがビルドされるときに生成されます。Conanは、パッケージコンテンツのハッシュを使用してパッケージのリバージョンを計算します。
リバージョンを有効にする
Conan 1.xでは、リバージョンはデフォルトでは有効になっていません。リバージョンを有効にするには、次のいずれかを行う必要があります:
_conan.conf_ファイルの[general]セクションにrevisions_enabled=1を追加します(推奨)。CONAN_REVISIONS_ENABLED=1環境変数を設定します。
参照リバージョン
次の形式でパッケージを参照できます:
| 参照 | 説明 |
|---|---|
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 package_name/version@user/channel#* --all --remote=gitlab複数のリバージョンをアップロードすると、古いものから新しいものへとアップロードされます。相対的な順序はレジストリに保持されます。
リバージョンを検索する
Conan v1で特定のレシピのすべてのリバージョンを検索するには:
conan search package_name/version@user/channel --revisions --remote=gitlabこのコマンドは、指定されたレシピで使用可能なすべてのリビジョンを、そのリビジョンのハッシュおよび作成日とともに表示します。
特定のリビジョンの詳細情報を取得するには:
conan search package_name/version@user/channel#revision_hash --remote=gitlabこのコマンドは、そのリビジョンで使用可能な特定のパッケージのバイナリを表示します。
リビジョンを使用してパッケージを削除します
異なる粒度レベルでパッケージを削除できます:
特定レシピリビジョンを削除します
特定のレシピリビジョンとそれに関連するすべてのバイナリパッケージを削除するには:
conan remove package_name/version@user/channel#revision_hash --remote=gitlab特定レシピリビジョンのパッケージを削除します
特定レシピリビジョンに関連付けられているすべてのパッケージを削除するには:
conan remove package_name/version@user/channel#revision_hash --packages --remote=gitlabリビジョンで特定のパッケージを削除します
リビジョンで特定のパッケージを削除するには、次のいずれかのコマンドを使用します:
conan remove package_name/version@user/channel#revision_hash -p package_id --remote=gitlabまたは:
conan remove package_name/version@user/channel#revision_hash:package_id --remote=gitlabリビジョンでパッケージを削除する場合は、--remote=gitlabフラグを含める必要があります。そうしないと、パッケージはお使いのローカルシステムのキャッシュからのみ削除されます。
イミュータブルなリビジョンのワークフロー
リビジョンはイミュータブルになるように設計されています。レシピまたはそのコードを変更する場合:
- レシピをエクスポートすると、新しいレシピリビジョンが作成されます。
- 以前のレシピリビジョンに属する既存のバイナリは含まれません。新しいレシピリビジョンのために、新しいバイナリをビルド必要があります。
- パッケージをインストールすると、リビジョンを指定しない限り、Conanは自動的に最新のリビジョンを取得します。
パッケージのバイナリの場合、レシピリビジョンおよびパッケージ参照(Conanドキュメントではpackage_idとして知られています)ごとに1つのパッケージリビジョンのみを含める必要があります。同じレシピリビジョンとパッケージIDに対する複数のパッケージリビジョンは、パッケージが不必要にリビルドされたことを示しています。
トラブルシューティング
出力を冗長にする
Conanのイシューをトラブルシューティングする際に、より詳細な出力を行うには:
export CONAN_TRACE_FILE=/tmp/conan_trace.log # Or SET in windows
conan <command>その他のログに関するヒントは、Conanドキュメントにあります。
SSLエラー
自己署名証明書を使用している場合、ConanでSSLエラーを管理する方法は2つあります:
conan remoteコマンドを使用して、SSL検証を無効にします。- サーバーの
crtファイルをcacert.pemファイルに追加します。
詳細については、Conanドキュメントをお読みください。