GitLab Conan Repository

原文:https://docs.gitlab.com/ee/user/packages/conan_repository/

GitLab Conan Repository

Introduced in GitLab Premium 12.6.

有了 GitLab 柯南存储库,每个项目都可以有自己的空间来存储柯南软件包.

GitLab Conan Repository

Enabling the Conan Repository

注意:仅当您的 GitLab 管理员启用了对 Conan Repository 的支持时,此选项才可用.

启用柯南存储库后,默认情况下它将可用于所有新项目. 要为现有项目启用它,或者要禁用它:

  1. 导航到项目的“设置”>”常规”>”可见性,项目功能,权限” .
  2. 找到”软件包”功能并启用或禁用它.
  3. 单击保存更改以使更改生效.

然后,您应该能够在左侧栏中看到” 程序包和注册表”部分.

Getting started

本节将介绍如何安装 Conan 以及为 C / C ++项目构建软件包. 如果您不熟悉柯南,这是一个快速入门. 如果您已经在使用 Conan 并且了解如何构建自己的软件包,请继续下一节 .

Installing Conan

按照conan.io上的说明将 Conan 软件包管理器下载到本地开发环境.

安装完成后,通过运行以下命令验证您可以在终端中使用 Conan

  1. conan --version

您应该在输出中看到柯南版本:

  1. Conan version 1.20.5

Installing CMake

使用 C ++和 Conan 进行开发时,编译器有多种选择. 本教程将逐步介绍如何使用 cmake 编译器. 在您的终端中,运行命令

  1. cmake --version

您应该会在输出中看到 cmake 版本. 如果看到其他内容,则可能必须安装 cmake.

在 Mac 上,您可以通过运行brew install cmake来使用自制软件 brew install cmake . 否则,请按照cmake.org 中针对您的操作系统的说明进行操作.

Creating a project

了解创建有效且可编译的 C ++项目所需的内容不在本指南的范围之内,但是,如果您是 C ++的新手,并且想尝试 GitLab 软件包注册表,那么 Conan.io 会提供一个很棒的Hello World 入门项目可以克隆以开始使用.

如果您没有自己的 C ++项目,请克隆该存储库,并将其用于本教程的其余部分.

Building a package

在终端中,导航到项目的根文件夹. 通过运行conan new并为其提供程序包名称和版本来生成新配方:

  1. conan new Hello/0.1 -t

接下来,您将通过运行提供 Conan 用户和频道的conan create来为该配方创建一个程序包:

  1. conan create . my-org+my-group+my-project/beta

注意:当前的命名限制要求您将user命名为项目在 GitLab 上的+分隔路径.

上面的示例将创建一个属于该项目的软件包: https://gitlab.com/my-org/my-group/my-project : https://gitlab.com/my-org/my-group/my-project ,其通道为beta .

这两个示例命令将使用配方Hello/0.1@my-org+my-group+my-project/beta生成最终软件包.

有关创建和管理软件包的更多高级详细信息,请参阅Conan docs .

现在,您可以将软件包上传到 GitLab 注册表了. 首先,您需要将 GitLab 设置为远程,然后需要为该远程添加一个 Conan 用户以验证您的请求.

Adding the GitLab Package Registry as a Conan remote

Add a new remote to your Conan configuration:

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

一旦设置了遥控器,您就可以在运行 Conan 命令时使用遥控器,方法是在命令末尾添加--remote=gitlab .

例如:

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

Authenticating to the GitLab Conan Repository

您将需要一个个人访问令牌或部署令牌.

对于存储库身份验证:

  • 您可以将范围设置为api来生成个人访问令牌 .
  • 您可以生成令牌部署与范围设置为read_package_registrywrite_package_registry ,或两者兼而有之.

Adding a Conan user to the GitLab remote

一旦有了个人访问令牌并设置了 Conan remote ,就可以将令牌与远程关联,因此您不必将它们显式添加到您运行的每个 Conan 命令中:

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

注意:如果您使用gitlab以外的名称来命名远程,则应在此命令中使用您的远程名称,而不是gitlab .

从现在开始,当您使用--remote=gitlab运行命令时,您的用户名和密码将自动包含在请求中.

注意:个人访问令牌不会随时存储在本地. Conan 使用 JWT,因此当您运行此命令时,Conan 将使用您的令牌从 GitLab 请求一个过期的令牌. JWT 确实会定期失效,因此您需要在这种情况下重新输入个人访问令牌.

或者,您可以在任何给定命令中显式包括您的凭据. 例如:

  1. 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

Setting a default remote to your project (optional)

如果您希望柯南始终使用 GitLab 作为软件包的注册表,则可以告诉柯南始终为给定的软件包配方引用 GitLab 远程:

  1. conan remote add_ref Hello/0.1@my-group+my-project/beta gitlab

注意:软件包配方中确实包含该版本,因此为Hello/0.1@user/channel设置默认远程将不适用于Hello/0.2@user/channel . 此功能最适合需要从 GitLab 注册表使用或安装软件包而无需指定远程服务器的情况.

本文档中其余的示例命令假定您已将具有凭据的 Conan 用户添加到gitlab远程,并且不包括显式凭据或远程选项,但是请注意,可以在不添加任何命令的情况下运行任何命令.用户或默认遥控器:

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

Uploading a package

首先,您需要在本地创建 Conan 软件包 . 为了使用 GitLab 软件包注册表,必须遵循特定的命名约定 .

通过选择api 范围,确保在 GitLab 上创建了一个项目,并且所使用的个人访问令牌具有对容器注册表进行写访问的正确权限.

您可以使用conan upload命令将软件包上传到 GitLab 软件包注册表:

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

Package recipe naming convention

标准柯南食谱约定看起来像package_name/version@user/channel .

配方用户必须是+分隔的项目路径 . 程序包名称可以是任何名称,但最好使用项目名称,除非由于命名冲突而无法使用. 例如:

Project Package Supported
foo/bar my-package/1.0.0@foo+bar/stable Yes
foo/bar-baz/buz my-package/1.0.0@foo+bar-baz+buz/stable Yes
gitlab-org/gitlab-ce my-package/1.0.0@gitlab-org+gitlab-ce/stable Yes
gitlab-org/gitlab-ce my-package/1.0.0@foo/stable No

注意:将来的迭代将扩展对项目和组级别远程服务器的支持,这将允许更灵活的命名约定.

Installing a package

通常使用conanfile.txt文件将 Conan 软件包作为依赖项安装.

在要作为依赖项安装 Conan 软件包的项目中,打开conanfile.txt或在项目的根目录中创建一个名为conanfile.txt的空文件.

将柯南食谱添加到文件的[requires]部分:

  1. [requires]
  2. Hello/0.1@my-group+my-project/beta
  3. [generators]
  4. cmake

接下来,从您的项目的根目录创建一个构建目录并导航到它:

  1. mkdir build && cd build

现在,您可以安装conanfile.txt列出的依赖conanfile.txt

  1. conan install ..

注意:如果您要安装在本教程中刚刚创建的软件包,则不会发生太多事情,因为该软件包已在本地计算机上存在.

Removing a package

有两种方法可以从 GitLab 软件包注册表中删除 Conan 软件包.

  • 在命令行中使用 Conan 客户端:

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

    您需要在此命令中明确包含遥控器,否则该程序包将仅从本地系统缓存中删除.

    注意:此命令将从软件包注册表中删除所有配方和二进制软件包文件.

  • GitLab 项目界面 :在项目页面的软件包视图中,您可以通过单击红色垃圾图标来删除软件包.

Searching the GitLab Package Registry for Conan packages

conan search命令可以按完整或部分软件包名称或精确配方进行搜索.

要使用部分名称进行搜索,请使用通配符* ,该通配符应放在搜索的末尾(例如, my-packa* ):

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

搜索范围将包括您有权访问的所有项目,包括私人项目以及所有公共项目.

Fetching Conan package information from the GitLab Package Registry

conan info命令将返回有关给定软件包的信息:

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

List of supported CLI commands

GitLab Conan 存储库支持以下 Conan CLI 命令:

  • conan upload :将您的配方和包文件上载到 GitLab 包注册表.
  • conan install :从 GitLab 软件包注册表中安装conanfile.txt软件包,包括使用conanfile.txt文件.
  • conan search: Search the GitLab Package Registry for public packages, and private packages you have permission to view.
  • conan info :从 GitLab 软件包注册表中查看有关给定软件包的信息.
  • conan remove :从 GitLab 软件包注册表中删除该软件包.

Using GitLab CI with Conan packages

Introduced in GitLab Premium 12.7.

要在GitLab CI / CD 中使用柯南命令,可以在命令中使用CI_JOB_TOKEN代替个人访问令牌.

.gitlab-ci.yml文件中为每个柯南命令提供CONAN_LOGIN_USERNAMECONAN_PASSWORD是最简单的:

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

您可以在Conan 文档中找到其他柯南图像用作 CI 文件的基础.