패키지 레지스트리의 Conan 패키지

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated Status: Experiment

경고: GitLab의 Conan 패키지 레지스트리는 개발 중이며 제한된 기능으로 인해 프로덕션 환경에서 사용할 준비가 되지 않았습니다. 이 epic에서 남은 작업과 프로덕션 사용 준비까지의 일정에 대해 자세히 설명하고 있습니다.

참고: Conan 레지스트리는 FIPS(Federal Information Processing Standards) 규정을 준수하지 않으며 FIPS 모드가 활성화되었을 때 비활성화됩니다.

프로젝트의 패키지 레지스트리에 Conan 패키지를 게시한 후, 의존성으로 사용해야 하는 경우에 패키지를 설치하세요.

Conan 패키지를 패키지 레지스트리에 게시하려면 패키지 레지스트리를 원격으로 추가하고 인증하세요.

그런 다음 conan 명령을 실행하고 패키지를 패키지 레지스트리에 게시할 수 있습니다.

Conan 패키지 관리자 클라이언트가 사용하는 특정 API 엔드포인트에 대한 문서는 Conan API 문서를 참조하세요.

Conan 패키지를 생성하는 방법은 Conan 패키지 생성을 참조하세요.

Conan 레지스트리를 Conan 원격지로 추가

conan 명령을 실행하려면 프로젝트나 인스턴스용 Conan 레지스트리를 Conan 원격지로 추가해야 합니다. 그럼 패키지를 패키지 레지스트리에 게시하고 설치할 수 있습니다.

프로젝트용 원격지 추가

프로젝트에서 패키지를 사용하려면 모든 명령에 원격지 이름을 지정하지 않고 프로젝트의 패키지와 작업할 수 있도록 원격지를 설정하세요.

프로젝트에 원격지를 설정하면 패키지 이름에 제한이 없습니다. 그러나 명령에는 사용자와 채널을 포함한 완전한 레시피를 포함해야 합니다. 예를 들어 package_name/version@user/channel와 같이요.

원격지 추가 방법:

  1. 터미널에서 다음 명령을 실행하세요:

    conan remote add gitlab https://gitlab.example.com/api/v4/projects/<project_id>/packages/conan
    
  2. 다음과 같이 --remote=gitlab를 Conan 명령의 끝에 추가하여 원격지를 사용하세요.

    예:

    conan search Hello* --remote=gitlab
    

인스턴스용 원격지 추가

GitLab의 전체 인스턴스 전역 패키지에 액세스하려면 단일 원격지를 사용하세요.

그러나 이 원격지를 사용할 때에는 패키지 네이밍 규칙을 따라야 합니다.

원격지 추가 방법:

  1. 터미널에서 다음 명령을 실행하세요:

    conan remote add gitlab https://gitlab.example.com/api/v4/packages/conan
    
  2. 다음과 같이 --remote=gitlab를 Conan 명령의 끝에 추가하여 원격지를 사용하세요.

    예:

    conan search 'Hello*' --remote=gitlab
    

인스턴스용 원격지를 위한 패키지 레시피 네이밍 규칙

표준 Conan 레시피 규칙은 package_name/version@user/channel입니다. 그러나 인스턴스용 원격지를 사용하는 경우 user 레시피는 플러스(+)로 구분된 프로젝트 경로여야 합니다.

예제 레시피 이름:

프로젝트 패키지 지원 여부
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 아니요

프로젝트 원격지는 더 유연한 네이밍 규칙을 가지고 있습니다.

패키지 레지스트리에 인증

GitLab에서 패키지를 업로드하거나 비공개 및 내부 프로젝트에서 패키지를 설치하기 위해서는 인증이 필요합니다. (그러나 공개 프로젝트에서는 인증 없이 패키지를 설치할 수 있습니다.)

패키지 레지스트리에 인증하려면 다음 중 하나가 필요합니다:

참고: 인증되지 않은 경우 비공개 및 내부 프로젝트의 패키지는 숨겨집니다. 인증되지 않은 상태에서 비공개 또는 내부 프로젝트에서 패키지를 검색하거나 다운로드하려고 하면 Conan 클라이언트에 unable to find the package in remote 오류가 발생합니다.

GitLab 원격지에 자격 증명 추가

모든 Conan 명령에 토큰을 명시적으로 추가할 필요 없이 토큰을 GitLab 원격지와 연결하세요.

필수 요구 사항:

  • 인증 토큰이 있어야 합니다.
  • Conan 원격지가 구성되어 있어야 합니다.

터미널에서 이 명령을 실행하세요. 이 예제에서 원격지 이름은 gitlab입니다. 자신의 원격지 이름을 사용하세요.

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

이제 --remote=gitlab로 명령을 실행할 때 요청에 사용자 이름과 암호가 포함됩니다.

참고: GitLab과의 인증은 정기적으로 만료되므로 때때로 개인 액세스 토큰을 다시 입력해야 할 수 있습니다.

프로젝트에 대한 기본 원격지 설정(옵션)

특정 원격지를 지정하지 않고 GitLab 패키지 레지스트리를 사용하려면 Conan에 항상 해당 패키지 레지스트리를 사용하도록 지시할 수 있습니다.

터미널에서 이 명령을 실행하세요:

conan remote add_ref Hello/0.1@mycompany/beta gitlab

참고: 패키지 레시피에는 버전이 포함되므로 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 명령> --remote=gitlab

Conan 패키지 게시

Conan 패키지를 패키지 레지스트리에 공개하여 프로젝트에 접근할 수 있는 모든 사용자가 해당 패키지를 의존성으로 사용할 수 있도록 합니다.

전제 조건:

패키지를 게시하려면 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>
    

참고: 이 튜토리얼에서 생성한 패키지를 설치하려고 하면 패키지가 이미 존재하기 때문에 설치 명령이 효과가 없습니다. 캐시에 저장된 패키지를 정리하려면 ~/.conan/data를 삭제하십시오.

Conan 패키지 제거

GitLab 패키지 레지스트리에서 Conan 패키지를 제거하는 두 가지 방법이 있습니다.

  • Conan 클라이언트를 사용하여 명령줄에서:

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

    이 명령에서 리모트를 명시적으로 포함해야 하며, 그렇지 않으면 패키지는 로컬 시스템 캐시에서만 제거됩니다.

    참고: 이 명령은 패키지 레지스트리에서 레시피 및 이진 패키지 파일을 모두 제거합니다.

  • GitLab 사용자 인터페이스에서:

    프로젝트의 배포 > 패키지 레지스트리로 이동합니다. 패키지를 선택하여 저장소 제거()를 선택하면 패키지가 제거됩니다.

패키지 레지스트리에서 Conan 패키지 검색

패키지의 전체 또는 부분적인 패키지명 또는 정확한 레시피로 검색하려면 conan search 명령을 실행합니다.

  • 특정 패키지명을 갖는 모든 패키지를 검색하려면:

    conan search Hello --remote=gitlab
    
  • He로 시작하는 모든 패키지를 포함한 부분적인 이름으로 검색하려면:

    conan search He* --remote=gitlab
    

검색 범위는 Conan 원격지 구성에 따라 다릅니다:

  • 인스턴스에 대한 원격지가 구성되어 있는 경우 검색 범위에는 액세스 권한이 있는 모든 프로젝트가 포함됩니다. 이는 비공개 프로젝트뿐만 아니라 모든 공개 프로젝트도 포함됩니다.

  • 프로젝트에 대한 원격지가 구성되어 있는 경우 검색 범위에는 대상 프로젝트의 모든 패키지가 포함됩니다. 액세스 권한이 있어야 합니다.

참고: 검색 결과의 제한은 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: 패키지 레지스트리에서 패키지를 삭제합니다.

Troubleshooting

출력을 자세하게 만들기

Conan 이슈를 해결할 때 더 자세한 출력을 원한다면:

export CONAN_TRACE_FILE=/tmp/conan_trace.log # 또는 Windows에서 SET
conan <command>

더 많은 로깅 팁은 Conan documentation에서 찾을 수 있습니다.

SSL 오류

자체 서명된 인증서를 사용하는 경우 Conan에서 SSL 오류를 관리하는 두 가지 방법이 있습니다:

  • conan remote 명령을 사용하여 SSL 검증을 비활성화합니다.
  • 서버 crt 파일을 cacert.pem 파일에 추가합니다.

자세한 내용은 Conan Documentation을 참조하세요.