- Docker 엔진 버전 호환성
- 일반 GitLab Runner Docker 이미지 사용법
- Docker 이미지 설치 및 컨테이너 시작
- 구성 업데이트
- 버전 업그레이드
- GitLab Runner 로그 읽기
- 신뢰할 수 있는 SSL 서버 인증서 설치
- Docker 이미지
- SELinux
컨테이너 내에서 GitLab Runner 실행
이것은 GitLab Runner를 Docker 컨테이너 내에서 실행하는 방법입니다.
Docker 엔진 버전 호환성
일반적으로 Docker 엔진의 버전과 GitLab Runner 컨테이너 이미지의 버전은 일치할 필요가 없습니다. GitLab Runner 이미지는 역방향 및 순방향 호환되어야 합니다. 그러나 최신 기능 및 보안 업데이트를 보장하기 위해 항상 최신 안정적인 Docker 엔진 버전을 사용해야 합니다.
일반 GitLab Runner Docker 이미지 사용법
Ubuntu 또는 Alpine Linux를 기반으로 하는 GitLab Runner Docker 이미지(Ubuntu 또는 Alpine Linux 기반)는 표준 gitlab-runner
명령어를 감싸는 형태로 설계되었습니다. 마치 GitLab Runner가 호스트에 직접 설치된 것처럼 작동합니다.
일반적인 규칙은 아래와 같습니다. 보통 실행되는 모든 GitLab Runner 명령어:
gitlab-runner <runner command and options...>
다음과 같이 실행될 수 있습니다:
docker run <선택한 docker 옵션...> gitlab/gitlab-runner <runner command and options...>
예를 들어, GitLab Runner 명령어의 상위 도움말 정보를 받아오려면 다음과 같이 실행할 수 있습니다:
docker run --rm -t -i gitlab/gitlab-runner --help
NAME:
gitlab-runner - a GitLab Runner
USAGE:
gitlab-runner [global options] command [command options] [arguments...]
VERSION:
16.5.0 (853330f9)
(...)
간단히 말해서, 명령어의 gitlab-runner
부분을 docker run [docker options] gitlab/gitlab-runner
로 대체하고, 나머지 명령어는 등록 문서에 설명된 대로 유지됩니다. 유일한 차이점은 gitlab-runner
명령어가 Docker 컨테이너 내에서 실행된다는 것입니다.
Docker 이미지 설치 및 컨테이너 시작
시작하기 전에 Docker를 설치했는지 확인하세요.
Docker 컨테이너 내에서 gitlab-runner
를 실행하려면, 컨테이너가 다시 시작될 때 구성이 손실되지 않도록 해야 합니다. 이를 위해 아래에 설명된 두 가지 옵션이 있습니다.
GitLab Runner의 가장 일반적인 문제에 대해 설명하는 FAQ 섹션을 반드시 읽어보시기 바랍니다.
-
session_server
를 사용 중이라면,docker run
명령에-p 8093:8093
를 추가하여 포트8093
을 노출해야 합니다. -
Docker Machine executor를 사용하여 자동 확장 기능을 원한다면 Docker Machine 저장 경로
/root/.docker/machine
를 마운트해야 합니다.- 시스템 볼륨 마운트에는
-v /srv/gitlab-runner/docker-machine-config:/root/.docker/machine
를 추가합니다. - Docker 명명된 볼륨에는
-v docker-machine-config:/root/.docker/machine
를 추가합니다.
- 시스템 볼륨 마운트에는
옵션 1: 로컬 시스템 볼륨 마운트를 사용하여 Runner 컨테이너 시작
이 예제는 gitlab-runner
컨테이너에 마운트된 구성 볼륨을 위한 로컬 시스템을 사용합니다. 이 볼륨은 구성 및 기타 리소스에 사용됩니다.
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
/srv
가 존재하지 않습니다. /private/srv
를 생성하거나 다른 비공개 디렉터리를 사용할 수 있습니다.옵션 2: Docker 볼륨을 사용하여 Runner 컨테이너 시작
이 예제에서는 사용자 지정 데이터 볼륨을 마운트하는 구성 컨테이너를 사용할 수 있습니다.
-
Docker 볼륨을 생성합니다:
docker volume create gitlab-runner-config
-
방금 생성한 Docker 볼륨을 사용하여 GitLab Runner 컨테이너를 시작합니다:
docker run -d --name gitlab-runner --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v gitlab-runner-config:/etc/gitlab-runner \ gitlab/gitlab-runner:latest
Runner 등록
마지막 단계는 새 Runner를 등록하는 것입니다. GitLab Runner 컨테이너는 등록되지 않은 경우 어떠한 작업도 수행하지 않습니다.
구성 업데이트
config.toml
에서 구성을 변경하면 변경 사항을 적용하려면 Runner를 재시작해야 할 수 있습니다. config.toml
은 Runner를 구성하는 데 사용하는 구성 파일이며, Runner를 등록할 때 생성됩니다.
gitlab-runner restart
대신 전체 컨테이너를 다시 시작해야 합니다:
docker restart gitlab-runner
버전 업그레이드
최신 버전(또는 특정 태그)을 가져오려면:
docker pull gitlab/gitlab-runner:latest
기존 컨테이너를 중지하고 제거합니다:
docker stop gitlab-runner && docker rm gitlab-runner
원래 한대로 컨테이너를 시작합니다:
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner:latest
-v /srv/gitlab-runner/config:/etc/gitlab-runner
또는 --volumes-from gitlab-runner-config
).GitLab Runner 로그 읽기
GitLab Runner가 전경 작업으로 시작될 때(로컬로 설치된 바이너리일 때 또는 Docker 컨테이너 내부에 있을 때)로그가 표준 출력에 인쇄됩니다. GitLab Runner가 시스템 서비스로 시작될 때(예: Systemd로), 대부분의 경우 로그가 Syslog 또는 기타 시스템 로깅 메커니즘을 통해 로깅됩니다.
GitLab Runner가 Docker 기반 서비스로 시작될 때, 컨테이너의 주요 프로세스인 gitlab-runner ...
명령어로 인해 로그는 docker logs
명령어를 사용하여 읽을 수 있습니다.
예를 들어, GitLab Runner가 다음 명령으로 시작된 경우:
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner:latest
다음과 같은 명령으로 로그를 가져올 수 있습니다:
docker logs gitlab-runner
여기서 gitlab-runner
는 첫 번째 명령어로 --name gitlab-runner
로 설정된 컨테이너의 이름입니다.
컨테이너 로그 처리에 대한 자세한 정보는 Docker 문서 페이지에서 찾을 수 있습니다.
신뢰할 수 있는 SSL 서버 인증서 설치
만약 GitLab CI 서버가 자체 서명된 SSL 인증서를 사용 중이라면, GitLab CI 서버 인증서가 GitLab Runner 컨테이너에 의해 신뢰되도록 해야 합니다. 그렇게 하면 두 서버가 서로 통신할 수 있습니다.
gitlab/gitlab-runner
이미지는 신뢰할 수 있는 SSL 인증서를 /etc/gitlab-runner/certs/ca.crt
에서 찾도록 구성되어 있지만, -e "CA_CERTIFICATES_PATH=/DIR/CERT"
구성 옵션을 사용하여 변경할 수 있습니다.
ca.crt
파일을 데이터 볼륨(또는 컨테이너)의 certs
디렉터리로 복사합니다. ca.crt
파일에는 GitLab Runner가 신뢰해야 하는 모든 서버의 루트 인증서가 포함되어 있어야 합니다. GitLab Runner 컨테이너는 시작 시 ca.crt
파일을 가져오므로, 컨테이너가 이미 실행 중인 경우 변경 사항이 적용되려면 다시 시작해야 할 수 있습니다.
Docker 이미지
다음의 다중 플랫폼 Docker 이미지를 사용할 수 있습니다:
-
gitlab/gitlab-runner:latest
는 Ubuntu를 기반으로 합니다. -
gitlab/gitlab-runner:alpine
은 훨씬 작은 크기의 풋프린트를 가진 Alpine을 기반으로 합니다 (압축해제된 크기: 750 MB Ubuntu 대 340 MB Alpine).
가능한 Ubuntu 및 Alpine 이미지에 대한 빌드 지침은 GitLab Runner 소스를 참조하십시오.
GitLab Runner Docker 이미지 생성
GitLab Runner 16.1부터 Alpine을 기반으로 하는 GitLab Runner Docker 이미지는 Alpine 3.18을 사용합니다. 그러나 GitLab 리포지터리에 이미지가 사용 가능하기 전에 이미지의 OS를 업그레이드할 수 있습니다.
최신 Alpine 버전용 gitlab-runner
Docker 이미지를 빌드하려면:
-
alpine-upgrade/Dockerfile
을 생성합니다.ARG GITLAB_RUNNER_IMAGE_TYPE ARG GITLAB_RUNNER_IMAGE_TAG FROM gitlab/${GITLAB_RUNNER_IMAGE_TYPE}:${GITLAB_RUNNER_IMAGE_TAG} RUN apk update RUN apk upgrade
-
업그레이드된
gitlab-runner
이미지를 생성합니다.GITLAB_RUNNER_IMAGE_TYPE=gitlab-runner GITLAB_RUNNER_IMAGE_TAG=alpine-v16.1.0 docker build -t $GITLAB_RUNNER_IMAGE_TYPE:$GITLAB_RUNNER_IMAGE_TAG --build-arg GITLAB_RUNNER_IMAGE_TYPE=$GITLAB_RUNNER_IMAGE_TYPE --build-arg GITLAB_RUNNER_IMAGE_TAG=$GITLAB_RUNNER_IMAGE_TAG -f alpine-upgrade/Dockerfile alpine-upgrade
-
업그레이드된
gitlab-runner-helper
이미지를 생성합니다.GITLAB_RUNNER_IMAGE_TYPE=gitlab-runner-helper GITLAB_RUNNER_IMAGE_TAG=x86_64-v16.1.0 docker build -t $GITLAB_RUNNER_IMAGE_TYPE:$GITLAB_RUNNER_IMAGE_TAG --build-arg GITLAB_RUNNER_IMAGE_TYPE=$GITLAB_RUNNER_IMAGE_TYPE --build-arg GITLAB_RUNNER_IMAGE_TAG=$GITLAB_RUNNER_IMAGE_TAG -f alpine-upgrade/Dockerfile alpine-upgrade
docker-machine
의존성이 포함되어 있지 않습니다. 현재 상태에 대한 자세한 내용은 이슈를 참조하십시오.SELinux
일부 배포판(CentOS, Red Hat, Fedora)은 기본적으로 SELinux를 사용하여 기본 시스템의 보안을 강화합니다.
이러한 구성을 다룰 때 특별한 주의가 필요합니다.
- 컨테이너에서 빌드를 실행하기 위해 Docker 실행자를 사용하려면
/var/run/docker.sock
에 액세스해야 합니다. 그러나 SELinux가 강제 적용 모드인 경우/var/run/docker.sock
에 액세스할 때Permission denied
오류가 발생합니다. 이 문제를 해결하려면 selinux-dockersock을 설치하십시오. - 호스트에 영속적인 디렉터리가 만들어졌는지 확인합니다:
mkdir -p /srv/gitlab-runner/config
. - 볼륨에
:Z
를 사용하여 Docker를 실행합니다:
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /srv/gitlab-runner/config:/etc/gitlab-runner:Z \
gitlab/gitlab-runner:latest