패키지 레지스트리의 Conan 1 패키지
GitLab v19.2Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
GitLab의 Conan 패키지 레지스트리는 현재 개발 중이며, 기능이 제한되어 있어 프로덕션 사용에는 준비되지 않았습니다. 프로젝트의 패키지 레지스트리에 Conan 패키지를 게시하세요. 패키지 레지스트리에 Conan 패키지를 게시하려면, 패키지 레지스트리를 원격 저장소로 추가하고 인증을 구성해야 합니다.
Status: Beta
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 | 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 |
프로젝트 원격 저장소는 더 유연한 이름 지정 규칙을 사용합니다.
패키지 레지스트리 인증#
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 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 파일을 사용하여 의존성으로 설치됩니다.
사전 요구 사항:
-
Conan 원격 저장소가 구성되어 있어야 합니다.
-
비공개 및 내부 프로젝트의 경우, 패키지 레지스트리에 대한 인증을 구성해야 합니다.
-
패키지를 의존성으로 설치하려는 프로젝트에서
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이 명령어에는 원격 저장소를 명시적으로 포함해야 합니다. 그렇지 않으면 패키지가 로컬 시스템 캐시에서만 삭제됩니다.
이 명령어는 패키지 레지스트리에서 모든 레시피와 바이너리 패키지 파일을 삭제합니다.
-
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 메타데이터 추출#
- GitLab 17.11에서 일반적으로 사용 가능해짐. 기능 플래그
parse_conan_metadata_on_upload제거됨.
Conan 패키지를 업로드하면 GitLab이 conaninfo.txt 파일에서 메타데이터를 자동으로 추출합니다. 이 메타데이터에는 다음이 포함됩니다:
-
패키지 설정 (
os,arch,compiler,build_type등) -
패키지 옵션
-
패키지 요구 사항 및 의존성
이 기능이 활성화되기 전(GitLab 17.10)에 업로드된 패키지는 메타데이터가 추출되지 않습니다. 이러한 패키지는 일부 검색 및 다운로드 기능이 제한됩니다.
Conan 리비전#
- GitLab 18.3에서 GitLab.com에서 활성화됨. 기능 플래그
conan_package_revisions_support제거됨.
이 기능의 사용 가능 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참조하세요.
Conan 1 리비전은 패키지 레지스트리에서 패키지 불변성을 제공합니다. 버전을 변경하지 않고 레시피나 패키지를 변경하면, Conan이 이러한 변경을 추적하기 위해 고유 식별자(리비전)를 계산합니다.
Conan 1 리비전은 프로젝트에 원격 저장소가 설정된 경우에만 지원되며, 전체 인스턴스에는 지원되지 않습니다.
리비전 유형#
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 문서를 참조하세요.