- コナン・リポジトリの有効化
- 利用を開始
- GitLabパッケージレジストリをConanリモートとして追加します。
- GitLab Conanリポジトリへの認証
- パッケージのアップロード
- パッケージのインストール
- パッケージの削除
- GitLabパッケージレジストリからConanパッケージを探します。
- GitLabパッケージレジストリからのConanパッケージ情報の取得
- 対応CLIコマンド一覧
- GitLab CI と Conan パッケージの使用
GitLab Conanリポジトリ
GitLab Premium12.6で導入されました。
GitLab Conanリポジトリを使えば、すべてのプロジェクトがConanパッケージを保存する独自のスペースを持つことができます。
コナン・リポジトリの有効化
Conanリポジトリを有効にすると、デフォルトですべての新規プロジェクトで利用できるようになります。 既存のプロジェクトで有効にする場合、または無効にする場合:
- プロジェクトの[設定]>[一般]>[権限]に移動します。
- パッケージ機能を検索し、有効または無効にします。
- 変更を有効にするには、[変更を保存]をクリックします。
左サイドバーに「パッケージ&レジストリ」セクションが表示されます。
利用を開始
このセクションでは、コナンのインストールと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
上記の例では、このプロジェクトに属するパッケージが作成されます: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_registry
、write_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 search
GitLabパッケージレジストリから公開パッケージや閲覧権限のある非公開パッケージを検索します。 -
conan info
: GitLabパッケージレジストリから指定したパッケージの情報を表示します。 -
conan remove
GitLab パッケージレジストリからパッケージを削除します。
GitLab CI と Conan パッケージの使用
GitLab CI/CD内でConanコマンドを使うには、コマンド内で個人アクセストークンの代わりにCI_JOB_TOKEN
。
コナンの各コマンドにCONAN_LOGIN_USERNAME
とCONAN_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ファイルのベースとして使用するコナンの画像は、コナンのドキュメントで見つけることができます。