2016-07-08 5 views
6

Gitlab 레지스트리의 이미지를 다른 CI 빌드의 기본 이미지로 사용하려면 어떻게 인증해야합니까?Gitlab 레지스트리의 개인 도커 이미지를 CI의 기본 이미지로 사용

https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#using-a-private-docker-registry에 따르면 먼저 러너 머신에 수동으로 로그인해야합니다. 어떻게 든 기존 Gitlab 사용자와 로그인하는 것이 이상하게 느껴집니다.

Gitlab 레지스트리에서 기본 이미지를 가져 오기위한 인증을 위해 CI 변수 "CI_BUILD_TOKEN"("GitLab 컨테이너 레지스트리로 인증하는 데 사용되는 토큰"으로 설명 됨)을 사용하는 방법이 있습니까?

편집 : 공공 프로젝트의 이미지를 사용할 수 있다는 것을 알게되었습니다. 그렇지만 나는 부두 사업을 공개적으로 만들고 싶지 않습니다.

업데이트 : Gitlab 8.14부터 docker 레지스트리에서 빌드의 도커 이미지를 사용할 수 있습니다. https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#support-for-gitlab-integrated-registry

답변

3

아니요, 현재로서는 어떠한 방식으로도 가능하지 않습니다. GitLab은 기본 이미지에 대한 명시 적 자격 증명을 구현해야하며 가장 직접적이고 올바른 솔루션입니다.

GitLab Runner 컴퓨터에서 docker login해야합니다. 만료되고 프로젝트에 따라 다르기 때문에 gitlab-ci-token을 사용할 수 없으므로 실제로 모든 프로젝트에 하나의 토큰을 사용할 수 없습니다. 자신의 로그인 정보를 사용하는 것은 현재 사용할 수있는 유일한 해결책입니다 (이 문제를 해결하면 행복합니다).

+1

감사합니다. 네가 옳아. 지금은 불가능합니다. 내가 찾은 포인터 : https://gitlab.com/gitlab-org/gitlab-ce/issues/19219 및 https://gitlab.com/gitlab-org/gitlab-ce/issues/19275 –

+0

이에 대한 후속 조치를 위해, (https://gitlab.com/gitlab-org/gitlab-ce/issues/19275)이 기능을 노출시키는 것과 관련된 몇 가지 gitlab 티켓이 있습니다. 그러나, 이것은 지금 백 로그에 앉아있는 것처럼 보입니다. 바라건대, 더 많은 지원으로,이 기능은 팀이 사용자 커뮤니티처럼 중요하다고 식별하는 것입니다. – user376327

4

이제 몇 달 전에 옵션을 포함시킬 수 있습니다.

gitlab-ci-token을 사용자로 사용하고 변수 $CI_BUILD_TOKEN을 암호로 사용하십시오.

이 예제는 GitLab 8.13.6에서 작동합니다. 이 필요한 경우 테스트 이미지를 구축하고, 다음 단계에서 구문 점검을 수행하는 데 사용

build_test: 
    stage: build_test_image 
    script: 
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY 
    - docker build -t $CI_REGISTRY_IMAGE:test -f dockerfiles/test/Dockerfile . 
    - docker push $CI_REGISTRY_IMAGE:test 
    tags: 
    - docker_build 
    environment: test 

test_syntax: 
    image: $CI_REGISTRY_IMAGE:test 
    stage: test 
    script: 
    - flake8 --ignore=E501,E265,E402 . 

UPDATE : 다시 읽고 질문을 허용 대답이 정확합니다. 이 예에서는 사용자가 러너 시스템에서 수동으로 로그인하지 않는 한 작업 test_syntax이 레지스트리에 대한 인증에 실패합니다. 두 주자가 같은 호스트에있는 경우에도 작동 할 수 있지만 어쨌든 최상의 솔루션은 아닙니다.

gitlab-ci-multi-runner 1.8에는 레지스트리 자격증 명을 변수로 추가 할 수있는 옵션이 있으므로 인코딩 된 자격증 명을 얻으려면 한 번만 로그인하면됩니다. documentation을 참조하십시오.

+0

이 작업을 수행하기 위해 사용하는 러너의 유형은 무엇입니까?쉘 러너를 사용하는 경우 GitLab CI는 레지스트리에서 이미지를 가져 오지 않고 대신 이전 단계에서 호스트에 구축 한 이미지를 사용합니다. – BrokenBinary

+0

실제로 나는 2 명의 주자를 사용하고 있습니다. 하나는 쉘 실행 프로그램, 다른 하나는 도커 실행 프로그램입니다. 셸 실행자의 의도 된 사용법은 Docker 이미지를 빌드하는 것입니다. 그래서 나는'docker_build' 태그를 사용하고 있습니다. 'test_syntax' 작업의'image' 지시자와'build_test'의 부족한 부분을 주목하십시오. – charli

0

gitlab 컨테이너 레지스트리에 먼저 로그인해야 사용할 이미지를 사용할 수 있습니다 (아래 예제 참조). 이미지를 사용하기 전에 기본적으로 사용자를 인증하는 before_script:에 주목하십시오.

image: docker:latest 
services: 
- docker:dind 

stages: 
- build 

variables: 
    CONTAINER_RELEASE_IMAGE: registry.gitlab.com/obonyojimmy/node-mono-clr:latest 

before_script: 
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com 

build-app: 
    stage: build 
    image: CONTAINER_RELEASE_IMAGE 
    script: 
    - npm run build 
관련 문제