- API를 사용하여 Composer 패키지 게시
- CI/CD를 사용하여 Composer 패키지 게시
- 동일한 이름 또는 버전으로 패키지 게시
- Composer 패키지 설치
- 문제 해결
- 지원되는 CLI 명령어
패키지 레지스트리의 Composer 패키지
- GitLab 13.2에서 도입되었습니다.
- GitLab Premium에서 GitLab 13.3으로 이동되어 GitLab Free로 이동되었습니다.
- Composer 2.0 지원이 GitLab 13.10에서 추가되었습니다.
- Deploy 토큰 지원이 GitLab 14.6에서 추가되었습니다.
프로젝트의 패키지 레지스트리에 Composer 패키지를 게시하세요. 그런 다음 이를 의존성으로 사용해야 하는 경우 필요할 때 패키지를 설치하십시오.
Composer 클라이언트가 사용하는 특정 API 엔드포인트에 대한 문서는 Composer API 문서를 참조하세요.
Composer v2.0를 권장합니다. Composer v1.0은 지원되지만 매우 많은 패키지가 있는 그룹에서 작업할 때 성능이 떨어집니다.
Composer 패키지를 작성하는 방법을 알아보세요.
API를 사용하여 Composer 패키지 게시
Composer 패키지를 패키지 레지스트리에 게시하여 프로젝트에 액세스할 수 있는 모든 사람이 패키지를 의존성으로 사용할 수 있도록 합니다.
필수 조건:
- GitLab 리포지터리의 패키지입니다. Composer 패키지는 Composer 사양에 따라 버전이 지정되어야 합니다. 버전이 유효하지 않으면 (
1.0.0.0
과 같이 세 개의 점이 있는 경우) 게시할 때 오류(Validation failed: Version is invalid
)가 발생합니다. - 프로젝트 루트 디렉터리에 유효한
composer.json
파일이 있어야 합니다. - GitLab 리포지터리에서 패키지 기능이 활성화되어 있어야 합니다.
- 프로젝트 개요 페이지에 표시된 프로젝트 ID가 있어야 합니다.
- 다음 토큰 유형 중 하나:
개인 액세스 토큰을 사용하여 패키지를 게시하려면:
-
POST
요청을 Packages API로 보냅니다.예:
curl --data tag=<tag> "https://__token__:<personal-access-token>@gitlab.example.com/api/v4/projects/<project_id>/packages/composer"
-
<personal-access-token>
은 개인 액세스 토큰입니다. -
<project_id>
는 프로젝트 ID입니다. -
<tag>
는 게시할 버전의 Git 태그 이름입니다. 브랜치를 게시하려면tag=<tag>
대신branch=<branch>
를 사용합니다.
-
배포 토큰을 사용하여 패키지를 게시하려면:
-
POST
요청을 Packages API로 보냅니다.예:
curl --data tag=<tag> --header "Deploy-Token: <deploy-token>" "https://gitlab.example.com/api/v4/projects/<project_id>/packages/composer"
-
<deploy-token>
은 배포 토큰입니다. -
<project_id>
는 프로젝트 ID입니다. -
<tag>
는 게시할 버전의 Git 태그 이름입니다. 브랜치를 게시하려면tag=<tag>
대신branch=<branch>
를 사용합니다.
-
Deploy > Package Registry로 이동하여 게시된 패키지를 확인할 수 있습니다.
CI/CD를 사용하여 Composer 패키지 게시
CI/CD 프로세스의 일환으로 Composer 패키지를 패키지 레지스트리에 게시할 수 있습니다.
-
.gitlab-ci.yml
파일에CI_JOB_TOKEN
을 지정하세요:stages: - deploy deploy: stage: deploy script: - apk add curl - 'curl --header "Job-Token: $CI_JOB_TOKEN" --data tag=<tag> "${CI_API_V4_URL}/projects/$CI_PROJECT_ID/packages/composer"' environment: production
-
파이프라인을 실행합니다.
게시된 패키지를 보려면 Deploy > Package Registry로 이동하여 Composer 탭을 선택합니다.
CI/CD 템플릿 사용
.gitlab-ci.yml
템플릿으로 더 자세한 Composer CI/CD 파일도 사용할 수 있습니다:
- 왼쪽 사이드바에서 프로젝트 개요를 선택합니다.
- 파일 디렉터리 위에서 CI/CD 설정을 선택합니다. 이 버튼을 사용할 수 없는 경우 CI/CD 구성을 선택한 다음 편집을 선택합니다.
- 템플릿 적용 디렉터리에서 Composer를 선택합니다.
동일한 이름 또는 버전으로 패키지 게시
게시할 때:
- 동일한 패키지에 다른 데이터를 게시하면 기존 패키지가 덮어씁니다.
- 동일한 패키지에 동일한 데이터를 게시하면
400 Bad request
오류가 발생합니다.
Composer 패키지 설치
- GitLab 14.10에서 패키지 아카이브를 다운로드 할 수 있는 권한이 도입되었습니다.
패키지 레지스트리에서 패키지를 설치하여 이를 의존성으로 사용할 수 있습니다.
필수 조건:
- 패키지가 패키지 레지스트리에 있어야 합니다.
- 패키지 레지스트리가 패키지를 게시하는 프로젝트에서 활성화되어 있어야 합니다.
- 그룹의 홈 페이지에 있는 그룹 ID가 있어야 합니다.
- 다음 토큰 유형 중 하나:
- (최소한)
api
범위로 설정된 개인 액세스 토큰. -
read_package_registry
,write_package_registry
, 또는 둘 다의 범위로 설정된 배포 토큰. - CI/CD 작업 토큰.
- (최소한)
패키지를 설치하려면:
-
패키지 레지스트리 URL, 패키지 이름 및 설치하려는 버전을 프로젝트의
composer.json
파일에 추가하세요:- 그룹에 대한 패키지 레지스트리에 연결합니다:
composer config repositories.<group_id> composer https://gitlab.example.com/api/v4/group/<group_id>/-/packages/composer/packages.json
- 필요한 패키지 버전을 설정합니다:
composer require <package_name>:<version>
composer.json
파일에 결과:{ ... "repositories": { "<group_id>": { "type": "composer", "url": "https://gitlab.example.com/api/v4/group/<group_id>/-/packages/composer/packages.json" }, ... }, "require": { ... "<package_name>": "<version>" }, ... }
이 명령을 사용하여 설정을 취소할 수 있습니다:
composer config --unset repositories.<group_id>
-
<group_id>
는 그룹 ID입니다. - 패키지 이름은 패키지의
composer.json
파일에서 정의된 이름입니다. - 버전은 패키지 버전입니다.
-
GitLab 자격 증명이 포함된
auth.json
파일을 만드세요:개인 액세스 토큰을 사용하는 경우:
composer config gitlab-token.<DOMAIN-NAME> <personal_access_token>
auth.json
파일에 결과:{ ... "gitlab-token": { "<DOMAIN-NAME>": "<personal_access_token>", ... } }
배포 토큰을 사용하는 경우:
composer config gitlab-token.<DOMAIN-NAME> <deploy_token_username> <deploy_token>
auth.json
파일에 결과:{ ... "gitlab-token": { "<DOMAIN-NAME>": { "username": "<deploy_token_username>", "token": "<deploy_token>", ... } }
CI/CD 작업 토큰을 사용하는 경우:
composer config -- gitlab-token.<DOMAIN-NAME> gitlab-ci-token "${CI_JOB_TOKEN}"
auth.json
파일에 결과:{ ... "gitlab-token": { "<DOMAIN-NAME>": { "username": "gitlab-ci-token", "token": "<ci-job-token>", ... } }
이 명령을 사용하여 설정을 취소할 수 있습니다:
composer config --unset --auth gitlab-token.<DOMAIN-NAME>
-
<DOMAIN-NAME>
은 GitLab 인스턴스 URL인gitlab.com
또는gitlab.example.com
입니다. -
api
범위로 설정된<personal_access_token>
또는read_package_registry
및/또는write_package_registry
범위로 설정된<deploy_token>
을 사용합니다.
-
-
GitLab Self-managed 인스턴스인 경우
composer.json
에gitlab-domains
을 추가하세요.composer config gitlab-domains gitlab01.example.com gitlab02.example.com
composer.json
파일에 결과:{ ... "repositories": [ { "type": "composer", "url": "https://gitlab.example.com/api/v4/group/<group_id>/-/packages/composer/packages.json" } ], "config": { ... "gitlab-domains": ["gitlab01.example.com", "gitlab02.example.com"] }, "require": { ... "<package_name>": "<version>" }, ... }
이 명령을 사용하여 설정을 취소할 수 있습니다:
composer config --unset gitlab-domains
GitLab.com에서는 Composer가 기본적으로auth.json
의 GitLab 토큰을 비공개 토큰으로 사용합니다.composer.json
에서gitlab-domains
정의가 없으면 Composer는 기본적으로 GitLab 토큰을 기본 인증으로 사용하는데, 토큰이 유저이름으로 사용되고 비밀번호는 비어 있는 상태입니다. 결과적으로 401 오류가 발생합니다. -
composer.json
및auth.json
파일을 구성한 후 다음을 실행하여 패키지를 설치할 수 있습니다:composer update
또는 단일 패키지를 설치하려면:
composer req <package-name>:<package-version>
auth.json
파일을 리포지터리에 커밋하지 마십시오. CI/CD 작업에서 패키지를 설치하려면 액세스 토큰을 GitLab CI/CD 변수 또는 HashiCorp Vault에 저장하는 composer config
도구를 사용하는 방법을 고려하십시오.소스로부터 설치하기
Git 리포지터리를 직접 끌어와서 소스로부터 설치할 수 있습니다. 이를 위해 다음 중 하나를 사용하세요:
-
--prefer-source
옵션을 사용합니다:composer update --prefer-source
-
composer.json
에서config
키 아래의preferred-install
필드를 사용합니다(링크):{ ... "config": { "preferred-install": { "<package name>": "source" } } ... }
SSH 액세스
- GitLab 16.4에 도입되었으며, 기본적으로
composer_use_ssh_source_urls
라는 플래그가 있습니다. 기본적으로 비활성화됩니다.- Self-managed에서 활성화되었습니다. GitLab 16.5 이후.
플래그:
Self-managed GitLab에서는 기본적으로 이 기능을 사용할 수 있습니다. 프로젝트 단위로 기능을 숨기려면 관리자가 composer_use_ssh_source_urls
라는 피처 플래그를 비활성화할 수 있습니다. GitLab.com 및 GitLab Dedicated에서 이 기능을 사용할 수 있습니다.
소스로부터 설치하는 경우, composer
는 프로젝트의 Git 리포지터리로의 접근을 구성합니다. 프로젝트의 가시성에 따라 액세스 유형이 다릅니다:
- 공개 프로젝트의 경우
https
Git URL이 사용됩니다. HTTPS로 리포지터리 복제할 수 있는지 확인하세요. - 내부 또는 비공개 프로젝트의 경우
ssh
Git URL이 사용됩니다. SSH로 리포지터리 복제할 수 있는지 확인하세요.
SSH 키를 사용하여 CI/CD 작업에서 ssh
Git URL에 액세스할 수 있습니다.
배포 토큰 사용하기
Composer 패키지는 그룹 수준에서 액세스되지만, 그룹 또는 프로젝트 배포 토큰을 사용해 액세스할 수 있습니다:
- 그룹 배포 토큰은 해당 그룹이나 하위 그룹의 프로젝트에 발행된 모든 패키지에 액세스할 수 있습니다.
- 프로젝트 배포 토큰은 해당 프로젝트에 발행된 패키지에만 액세스할 수 있습니다.
문제 해결
캐싱
성능을 향상시키기 위해 Composer는 패키지 관련 파일을 캐시에 저장합니다. Composer는 자체적으로 데이터를 제거하지 않습니다. 새 패키지가 설치될수록 캐시가 증가합니다. 문제가 발생하면 다음 명령으로 캐시를 지울 수 있습니다.
composer clearcache
composer install
사용 시 인증 요구사항
GitLab 14.9 이전에는 생성된 composer.lock
이 있으면 composer install
에 대한 인증이 필요하지 않았습니다. composer.lock
을 커밋했다면 자격 증명을 설정하지 않고 CI에서 composer install
을 수행할 수 있었습니다.
GitLab 14.10 이후에는 패키지 아카이브 다운로드 엔드포인트를 사용할 때 인증이 필요합니다. composer install
을 사용하는 동안 자격 증명 프롬프트가 표시되는 경우 composer 패키지 설치 섹션의 지침을 따라 auth.json
파일을 만듭니다.
The file composer.json was not found
로 게시가 실패하는 경우
The file composer.json was not found
라는 오류가 표시될 수 있습니다.
이 문제는 패키지 게시를 위한 구성 요구 사항이 충족되지 않았을 때 발생합니다.
해당 오류를 해결하려면 프로젝트 루트 디렉터리에 composer.json
파일을 커밋하세요.
지원되는 CLI 명령어
GitLab Composer 리포지터리에서는 다음과 같은 Composer CLI 명령어를 지원합니다:
-
composer install
: Composer 의존성 설치 -
composer update
: Composer 의존성의 최신 버전 설치