GitLab Conanリポジトリ

GitLab Premium12.6で導入されました

GitLab Conanリポジトリを使えば、すべてのプロジェクトがConanパッケージを保存する独自のスペースを持つことができます。

GitLab Conan Repository

コナン・リポジトリの有効化

注:このオプションは、GitLab管理者がConanリポジトリのサポートを有効にしている場合にのみ利用できます。

Conanリポジトリを有効にすると、デフォルトですべての新規プロジェクトで利用できるようになります。 既存のプロジェクトで有効にする場合、または無効にする場合:

  1. プロジェクトの[設定]>[一般]>[権限]に移動します。
  2. パッケージ機能を検索し、有効または無効にします。
  3. 変更を有効にするには、[変更を保存]をクリックします。

左サイドバーに「パッケージ&レジストリ」セクションが表示されます。

利用を開始

このセクションでは、コナンのインストールとC/C++プロジェクト用のパッケージのビルドについて説明します。 これは、コナンを初めて使用する場合のクイック・スタートです。 すでにコナンを使用しており、独自のパッケージのビルド方法を理解している場合は、次のセクションに進んでください。

コナンのインストール

conan.ioの指示に従って、Conanパッケージマネージャをローカル開発環境にダウンロードしてください。

インストールが完了したら、ターミナルで以下を実行してConanを使用できることを確認します。

conan --version

Conanのバージョンが出力されるはずです:

Conan version 1.20.5

CMakeのインストール

C++とConanを使って開発する場合、コンパイラには幅広い選択肢があります。 このチュートリアルでは、cmakeコンパイラの使い方を説明します。 ターミナルで、次のコマンドを実行します。

cmake --version

出力にcmakeのバージョンが表示されるはずです。 それ以外のものが表示された場合は、cmakeをインストールする必要があるかもしれません。

Mac では、homebrew を使ってbrew install cmakeを実行して cmake をインストールすることができます。 その他の場合は、cmake.orgの指示に従ってください。

プロジェクトの作成

有効でコンパイル可能な C++ プロジェクトを作成するために何が必要かを理解することは、このガイドの範囲外です。しかし、C++ の初心者で GitLab のパッケージレジストリを試したい場合は、Conan.io に素晴らしいhello world スタータープロジェクトがあるので、それをクローンして始めましょう。

自分のC++プロジェクトを持っていない場合は、このレポをクローンしてください。

パッケージの構築

ターミナルでプロジェクトのルートフォルダに移動します。conan new を実行し、パッケージ名とバージョンを指定して新しいレシピを生成します:

conan new Hello/0.1 -t

次に、Conanユーザーとチャンネルを指定してconan create を実行し、そのレシピのパッケージを作成します:

conan create . my-org+my-group+my-project/beta
注意現在の命名制限ではuser の値を GitLab 上のプロジェクトの+ 区切りのパスとして命名する必要があります。

上記の例では、このプロジェクトに属するパッケージが作成されます:https://gitlab.com/my-org/my-group/my-project で、チャンネルはbetaです。

これら2つのコマンド例は、レシピHello/0.1@my-org+my-group+my-project/betaを持つ最終パッケージを生成します。

パッケージの作成と管理の詳細については、Conanのドキュメントを参照してください。

これで、パッケージを GitLab レジストリにアップロードする準備が整いました。 まずは GitLab をリモートとして設定し、リクエストの認証用に Conan ユーザーを追加します。

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

Conan の設定に新しいリモートを追加します:

conan remote add gitlab https://gitlab.example.com/api/v4/packages/conan

リモートが設定されると、コマンドの最後に--remote=gitlab を追加することで、Conan コマンドを実行する際にリモートを使用することができます。

使用例:

conan search Hello* --all --remote=gitlab

GitLab Conanリポジトリへの認証

個人アクセストークンまたはデプロイトークンが必要です。

リポジトリ認証の場合:

  • 個人アクセストークンは、スコープをapiに設定して生成することができます。
  • スコープをread_package_registrywrite_package_registry、またはその両方に設定してデプロイトークンを生成できます。

GitLabリモートへのConanユーザーの追加

個人アクセストークンを取得し、Conanリモートを設定すれば、トークンをリモートに関連付けることができますので、Conanコマンドを実行するたびにトークンを追加する必要はありません:

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

: リモートにgitlab, gitlab以外の名前を付けた場合、gitlabこのコマンドでは .ではなく、リモート名を使用する必要が gitlabあります。

今後、--remote=gitlabを使ってコマンドを実行すると、ユーザー名とパスワードが自動的にリクエストに含まれるようになります。

注意: 個人アクセストークンはいつでもローカルに保存されるわけではありません。 ConanはJWTを使うので、このコマンドを実行すると、Conanはあなたのトークンを使ってGitLabに期限切れのトークンを要求します。 JWTは定期的に期限切れになるので、その時は個人アクセストークンを再入力する必要があります。

あるいは、与えられたコマンドに明示的に認証情報を含めることもできます。 たとえば、以下のように:

CONAN_LOGIN_USERNAME=<gitlab_username or deploy_token_username> CONAN_PASSWORD=<personal_access_token or deploy_token> conan upload Hello/0.1@my-group+my-project/beta --all --remote=gitlab

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

パッケージのレジストリとして常に GitLab を使うようにしたい場合は、Conan にパッケージレシピの GitLab リモートを参照するように指示します:

conan remote add_ref Hello/0.1@my-group+my-project/beta gitlab
注意パッケージのレシピにはバージョンも含まれるので、デフォルトのリモートをHello/0.1@user/channel に設定してもHello/0.2@user/channelでは動作しません。 この機能は、リモートを指定せずに GitLab レジストリからパッケージを消費したりインストールしたりする場合に最適です。

このドキュメントの残りのコマンド例では、gitlab リモートにあなたの認証情報を持つ Conan ユーザーを追加していることを前提としており、明示的な認証情報やリモートオプションは含まれていませんが、ユーザーやデフォルトのリモートを追加しなくても、どのコマンドも実行できることに注意してください:

`CONAN_LOGIN_USERNAME=<gitlab_username or deploy_token_username> CONAN_PASSWORD=<personal_access_token or deploy_token> <conan command> --remote=gitlab

パッケージのアップロード

まず、ローカルでConanパッケージを作成する必要があります。 GitLabパッケージレジストリで動作させるためには、特定の命名規則に従う必要があります。

GitLab でプロジェクトを作成し、api スコープを選択して、使用している個人アクセストークンがコンテナレジストリへの書き込みアクセスに適切な権限を持っていることを確認します。

conan upload コマンドを使って GitLab パッケージレジストリにパッケージをアップロードできます:

conan upload Hello/0.1@my-group+my-project/beta --all

パッケージレシピの命名規則

標準的なコナンのレシピはpackage_name/version@user/channelのようになります。

レシピユーザは+ で区切られたプロジェクトパスでなければなりません。パッケージ名は何でもかまいませんが、名前の衝突で不可能でない限り、プロジェクト名を使用することが望ましいです。 例えば、以下のようになります:

プロジェクト Package サポート
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 いいえ
注:将来的には、プロジェクトやグループレベルのリモートをサポートし、より柔軟な命名規則を可能にする予定です。

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

Conan パッケージは一般的にconanfile.txt ファイルを使って依存関係としてインストールされます。

Conanパッケージを依存関係としてインストールしたいプロジェクトで、conanfile.txt を開くか、プロジェクトのルートにconanfile.txt という空のファイルを作成します。

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

 [requires]
 Hello/0.1@my-group+my-project/beta

 [generators]
 cmake

次に、プロジェクトのルートからビルド・ディレクトリを作成し、そこに移動します:

mkdir build && cd build

これで、conanfile.txtに記載されている依存関係をインストールできます:

conan install ..
注意:このチュートリアルで作成したパッケージをインストールしようとしている場合、そのパッケージはすでにローカルマシンに存在しているので、あまり何も起こりません。

パッケージの削除

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

  • コマンドラインでConanクライアントを使用します:

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

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

    注意:このコマンドはすべてのレシピとバイナリのパッケージファイルをパッケージレジストリから削除します。
  • GitLab プロジェクトインターフェース:プロジェクトページの packages ビューで、赤いゴミ箱アイコンをクリックしてパッケージを削除できます。

GitLabパッケージレジストリからConanパッケージを探します。

conan search コマンドは完全な、あるいは部分的なパッケージ名、あるいは正確なレシピで検索することができます。

部分名で検索する場合は、ワイルドカード記号*を使用します(例:my-packa*):

conan search Hello --all --remote=gitlab
conan search He* --all --remote=gitlab
conan search Hello/0.1@my-group+my-project/beta --all --remote=gitlab

検索範囲には、あなたがアクセス権限を持つすべてのプロジェクトが含まれます。これには、非公開プロジェクトだけでなく、すべての公開プロジェクトも含まれます。

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

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

conan info Hello/0.1@my-group+my-project/beta

対応CLIコマンド一覧

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

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

GitLab CI と Conan パッケージの使用

GitLab Premium12.7から導入されました

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

コナンの各コマンドにCONAN_LOGIN_USERNAMECONAN_PASSWORD.gitlab-ci.yml ファイルに記述するのが最も簡単です:

image: conanio/gcc7

create_package:
  stage: deploy
  script:
    - conan remote add gitlab https://gitlab.example.com/api/v4/packages/conan
    - conan create . my-group+my-project/beta
    - CONAN_LOGIN_USERNAME=ci_user CONAN_PASSWORD=${CI_JOB_TOKEN} conan upload Hello/0.1@root+ci-conan/beta1 --all --remote=gitlab

CIファイルのベースとして使用するコナンの画像は、コナンのドキュメントで見つけることができます。