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

caution
GitLab用のConanパッケージレジストリは開発中であり、機能が限られているため実運用にはまだ対応していません。このエピックでは、GitLabを本番環境で使えるようにするための残りの作業とスケジュールについて詳しく説明します。
note
Conan レジストリは FIPS に準拠しておらず、FIPS モードを有効にすると無効になります。

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

Conanパッケージをパッケージレジストリに公開するには、パッケージレジストリをリモートとして追加し、認証します。

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

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

Conan パッケージのビルド方法。

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

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

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

GitLab 13.4 で導入されました

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

プロジェクトにリモートを設定する場合、パッケージ名に制限はありません。しかし、コマンドにはユーザーとチャンネルを含む完全なレシピを含める必要があります。例えば、package_name/version@user/channel

リモートを追加するには

  1. ターミナルで次のコマンドを実行します:

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

    使用例:

    conan search Hello* --remote=gitlab
    

インスタンスにリモートを追加します。

GitLab インスタンス全体のパッケージにアクセスするには、単一のリモートを使用します。

ただし、このリモートを使うときは、パッケージの命名に関する制限に従わなければなりません。

リモートを追加するには

  1. ターミナルで次のコマンドを実行します:

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

    使用例:

    conan search 'Hello*' --remote=gitlab
    

インスタンスremotesのパッケージレシピ命名規則

Conanの標準的なレシピの命名規則はpackage_name/version@user/channelですが、インスタンスリモートを使用している場合、レシピuser はプラス記号 (+) でプロジェクトパスを区切ったものでなければなりません。

レシピ名の例

プロジェクトPackage対応
foo/barmy-package/1.0.0@foo+bar/stableはい
foo/bar-baz/buzmy-package/1.0.0@foo+bar-baz+buz/stableはい
gitlab-org/gitlab-cemy-package/1.0.0@gitlab-org+gitlab-ce/stableはい
gitlab-org/gitlab-cemy-package/1.0.0@foo/stableなし

プロジェクト・リモートは、より柔軟な命名規則を持っています。

パッケージレジストリへの認証

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

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

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

GitLab リモートへの認証情報の追加

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

前提条件:

  • 認証トークンが必要です。
  • Conanリモートが設定されている必要があります。

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

conan user <gitlab_username or deploy_token_username> -r gitlab -p <personal_access_token or deploy_token>

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

note
GitLab での認証は定期的に失効するので、アクセストークンを再入力する必要があるかもしれません。

プロジェクトのデフォルトリモートを設定する(オプション)

リモートを指定せずに GitLab パッケージレジストリとやりとりしたい場合は、Conan にパッケージレジストリを使うように指示します。

ターミナルで次のコマンドを実行します:

conan remote add_ref Hello/0.1@mycompany/beta gitlab
note
パッケージのレシピにはバージョンが含まれているため、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=gitlab

Conanパッケージの発行

Conanパッケージをパッケージレジストリに公開することで、プロジェクトにアクセスできる人であれば誰でも依存関係としてパッケージを使用することができます。

前提条件:

  • Conanリモートが設定されている必要があります。
  • パッケージレジストリによる認証を設定する必要があります。
  • ローカルにConanパッケージが存在すること。
    • インスタンスリモートの場合、パッケージは命名規則を満たす必要があります。
  • プロジェクトのホームページにあるプロジェクトIDが必要です。

パッケージを公開するには、conan upload コマンドを使ってください:

conan upload Hello/0.1@mycompany/beta --all

CI/CDを使用したConanパッケージの公開

GitLab CI/CDでConanコマンドを使用するには、コマンドの個人アクセストークンの代わりにCI_JOB_TOKEN

.gitlab-ci.yml ファイルで、各 Conan コマンドにCONAN_LOGIN_USERNAMECONAN_PASSWORD を指定することができます。例えば

image: conanio/gcc7

create_package:
  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: production

CIファイルのベースとして使用する追加のConanイメージは、Conanドキュメントで入手できます。

同じレシピのパッケージの再パブリッシュ

既存のパッケージと同じレシピ(package-name/version@user/channel)を持つパッケージを公開すると、重複ファイルは正常にアップロードされ、UI からアクセスできるようになります。しかし、パッケージがインストールされると、最近公開されたパッケージのみが返されます。

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

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

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

前提条件:

  • Conanリモートが設定されている必要があります。
  • 非公開プロジェクトや内部プロジェクトでは、パッケージレジストリで認証を設定する必要があります。
  1. 依存関係としてパッケージをインストールするプロジェクトで、conanfile.txtを開きます。または、プロジェクトのルートにconanfile.txt という名前のファイルを作成します。

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

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

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

    conan install .. <options>
    
note
このチュートリアルで作成したパッケージをインストールしようとしても、そのパッケージはすでに存在しているため、インストールコマンドは何の効果もありません。~/.conan/data を削除して、キャッシュに保存されているパッケージをクリーンアップします。

Conan パッケージの削除

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

  • コマンドラインから Conan クライアントを使う方法:

     conan remove Hello/0.2@user/channel --remote=gitlab
    

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

    note
    このコマンドはパッケージレジストリからすべてのレシピとバイナリパッケージファイルを削除します。
  • GitLab ユーザーインターフェースから:

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

パッケージレジストリでConanパッケージを検索します。

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

  • 特定のパッケージ名で全てのパッケージを検索するには

     conan search Hello --remote=gitlab
    
  • He で始まるすべてのパッケージのように、パッケージ名の一部を検索する場合:

     conan search He* --remote=gitlab
    

検索範囲は Conan リモート設定に依存します:

  • インスタンスにリモートを設定している場合、検索対象にはアクセス権限のあるすべてのプロジェクトが含まれます。これには、非公開プロジェクトだけでなく、すべての公開プロジェクトも含まれます。

  • プロジェクトに対してリモートを設定している場合、検索対象には、アクセス権限を持っている限り、対象プロジェクト内のすべてのパッケージが含まれます。

note
検索結果の上限は 500 パッケージで、最近公開されたパッケージからソートされます。

パッケージレジストリから Conan パッケージ情報を取得

conan info コマンドはパッケージに関する情報を返します:

conan info Hello/0.1@mycompany/beta

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

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

  • conan upload:レシピとパッケージファイルをパッケージレジストリにアップロードします。
  • conan install:パッケージレジストリから Conan パッケージをインストールします。conanfile.txt ファイルを使用します。
  • conan search:パッケージ・レジストリから公開パッケージや閲覧権限のある非公開パッケージを検索します。
  • conan info:パッケージレジストリから指定されたパッケージの情報を閲覧します。
  • conan remove:パッケージレジストリからパッケージを削除します。

トラブルシューティング

出力を冗長に

イシューのトラブルシューティング時に、より冗長な出力を行います:

export CONAN_TRACE_FILE=/tmp/conan_trace.log # Or SET in windows
conan <command>

Conanのドキュメントにロギングのヒントがあります。

SSLエラー

自己署名証明書を使用している場合、コナンでSSLエラーを管理するには2つの方法があります:

  • conan remote 、SSL検証を無効にします。
  • サーバーのcrt ファイルをcacert.pem ファイルに追加します。

詳しくはConan Documentationをご覧ください。