패키지 레지스트리의 Conan 2 패키지
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
이 기능의 가용성은 기능 플래그로 제어됩니다. 프로젝트의 패키지 레지스트리에 Conan 2 패키지를 게시합니다. GitLab의 Conan 2 패키지 레지스트리는 기능이 제한되어 프로덕션 사용에는 준비되지 않은 개발 중인 상태입니다.
히스토리
- GitLab 18.1에서
conan_package_revisions_support라는 플래그와 함께 도입되었습니다. 기본적으로 비활성화됩니다. - GitLab 18.3에서 GitLab.com에서 활성화되었습니다. 기능 플래그
conan_package_revisions_support가 제거되었습니다.
이 기능의 가용성은 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참조하세요.
프로젝트의 패키지 레지스트리에 Conan 2 패키지를 게시합니다. 그런 다음 의존성으로 사용해야 할 때 패키지를 설치합니다.
GitLab의 Conan 2 패키지 레지스트리는 기능이 제한되어 프로덕션 사용에는 준비되지 않은 개발 중인 상태입니다. 이 에픽은 프로덕션 준비를 위한 남은 작업과 일정을 설명합니다.
패키지 레지스트리에 Conan 2 패키지를 게시하려면 패키지 레지스트리를 원격으로 추가하고 인증합니다.
그런 다음 conan 명령을 실행하여 패키지를 패키지 레지스트리에 게시할 수 있습니다.
Conan 레지스트리는 FIPS를 준수하지 않으며 FIPS 모드가 활성화된 경우 비활성화됩니다.
Conan 2 패키지 관리자 클라이언트가 사용하는 특정 API 엔드포인트 문서는 Conan v2 API를 참조하세요.
Conan 2 패키지 빌드 방법을 알아보세요.
패키지 레지스트리를 Conan 원격으로 추가#
conan 명령을 실행하려면 프로젝트 또는 인스턴스에 대한 Conan 원격으로 패키지 레지스트리를 추가해야 합니다. 그런 다음 패키지 레지스트리에서 패키지를 게시하고 설치할 수 있습니다.
프로젝트에 대한 원격 추가#
모든 명령에 원격 이름을 지정하지 않고도 프로젝트의 패키지로 작업할 수 있도록 원격을 설정합니다.
프로젝트에 대한 원격을 설정하면 패키지 이름이 소문자여야 합니다.
또한 명령에 사용자 및 채널을 포함한 전체 레시피가 포함되어야 합니다.
예: package_name/version@user/channel.
원격을 추가하려면:
-
터미널에서 다음 명령을 실행합니다:
conan remote add gitlab https://gitlab.example.com/api/v4/projects/<project_id>/packages/conan -
Conan 2 명령 끝에
--remote=gitlab을 추가하여 원격을 사용합니다.예를 들어:
conan search hello* --remote=gitlab
패키지 레지스트리 인증#
GitLab은 패키지 업로드, 비공개 및 내부 프로젝트의 패키지 설치에 인증이 필요합니다. (그러나 인증 없이 공개 프로젝트에서 패키지를 설치할 수 있습니다.)
패키지 레지스트리에 인증하려면 다음 중 하나가 필요합니다:
- 범위가
api로 설정된 개인 액세스 토큰. - 범위가
read_package_registry,write_package_registry또는 둘 다로 설정된 배포 토큰. - CI 작업 토큰.
인증하지 않으면 비공개 및 내부 프로젝트의 패키지는 숨겨집니다. 인증 없이 비공개 또는 내부 프로젝트에서 패키지를 검색하거나 다운로드하려고 하면 Conan 2 클라이언트에서 unable to find the package in remote 오류가 표시됩니다.
GitLab 원격에 자격 증명 추가#
모든 Conan 2 명령에 토큰을 명시적으로 추가하지 않아도 되도록 토큰을 GitLab 원격에 연결합니다.
사전 조건:
- 인증 토큰이 있어야 합니다.
- Conan 원격이 구성되어 있어야 합니다.
터미널에서 다음 명령을 실행합니다. 이 예시에서 원격 이름은 gitlab입니다.
원격 이름을 사용합니다.
conan remote login -p <personal_access_token or deploy_token> gitlab <gitlab_username or deploy_token_username>
이제 --remote=gitlab으로 명령을 실행하면 요청에 사용자 이름과 비밀번호가 포함됩니다.
GitLab 인증이 정기적으로 만료되기 때문에 경우에 따라 개인 액세스 토큰을 다시 입력해야 할 수 있습니다.
Conan 2 패키지 게시#
패키지 레지스트리에 Conan 2 패키지를 게시하여 프로젝트에 액세스할 수 있는 모든 사람이 패키지를 의존성으로 사용할 수 있도록 합니다.
사전 조건:
- Conan 원격이 구성되어 있어야 합니다.
- 패키지 레지스트리와의 인증이 구성되어 있어야 합니다.
- 로컬 Conan 2 패키지가 있어야 합니다.
- 프로젝트 개요 페이지에 표시되는 프로젝트 ID가 있어야 합니다.
패키지를 게시하려면 conan upload 명령을 사용합니다:
conan upload hello/0.1@mycompany/beta -r gitlab
CI/CD를 사용하여 Conan 2 패키지 게시#
GitLab CI/CD에서 Conan 2 명령을 사용하려면 명령에서 개인 액세스 토큰 대신 CI_JOB_TOKEN을 사용할 수 있습니다.
.gitlab-ci.yml 파일의 각 Conan 명령에 CONAN_LOGIN_USERNAME 및 CONAN_PASSWORD를 제공할 수 있습니다. 예를 들어:
create_package:
image: <conan 2 image>
stage: deploy
script:
- conan remote add gitlab ${CI_API_V4_URL}/projects/$CI_PROJECT_ID/packages/conan
- conan new <package-name>/0.1
- conan create . --channel=stable --user=mycompany
- CONAN_LOGIN_USERNAME=ci_user CONAN_PASSWORD=${CI_JOB_TOKEN} conan upload <package-name>/0.1@mycompany/stable --remote=gitlab
environment: production
CI 파일의 기반으로 사용할 적절한 Conan 2 이미지를 만들려면 공식 가이드를 따르세요.
동일한 레시피로 패키지 재게시#
기존 패키지와 동일한 레시피 (package-name/version@user/channel)를 가진 패키지를 게시하면 이미 서버에 있으므로 Conan이 업로드를 건너뜁니다.
Conan 2 패키지 설치#
패키지 레지스트리에서 Conan 2 패키지를 설치하여 의존성으로 사용합니다. 프로젝트 범위에서 패키지를 설치할 수 있습니다. 여러 패키지가 동일한 레시피를 가진 경우 패키지를 설치할 때 가장 최근에 게시된 패키지가 검색됩니다.
Conan 2 패키지는 일반적으로 conanfile.txt 파일을 사용하여 의존성으로 설치됩니다.
사전 조건:
-
Conan 2 패키지 가이드에 따라 다른 패키지를 만듭니다. 프로젝트 루트에
conanfile.txt라는 파일을 만듭니다. -
파일의
[requires]섹션에 Conan 레시피를 추가합니다:[requires] hello/0.1@mycompany/beta -
프로젝트 루트에
build디렉토리를 만들고 해당 디렉토리로 변경합니다:mkdir build && cd build -
conanfile.txt에 나열된 의존성을 설치합니다:conan install ../conanfile.txt
이 튜토리얼에서 만든 패키지를 설치하려고 하면 패키지가 이미 존재하기 때문에 설치 명령이 적용되지 않습니다. 기존 패키지를 로컬에서 제거한 다음 다시 시도하려면 다음 명령을 사용합니다:
conan remove hello/0.1@mycompany/beta
Conan 2 패키지 제거#
GitLab 패키지 레지스트리에서 Conan 2 패키지를 제거하는 두 가지 방법이 있습니다.
-
명령줄에서 Conan 2 클라이언트 사용:
conan remove hello/0.1@mycompany/beta --remote=gitlab이 명령에 원격을 명시적으로 포함해야 합니다. 그렇지 않으면 패키지가 로컬 시스템 캐시에서만 제거됩니다.
[!note] 이 명령은 패키지 레지스트리에서 모든 레시피 및 바이너리 패키지 파일을 제거합니다.
-
GitLab 사용자 인터페이스에서:
프로젝트의 배포 > 패키지 레지스트리로 이동합니다. 저장소 제거 ([remove])를 선택하여 패키지를 제거합니다.
패키지 레지스트리에서 Conan 2 패키지 검색#
전체 또는 부분 패키지 이름이나 정확한 레시피로 검색하려면 conan search 명령을 실행합니다.
-
특정 패키지 이름의 모든 패키지를 검색하려면:
conan search hello --remote=gitlab -
he로 시작하는 모든 패키지와 같이 부분 이름으로 검색하려면:conan search "he*" --remote=gitlab
검색 범위는 Conan 원격 구성에 따라 다릅니다. 액세스 권한이 있는 한 대상 프로젝트의 모든 패키지가 검색에 포함됩니다.
검색 결과 제한은 500개 패키지이며, 결과는 가장 최근에 게시된 패키지 순으로 정렬됩니다.
패키지를 검색할 때 Conan v2 CLI는 Conan v2로 업로드된 패키지에 대한 패키지 세부 정보만 표시합니다. Conan v1으로 업로드된 패키지는 검색 결과에 표시되지만 세부 정보는 표시되지 않습니다. 이는 Conan v2가 Conan v1으로 업로드된 패키지에 있는 recipe_hash 필드 없이 패키지 참조를 예상하기 때문입니다.
Conan 2 패키지 다운로드#
conan download 명령을 사용하여 설정을 사용하지 않고도 Conan 2 패키지의 레시피와 바이너리를 로컬 캐시에 다운로드할 수 있습니다.
사전 조건:
모든 바이너리 패키지 다운로드#
패키지 레지스트리에서 레시피와 관련된 모든 바이너리 패키지를 다운로드할 수 있습니다.
모든 바이너리 패키지를 다운로드하려면 다음 명령을 실행합니다:
conan download hello/0.1@mycompany/beta --remote=gitlab
레시피 파일 다운로드#
바이너리 패키지 없이 레시피 파일만 다운로드할 수 있습니다.
레시피 파일을 다운로드하려면 다음 명령을 실행합니다:
conan download hello/0.1@mycompany/beta --remote=gitlab --only-recipe
특정 바이너리 패키지 다운로드#
패키지 참조 (Conan 2 문서에서 package_id로 알려진)를 참조하여 단일 바이너리 패키지를 다운로드할 수 있습니다.
특정 바이너리 패키지를 다운로드하려면 다음 명령을 실행합니다:
conan download Hello/0.1@foo+bar/stable:<package_reference> --remote=gitlab
지원되는 CLI 명령#
GitLab Conan 저장소는 다음 Conan 2 CLI 명령을 지원합니다:
conan upload: 레시피 및 패키지 파일을 패키지 레지스트리에 업로드합니다.conan install:conanfile.txt파일 사용을 포함하여 패키지 레지스트리에서 Conan 2 패키지를 설치합니다.conan download: 설정을 사용하지 않고 패키지 레시피 및 바이너리를 로컬 캐시에 다운로드합니다.conan search: 공개 패키지 및 볼 수 있는 비공개 패키지에 대해 패키지 레지스트리를 검색합니다.conan list: 기존 레시피, 리비전 또는 패키지를 나열합니다.conan remove: 패키지 레지스트리에서 패키지를 삭제합니다.
Conan 리비전#
Conan 리비전은 패키지 레지스트리에서 패키지 불변성을 제공합니다. 버전을 변경하지 않고 레시피나 패키지를 변경하면 Conan은 이러한 변경 사항을 추적하기 위한 고유 식별자(리비전)를 계산합니다.
리비전 유형#
Conan은 두 가지 유형의 리비전을 사용합니다:
- 레시피 리비전 (RREV): 레시피가 내보내질 때 생성됩니다. 기본적으로 Conan은 레시피 매니페스트의 체크섬 해시를 사용하여 레시피 리비전을 계산합니다.
- 패키지 리비전 (PREV): 패키지가 빌드될 때 생성됩니다. Conan은 패키지 내용의 해시를 사용하여 패키지 리비전을 계산합니다.
리비전 참조#
다음 형식으로 패키지를 참조할 수 있습니다:
| 참조 | 설명 |
|---|---|
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 "hello/0.1@mycompany/beta#*" --remote=gitlab
여러 리비전을 업로드하면 가장 오래된 것부터 가장 최신 것 순으로 업로드됩니다. 상대적 순서는 레지스트리에 보존됩니다.
리비전 나열#
Conan 2에서 특정 레시피의 모든 리비전을 나열하려면:
conan list "hello/0.1@mycompany/beta#*" --remote=gitlab
이 명령은 지정된 레시피에 대해 사용 가능한 모든 리비전을 리비전 해시 및 생성 날짜와 함께 표시합니다.
특정 리비전에 대한 자세한 정보를 얻으려면:
conan list "hello/0.1@mycompany/beta#revision_hash:*#*" --remote=gitlab
이 명령은 해당 리비전에 사용 가능한 특정 바이너리 패키지 및 패키지 리비전을 표시합니다.
리비전으로 패키지 삭제#
다양한 수준의 세분성으로 패키지를 삭제할 수 있습니다:
특정 레시피 리비전 삭제#
특정 레시피 리비전과 관련된 모든 바이너리 패키지를 삭제하려면:
conan remove "hello/0.1@mycompany/beta#revision_hash" --remote=gitlab
특정 레시피 리비전의 패키지 삭제#
특정 레시피 리비전과 관련된 모든 패키지를 삭제하려면:
conan remove "hello/0.1@mycompany/beta#revision_hash:*" --remote=gitlab
리비전의 특정 패키지 삭제#
레시피 리비전에서 특정 패키지를 삭제하려면 다음을 사용할 수 있습니다:
conan remove "package_name/version@user/channel#revision_hash:package_id" --remote=gitlab
불변 리비전 워크플로우#
리비전은 불변으로 설계됩니다. 레시피나 소스 코드를 수정할 때:
- 레시피를 내보낼 때 새 레시피 리비전이 생성됩니다.
- 이전 레시피 리비전에 속하는 기존 바이너리는 포함되지 않습니다. 새 레시피 리비전을 위한 새 바이너리를 빌드해야 합니다.
- 패키지를 설치할 때 리비전을 지정하지 않으면 Conan 2가 자동으로 최신 리비전을 검색합니다.
패키지 바이너리의 경우 레시피 리비전 및 패키지 참조 (Conan 2 문서에서 package_id로 알려진)당 하나의 패키지 리비전만 포함해야 합니다. 동일한 레시피 리비전 및 패키지 ID에 대한 여러 패키지 리비전은 패키지가 불필요하게 다시 빌드되었음을 나타냅니다.
