패키지 레지스트리의 Conan 1 패키지
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
GitLab용 Conan 패키지 레지스트리는 기능이 제한적이어서 개발 중이며 프로덕션 용도로 준비되지 않았습니다. 프로젝트의 패키지 레지스트리에 Conan 패키지를 게시합니다. 패키지 레지스트리에 Conan 패키지를 게시하려면 패키지 레지스트리를 원격으로 추가하고 인증합니다.
GitLab용 Conan 패키지 레지스트리는 기능이 제한적이어서 개발 중이며 프로덕션 용도로 준비되지 않았습니다. 이 에픽은 프로덕션 준비를 위한 남은 작업과 타임라인을 자세히 설명합니다.
프로젝트의 패키지 레지스트리에 Conan 패키지를 게시합니다. 그런 다음 종속성으로 사용해야 할 때마다 패키지를 설치합니다.
패키지 레지스트리에 Conan 패키지를 게시하려면 패키지 레지스트리를 원격으로 추가하고 인증합니다.
그런 다음 conan 명령을 실행하고 패키지를 패키지 레지스트리에 게시할 수 있습니다.
Conan 레지스트리는 FIPS를 준수하지 않으며 FIPS 모드가 활성화된 경우 비활성화됩니다.
Conan 패키지 관리자 클라이언트가 사용하는 특정 API 엔드포인트에 대한 문서는 Conan v1 API 또는 Conan v2 API를 참조하세요.
Conan 1 패키지를 빌드하는 방법을 알아보세요.
패키지 레지스트리를 Conan 원격으로 추가#
conan 명령을 실행하려면 프로젝트 또는 인스턴스에 대한 Conan 원격으로 패키지 레지스트리를 추가해야 합니다. 그런 다음 패키지 레지스트리에서 패키지를 게시하고 설치할 수 있습니다.
프로젝트에 대한 원격 추가#
모든 명령에서 원격 이름을 지정하지 않고도 프로젝트의 패키지를 사용할 수 있도록 원격을 설정합니다.
프로젝트에 대한 원격을 설정하면 패키지 이름에 제한이 없습니다.
그러나 명령에는 사용자와 채널을 포함한 전체 레시피(예: package_name/version@user/channel)가 포함되어야 합니다.
원격을 추가하려면:
-
터미널에서 다음 명령을 실행합니다:
conan remote add gitlab https://gitlab.example.com/api/v4/projects/<project_id>/packages/conan -
Conan 명령 끝에
--remote=gitlab을 추가하여 원격을 사용합니다.예를 들어:
conan search Hello* --remote=gitlab
인스턴스에 대한 원격 추가#
단일 원격을 사용하여 전체 GitLab 인스턴스의 패키지에 접근합니다.
그러나 이 원격을 사용할 때는 다음 패키지 명명 제한을 따라야 합니다.
원격을 추가하려면:
-
터미널에서 다음 명령을 실행합니다:
conan remote add gitlab https://gitlab.example.com/api/v4/packages/conan -
Conan 명령 끝에
--remote=gitlab을 추가하여 원격을 사용합니다.예를 들어:
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은 패키지를 업로드하고 비공개 및 내부 프로젝트의 패키지를 설치하기 위해 인증이 필요합니다. (그러나 인증 없이 공개 프로젝트의 패키지를 설치할 수 있습니다.)
패키지 레지스트리에 인증하려면 다음 중 하나가 필요합니다:
- 스코프가
api로 설정된 개인 액세스 토큰. - 스코프가
read_package_registry,write_package_registry또는 둘 다로 설정된 배포 토큰. - CI 잡 토큰.
인증되지 않은 경우 비공개 및 내부 프로젝트의 패키지가 숨겨집니다. 인증 없이 비공개 또는 내부 프로젝트의 패키지를 검색하거나 다운로드하려고 하면 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 command> --remote=gitlab
Conan 패키지 게시#
패키지 레지스트리에 Conan 패키지를 게시하여 프로젝트에 접근할 수 있는 모든 사람이 패키지를 종속성으로 사용할 수 있도록 합니다.
사전 요구 사항:
- Conan 원격이 구성되어 있어야 합니다.
- 패키지 레지스트리와의 인증이 구성되어 있어야 합니다.
- 로컬 Conan 패키지가 있어야 합니다.
- 인스턴스 원격의 경우 패키지가 명명 규칙을 충족해야 합니다.
- 프로젝트 개요 페이지에 표시되는 프로젝트 ID가 있어야 합니다.
패키지를 게시하려면 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_USERNAME과 CONAN_PASSWORD를 제공할 수 있습니다. 예를 들어:
create_package:
image: conanio/gcc7
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 파일을 사용하여 종속성으로 설치됩니다.
사전 요구 사항:
-
패키지를 종속성으로 설치하려는 프로젝트에서
conanfile.txt를 엽니다. 또는 프로젝트의 루트에서conanfile.txt라는 파일을 생성합니다. -
파일의
[requires]섹션에 Conan 레시피를 추가합니다:[requires] Hello/0.1@mycompany/beta [generators] cmake -
프로젝트의 루트에
build디렉토리를 생성하고 해당 디렉토리로 변경합니다:mkdir build && cd build -
conanfile.txt에 나열된 종속성을 설치합니다:conan install .. <options>
이 튜토리얼에서 생성한 패키지를 설치하려고 하면 패키지가 이미 존재하기 때문에 설치 명령에 아무런 효과가 없습니다.
~/.conan/data를 삭제하여 캐시에 저장된 패키지를 정리합니다.
Conan 패키지 제거#
GitLab 패키지 레지스트리에서 Conan 패키지를 제거하는 두 가지 방법이 있습니다.
-
Conan 클라이언트를 사용하여 명령줄에서:
conan remove Hello/0.2@user/channel --remote=gitlab이 명령에는 원격을 명시적으로 포함해야 합니다. 그렇지 않으면 패키지가 로컬 시스템 캐시에서만 제거됩니다.
[!note] 이 명령은 패키지 레지스트리에서 모든 레시피 및 바이너리 패키지 파일을 제거합니다.
-
GitLab 사용자 인터페이스에서:
프로젝트의 Deploy > Package registry로 이동합니다. Remove repository([remove])를 선택하여 패키지를 제거합니다.
패키지 레지스트리에서 Conan 패키지 검색#
전체 또는 부분 패키지 이름으로 검색하거나 정확한 레시피로 검색하려면 conan search 명령을 실행합니다.
-
특정 패키지 이름으로 모든 패키지를 검색하려면:
conan search Hello --remote=gitlab -
He로 시작하는 모든 패키지와 같이 부분 이름으로 검색하려면:conan search He* --remote=gitlab
검색 범위는 Conan 원격 구성에 따라 다릅니다:
-
인스턴스에 대한 원격이 구성된 경우, 검색에는 접근 권한이 있는 모든 프로젝트가 포함됩니다. 이는 비공개 프로젝트와 모든 공개 프로젝트를 포함합니다.
-
프로젝트에 대한 원격이 구성된 경우, 검색에는 접근 권한이 있는 한 대상 프로젝트의 모든 패키지가 포함됩니다.
검색 결과 제한은 500개 패키지이며, 결과는 가장 최근에 게시된 패키지 순으로 정렬됩니다.
패키지를 검색할 때 Conan v1 CLI는 Conan v1로 업로드된 패키지의 패키지 세부 정보만 표시합니다. Conan v2로 업로드된 패키지는 검색 결과에 나타나지만 세부 정보가 표시되지 않습니다. 이는 Conan v1이 패키지 참조 메타데이터에서 recipe_hash 필드를 예상하는데 이 필드가 Conan v1로 업로드된 패키지에만 있기 때문입니다.
패키지 레지스트리에서 Conan 패키지 정보 가져오기#
conan info 명령은 패키지에 대한 정보를 반환합니다:
conan info Hello/0.1@mycompany/beta
Conan 패키지 다운로드#
Conan 정보 메타데이터 추출이 활성화되기 전에 업로드된 패키지는 conan download CLI 명령으로 다운로드할 수 없습니다.
설정을 사용하지 않고 conan download 명령을 사용하여 Conan 패키지의 레시피와 바이너리를 로컬 캐시에 다운로드할 수 있습니다.
사전 요구 사항:
모든 바이너리 패키지 다운로드#
패키지 레지스트리에서 레시피와 관련된 모든 바이너리 패키지를 다운로드할 수 있습니다.
모든 바이너리 패키지를 다운로드하려면 다음 명령을 실행합니다:
conan download Hello/0.1@foo+bar/stable --remote=gitlab
레시피 파일 다운로드#
바이너리 패키지 없이 레시피 파일만 다운로드할 수 있습니다.
레시피 파일을 다운로드하려면 다음 명령을 실행합니다:
conan download Hello/0.1@foo+bar/stable --remote=gitlab --recipe
특정 바이너리 패키지 다운로드#
패키지 참조(Conan 문서에서 package_id로 알려진)를 참조하여 단일 바이너리 패키지를 다운로드할 수 있습니다.
특정 바이너리 패키지를 다운로드하려면 다음 명령을 실행합니다:
conan download Hello/0.1@foo+bar/stable:<package_reference> --remote=gitlab
지원되는 CLI 명령#
GitLab Conan 저장소는 다음 Conan CLI 명령을 지원합니다:
conan upload: 레시피와 패키지 파일을 패키지 레지스트리에 업로드합니다.conan install:conanfile.txt파일 사용을 포함하여 패키지 레지스트리에서 Conan 패키지를 설치합니다.conan download: 설정을 사용하지 않고 패키지 레시피와 바이너리를 로컬 캐시에 다운로드합니다.conan search: 패키지 레지스트리에서 공개 패키지와 볼 권한이 있는 비공개 패키지를 검색합니다.conan info: 패키지 레지스트리의 특정 패키지에 대한 정보를 봅니다.conan remove: 패키지 레지스트리에서 패키지를 삭제합니다.
Conan 메타데이터 추출#
히스토리
Conan 패키지를 업로드하면 GitLab은 자동으로 conaninfo.txt 파일에서 메타데이터를 추출합니다. 이 메타데이터에는 다음이 포함됩니다:
- 패키지 설정(
os,arch,compiler,build_type등) - 패키지 옵션
- 패키지 요구 사항 및 종속성
이 기능이 활성화되기 전에(GitLab 17.10) 업로드된 패키지는 메타데이터가 추출되지 않습니다. 이러한 패키지의 경우 일부 검색 및 다운로드 기능이 제한됩니다.
Conan 리비전#
히스토리
- GitLab 18.1에서
conan_package_revisions_support라는 플래그와 함께 도입되었습니다. 기본값으로 비활성화됩니다. - GitLab 18.3에서 GitLab.com에서 활성화되었습니다. 기능 플래그
conan_package_revisions_support가 제거되었습니다.
이 기능의 사용 가능 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참조하세요.
Conan 1 리비전은 패키지 레지스트리에서 패키지 불변성을 제공합니다. 버전을 변경하지 않고 레시피 또는 패키지를 변경할 때 Conan은 이러한 변경 사항을 추적하기 위한 고유 식별자(리비전)를 계산합니다.
리비전 유형#
Conan은 두 가지 유형의 리비전을 사용합니다:
- 레시피 리비전(RREV): 레시피를 내보낼 때 생성됩니다. 기본적으로 Conan은 레시피 매니페스트의 체크섬 해시를 사용하여 레시피 리비전을 계산합니다.
- 패키지 리비전(PREV): 패키지를 빌드할 때 생성됩니다. Conan은 패키지 내용의 해시를 사용하여 패키지 리비전을 계산합니다.
리비전 활성화#
Conan 1.x에서는 기본적으로 리비전이 활성화되지 않습니다. 리비전을 활성화하려면 다음 중 하나를 수행해야 합니다:
_conan.conf_파일의[general]섹션에revisions_enabled=1을 추가합니다(권장).CONAN_REVISIONS_ENABLED=1환경 변수를 설정합니다.
리비전 참조#
다음 형식으로 패키지를 참조할 수 있습니다:
| 참조 | 설명 |
|---|---|
lib/1.0@conan/stable |
lib/1.0@conan/stable의 최신 RREV. |
lib/1.0@conan/stable#RREV |
lib/1.0@conan/stable의 특정 RREV. |
lib/1.0@conan/stable#RREV:PACKAGE_REFERENCE |
특정 RREV에 속하는 바이너리 패키지. |
lib/1.0@conan/stable#RREV:PACKAGE_REFERENCE#PREV |
특정 RREV에 속하는 바이너리 패키지 리비전 PREV. |
리비전 업로드#
GitLab 패키지 레지스트리에 모든 리비전과 해당 바이너리를 업로드하려면:
conan upload package_name/version@user/channel#* --all --remote=gitlab
여러 리비전을 업로드하면 가장 오래된 것부터 최신 순으로 업로드됩니다. 상대적 순서는 레지스트리에서 보존됩니다.
리비전 검색#
Conan v1에서 특정 레시피의 모든 리비전을 검색하려면:
conan search package_name/version@user/channel --revisions --remote=gitlab
이 명령은 지정된 레시피에 사용 가능한 모든 리비전과 리비전 해시 및 생성 날짜를 표시합니다.
특정 리비전에 대한 자세한 정보를 얻으려면:
conan search package_name/version@user/channel#revision_hash --remote=gitlab
이 명령은 해당 리비전에 사용 가능한 특정 바이너리 패키지를 표시합니다.
리비전으로 패키지 삭제#
다양한 세분성 수준에서 패키지를 삭제할 수 있습니다:
특정 레시피 리비전 삭제#
특정 레시피 리비전과 관련된 모든 바이너리 패키지를 삭제하려면:
conan remove package_name/version@user/channel#revision_hash --remote=gitlab
특정 레시피 리비전의 패키지 삭제#
특정 레시피 리비전과 관련된 모든 패키지를 삭제하려면:
conan remove package_name/version@user/channel#revision_hash --packages --remote=gitlab
리비전의 특정 패키지 삭제#
레시피 리비전의 특정 패키지를 삭제하려면 다음 명령 중 하나를 사용할 수 있습니다:
conan remove package_name/version@user/channel#revision_hash -p package_id --remote=gitlab
또는:
conan remove package_name/version@user/channel#revision_hash:package_id --remote=gitlab
리비전이 있는 패키지를 삭제할 때 --remote=gitlab 플래그를 포함해야 합니다. 그렇지 않으면 패키지가 로컬 시스템 캐시에서만 제거됩니다.
불변 리비전 워크플로#
리비전은 불변으로 설계되어 있습니다. 레시피 또는 소스 코드를 수정할 때:
- 레시피를 내보낼 때 새로운 레시피 리비전이 생성됩니다.
- 이전 레시피 리비전에 속한 기존 바이너리는 포함되지 않습니다. 새로운 레시피 리비전에 대한 새 바이너리를 빌드해야 합니다.
- 패키지를 설치할 때 리비전을 지정하지 않으면 Conan은 자동으로 최신 리비전을 검색합니다.
패키지 바이너리의 경우 레시피 리비전과 패키지 참조(Conan 문서에서 package_id로 알려진)당 하나의 패키지 리비전만 포함해야 합니다. 동일한 레시피 리비전과 패키지 ID에 대한 여러 패키지 리비전은 패키지가 불필요하게 재빌드되었음을 나타냅니다.
문제 해결#
자세한 출력 만들기#
Conan 문제를 해결할 때 더 자세한 출력을 보려면:
export CONAN_TRACE_FILE=/tmp/conan_trace.log # Or SET in windows
conan <command>
Conan 문서에서 더 많은 로깅 팁을 찾을 수 있습니다.
SSL 오류#
자체 서명된 인증서를 사용하는 경우 Conan에서 SSL 오류를 관리하는 두 가지 방법이 있습니다:
conan remote명령을 사용하여 SSL 검증을 비활성화합니다.- 서버
crt파일을cacert.pem파일에 추가합니다.
Conan 문서에서 자세히 읽어보세요.
