GitLab Conan Repository

GitLab Conan Repository

Introduced in 12.6.

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

注意:仅当您的 GitLab 管理员此选项才可用.

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

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

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

Getting started

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

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

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

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

Installing CMake

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

  1. cmake --version

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

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

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

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

Building a package

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

  1. conan new Hello/0.1 -t

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

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

    上面的示例将创建一个属于该项目的软件包: https://gitlab.com/my-org/my-group/my-project : https://gitlab.com/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 .

    例如:

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

    对于存储库身份验证:

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

    一旦有了个人访问令牌并设置了 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 确实会定期失效,因此您需要在这种情况下重新输入个人访问令牌.

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

    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

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

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

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

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

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

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

    Installing a package

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

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

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

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

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

    1. conan install ..

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

    有两种方法可以从 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

    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 软件包注册表中查看有关给定软件包的信息.

    Using GitLab CI with Conan packages

    in GitLab Premium 12.7.

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

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