댓글 검색 목록

[php] GitLab을 사용하는 Private Composer 저장소

페이지 정보

작성자 운영자 작성일 20-08-21 12:17 조회 886 댓글 0

GitLab은 NPM, Maven, Go와 같은 다양한 언어의 패키지 관리자를 위한 무료 패키지 저장소를 제공합니다. 최신 GitLab 버전 13.2는 Composer 패키지 레지스트리에 대한 지원을 추가합니다.


https://php.watch/articles/composer-gitlab-repositories 


GitLab을 사용하면 이제 GitLab에서 호스팅 되는 Git 리포지토리에 대한 자체 비공개 Composer 리포지토리를 가질 수 있습니다. 호스팅 된 GitLab.com을 사용하는 사용자와 GitLab을 자체 호스팅 하는 사용자를 위해 모두 무료입니다.


Composer가 저장소를 사용하는 방법 

packagist.org는 Composer의 기본 저장소입니다. 달리 비활성화 하지 않는 한 Composer는 packagist.org에서 패키지를 검색합니다. Packagist 계정이 있고 Packagist에 Git 리포지토리를 추가하고 웹훅을 사용하는 모든 사용자는 Packagist가 주어진 패키지에 사용할 수 있는 최신 버전 목록을 유지합니다.


Composer는 사용자 지정 저장소 추가를 지원합니다. Composer는 구성된 리포지토리에서도 패키지를 조회합니다.


Composer 2필터, 표준 리포지토리 및 우선 순위를 사용하여 미세 조정 사용자 지정 리포지토리를 지원합니다. 


VCS 및 경로 저장소 


디스크의 로컬 경로 또는 버전 제어 시스템 (예 : Git)의 URL을 기본 composer.json 파일에 추가 할 수 있으며 Composer는 해당 경로 및 URL에서 사용 가능한 버전을 조회합니다.


{
    "repositories": [
        {"type": "vcs", "url": "https://github.com/example/lib-example"},
        {"type": "path", "url": "../../packages/my-package"}
    ]
}

패키지가 요청되면 Composer는 이제 구성된 VCS 및 경로 위치에서 패키지 버전을 찾습니다.


Composer는 사용 가능한 버전을 확인하고 각 버전의 composer.json 파일을 확인하기 위해 리포지토리에 대한 많은 데이터를 로드 해야 하기 때문에 종종 매우 느립니다.


아티팩트 및 개별 패키지 


Composer는 원격 위치 내에서 Zip 파일을 조회하는 기능도 제공합니다 (Zip 아티팩트를 생성하는 CI 빌드 시스템에 유용함). composer.json 파일 자체 내에서 패키지를 선언하고 Composer가 가져올 특정 URL을 가리킬 수도 있습니다. 이러한 임시 패키지에는 자체 composer.json 파일도 포함될 필요가 없습니다.


아티팩트와 개별 패키지는 Composer 리포지토리 또는 VCS / 경로 리포지토리만큼 널리 사용되지 않으며 이 기사를 완료하기 위해서만 언급됩니다.


Composer 저장소 


Composer는 사용자 정의 Composer 리포지토리에서도 작동 할 수 있습니다. packagist.org는 기본 저장소이지만 사용자 정의 저장소가 REST API Composer와 통신을 구현하는 한 Composer는 사용자 정의 저장소에서 패키지를 검색하고 다운로드 할 수 있습니다.


Composer 프로젝트 제작자의 Packagist.com은 아마도 가장 인기 있는 상용 서비스 일 것입니다.


오픈 소스 대안에는 Composer 프로젝트의 Satis 및 다양한 프로젝트 별 리포지토리가 포함됩니다.


{
    "repositories": [
        {"type": "composer", "url": "https://example.com"}
    ]
}

사용자 지정 작성기 저장소를 사용하면 Composer는 저장소 URL을 쿼리하여 패키지를 찾고 저장소가 패키지 다운로드 수를 유지하려는 경우 패키지가 다운로드 되면 API를 호출 할 수 있습니다.


Composer 저장소를 사용하는 것은 패키지 정보를 조회하는 더 깨끗한 API와 패키지 및 패키지 정보에 대한 세분화 된 액세스를 제공하므로 개인 패키지를 호스팅하고 사용하는 가장 빠르고 안전한 방법입니다.


GitLab의 Private composer 저장소 


GitLab은 무료 계획으로 무료 무제한 개인 저장소와 CI / CD 플랫폼을 제공합니다. 최근 무료 버전에 패키지 저장소가 추가됨에 따라 이제 Composer 사용자는 개인 Composer 저장소를 쉽게 실행할 수 있습니다.


비공개 Composer 저장소를 사용하여 PHP Composer 패키지 모음을 만들고 Composer가 GitLab 패키지 저장소에서 다운로드하도록 할 수 있습니다. 이렇게 하면 UI를 사용하여 패키지를 쉽게 보고 UI에서 삭제할 수 있습니다.


유의해야 할 몇 가지 사항 :


  • 패키지 및 패키지 버전은 API를 통해 게시되어야 합니다. 패키지 및 버전을 생성하기 위한 UI가 없습니다. 패키지 및 해당 버전은 브라우저 UI에서 보고 삭제할 수 있습니다.
  • 패키지를 게시하려면 개인 액세스 토큰이 필요합니다.
  • GitLab CI를 사용하여 새 Git 태그를 패키지 레지스트리에 자동으로 게시합니다.
  • 개인 Composer 저장소에 액세스하려면 개인 액세스 토큰이 필요합니다.

1. 프로젝트 그룹 생성 


아직 없는 경우 새 프로젝트 그룹을 만듭니다. 프로젝트 그룹 아래에 게시 된 모든 프로젝트는 Composer 저장소에서 사용할 수 있습니다.


생성되면 그룹에 주어진 숫자 그룹 ID가 있음을 알 수 있습니다. 이 ID는 저장소 URL에서 사용되어 그룹 내의 모든 패키지가 동일한 URL을 공유하게 합니다.


GitLab group group ID 


2. 그룹 아래에 프로젝트 만들기 


프로젝트 그룹이 생성되면 이제 새로 생성 된 그룹 아래에 프로젝트를 생성 할 수 있습니다. 이미 프로젝트 그룹과 프로젝트 ID가있는 경우 이 단계를 건너 뛸 수 있습니다.


3. 패키지 레지스트리 활성화 


프로젝트 설정 → 일반 페이지에서 가시성, 프로젝트 기능, 권한에서 "파이프 라인"및 "패키지"기능을 활성화하십시오.


Enable Packages feature in GitLab package registry 


4. 게시 할 개인 액세스 토큰 만들기 


패키지를 게시하려면 사용자가 패키지 레지스트리에 대해 인증되어야 합니다. 그룹에 대한 액세스 권한이 있는 사용자 계정에서 개인 액세스 토큰을 만듭니다.


Create a Personal Access Token 


적절한 이름을 입력하고 선택적으로 만료 날짜를 입력합니다. 범위에서 api 액세스 권한을 부여하십시오.


5. 마스크 된 CI 변수로 개인 액세스 토큰 추가 


프로젝트 설정 → CI / CD 페이지에서 변수 아래에 새 변수를 추가합니다. 이 변수는 GitLab CI에서 패키지를 자동으로 게시하는 데 사용됩니다.


Create a Personal Access Token 


"마스크 변수"를 활성화하십시오. 이렇게 하면 CI 로그에서 토큰이 숨겨집니다. 릴리스 또는 태그 패턴에 대해 엄격한 보호 분기를 사용하지 않는 한 "변수 보호"옵션을 비활성화 하십시오.


이 예에서는 다음 단계에서 호출하는 DEPLOY_TOKEN 키를 사용합니다.


6. 버전을 자동으로 게시하는 GitLab CI 작업 


GitLab 패키지 기능은 각 Git 태그를 버전에 자동으로 게시하지 않습니다. Composer 호환 버전을 만들 수 있는 사용자 인터페이스도 없습니다.


GitLab은 특정 버전 또는 브랜치로 패키지를 게시하기 위해 호출 할 수 있는 API 엔드 포인트를 제공합니다. GitLab은 또한 Composer 패키지의 새 버전을 GitLab 패키지 레지스트리에 게시하는 데 사용할 수 있는 무료 CI / CD 플랫폼을 제공합니다.


아직 없는 경우 Git 저장소 루트에 이름이 .gitlab-ci.yml 인 새 파일을 만듭니다 (파일 이름의 시작 부분에 있는 점에 유의).


deploy_composer:
  only:
    - tags
  stage: test
  script:
    - curl -sS --show-error --fail --data tag=${CI_COMMIT_TAG} "https://__token__:${DEPLOY_TOKEN}@gitlab.com/api/v4/projects/${CI_PROJECT_ID}/packages/composer"

이것은 지나치게 단순화 된 예이지만 약간 더 완전한 GitLab CI .gitlab-ci.yml 파일은 다음과 같습니다.


stages:
  - test
  - deploy

test:
  stage: test
  image: phpwatch/docker-php:latest
  before_script:
    - php -v
    - composer install --prefer-dist -q --no-progress
  script:
    - ./vendor/bin/phpunit -v --coverage-text --colors=never --stderr

deploy_composer:
  only:
    - tags
  stage: deploy
  script:
    - curl -sS --show-error --fail --data tag=${CI_COMMIT_TAG} "https://__token__:${DEPLOY_TOKEN}@gitlab.com/api/v4/projects/${CI_PROJECT_ID}/packages/composer"

배포 단계에서 실행되는 deloy_composer 단계에서 (이러한 테스트가 성공했음을 의미 함) POST에 대한 curl 호출을 GitLab 패키지 API에 발행하여 새로 생성 된 태그를 게시합니다. only : [tags] 절은 표준 커밋 푸시, 병합 요청 등과 같은 다른 이벤트에 대해 이 API를 호출하지 않도록 합니다.


$ {DEPLOY_TOKEN} 값은 이전 단계에서 설정 한 CI 환경 변수입니다. 유효한 composer.json 파일이 있는 경우 GitLab은 새 패키지 버전을 만들고 201 응답을 반환합니다. 위의 스니펫을 사용하는 경우 CI 작업은 GitLab이 새 태그를 수락 한 경우에만 성공합니다.


7. 게시 된 패키지 나열 


게시 된 패키지는 패키지 및 레지스트리 → 패키지 레지스트리 페이지에서 보고 삭제할 수 있습니다.


Packages Registry - Listing 



GitLab 프라이빗 리포지토리를 사용하는 방법 


GitLab 개인 작성기 저장소에서 호스팅 되는 패키지를 사용하는 것은 간단합니다.


composer 저장소로 개인 저장소 추가 


새 비공개 Composer 저장소를 루트 composer.json 파일에 추가 할 수 있습니다.


{
    "repositories": [
        {
            "type": "composer",
            "url": "https://gitlab.com/api/v4/group/<GROUP_ID>/-/packages/composer/packages.json"
        }
    ]
}

<GROUP_ID> 값은 프로젝트가 속한 그룹 ID입니다. 1 단계 : 프로젝트 그룹 만들기의 스크린 샷을 참조하십시오.


또는 이미 게시 된 패키지로 이동할 수 있으며 패키지 사용 지침이 페이지 끝에 표시됩니다.


View package 


개인 저장소 인증 


Composer가 새 개인 패키지 저장소를 사용하려면 먼저 인증을 받아야 합니다.


이는 Composer에서 지원하는 기본 인증을 통해 수행 할 수 있습니다.


이를 위해 개인 액세스 토큰이 사용됩니다. 4 단계 : 게시 할 개인 액세스 토큰 만들기를 참조하십시오. 이상적으로는 api 액세스가 아닌 read_repository 액세스가 있는 액세스 토큰을 사용하십시오. API 토큰은 읽기 / 쓰기이며 패키지를 게시하는 데 사용할 수 있습니다.


개인 액세스 토큰은 Git 저장소에 커밋 되지 않아야 합니다. 전역 auth.json, git 무시 된 로컬 auth.json 파일 또는 COMPOSER_AUTH 환경 변수를 사용하여 액세스 자격 증명을 삽입합니다. 


{
    "http-basic":  {
        "gitlab.com":  {
            "username":  "___token___",
            "password":  "<ACCESS_TOKEN>"
        }
    }
}
  • __TOKEN__은 GitLab이 API 호출에 사용할 것으로 예상하는 특수 사용자 이름입니다. 이것을 변경하지 마십시오.
  • <ACCESS_TOKEN>을 유효한 개인 액세스 토큰으로 바꿉니다.

명령 줄에서도 이 구성을 만들 수 있습니다.


프로젝트 별 구성 (.gitignore 파일에 auth.json 추가 확인) :


composer config http-basic.gitlab.com ___token___ <ACCESS_TOKEN>

글로벌 구성 :


composer g config http-basic.gitlab.com ___token___ <ACCESS_TOKEN>

권장되지는 않지만 composer.json 파일 자체에도 자격 증명을 포함 할 수 있습니다.


{
    "repositories": [
        {
            "type": "composer",
            "url": "https://___token___:<ACCESS_TOKEN>@gitlab.com/api/v4/group/<GROUP_ID>/-/packages/composer/packages.json"
        }
    ]
}


  • <GROUP_ID>를 그룹 ID (1 단계에서)로 바꿉니다.
  • <ACCESS_TOKEN>을 "개인"액세스 토큰으로 바꿉니다.

composer.json 파일에 개인 토큰을 포함하지 않는 것이 좋습니다. Composer가 auth.json 자격 증명으로 GitLab에 인증하는 데 문제가 있는 것 같습니다. 이 게시물은 수정되면 업데이트 됩니다.


GitLab 패키지 리포지토리는 Packagist.com의 대안으로 조직을 위한 무료 Composer 리포지토리를 제공합니다 (이는 훨씬 더 많은 기능과 packagist.org 리포지토리로 프록시도 제공함). 자체 호스팅 옵션에 비해 설정 및 실행이 쉽습니다.


개인 무료 계정의 경우 패키지 레지스트리 저장 용량은 500MB로 제한됩니다. 이 한도는 전체 계정에 적용됩니다. 오픈 소스 패키지는 무료입니다. 패키지 파일 자체는 레지스트리 (npmjs.org-akin)에 저장됩니다. .gitattributes 파일을 export-ignore 규칙과 함께 사용하여 불필요한 파일이 저장된 zip 파일로 패키징 되지 않도록 제외하는 것을 고려하십시오.


GitHub는 패키지 레지스트리 기능도 제공하지만 Composer를 지원하지 않습니다 (아직?).



댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.