앞서 구성한 docker compose에 Gitlab-runner를 추가 하겠습니다.
├─ nginx
│ ├─ config
│ │ ├─ gitlab.conf
│ │ ├─ minio.conf
│ │ └─ nexus.conf
│ └─ nginx.conf
└─ docker-compose.yml # this!
Gitlab runner 의 docker images는 아래 링크에서 확인할 수 있습니다.
docker compose에 gitlab-runner 구성을 추가합니다.
# ./docker-compose.yml
services:
(...중략...)
gitlab-runner:
image: gitlab/gitlab-runner:v15.5.0
container_name: gitlab-runner
restart: always
volumes:
- type: bind
source: /var/run/docker.sock
target: /var/run/docker.sock
- type: bind
source: ./gitlab-runner
target: /etc/gitlab-runner
networks:
docker-host:
ipv4_address: 172.20.0.11
docker-compose.yml이 존재하는 위치에서 아래 명령을 실행합니다.
$ docker-compsoe up -d gitlab-runner
실행이 완료 되면 아래와 같이 에러 로그가 계속 되는데 gitlab 연결 설정이 되지 않았기 때문에 정상입니다.
$ docker logs -f gitlab-runner
Runtime platform arch=amd64 os=linux pid=8 revision=0d4137b8 version=15.5.0
Starting multi-runner from /etc/gitlab-runner/config.toml... builds=0
Running in system-mode.
Configuration loaded builds=0
listen_address not defined, metrics & debug endpoints disabled builds=0
[session_server].listen_address not defined, session endpoints disabled builds=0
ERROR: Failed to load config stat /etc/gitlab-runner/config.toml: no such file or directory builds=0
ERROR: Failed to load config stat /etc/gitlab-runner/config.toml: no such file or directory builds=0
gitlab runner 연결에 대한 내용은 공식 문서가 잘 성명하고 있으니 먼저 살펴 보시는게 좋겠습니다.
(2022-22-01 추가) 링크를 확인 하기 위해 들어가 봤는데 15.6 부터 token을 통한 등록 방식을 지원하지 않고 16 부터는 제거 할 예정이라고 합니다. Gitlab 버전을 올리게 되면 문서를 업데이트 해야겠네요..
Gitlab에 runner를 연결하기 위해 registration token을 확인합니다.
admin > runners > Registration token
다시 콘솔로 돌아가서 앞서 실행했던 runner 컨테이너로 접속합니다.
$ docker exec -itu 0 gitlab-runner bash
root@sandbox-gitlab-runner:/#
register를 통해 등록합니다.
root@gitlab-runner:/# gitlab-runner register
Runtime platform arch=amd64 os=linux pid=41 revision=0d4137b8 version=15.5.0
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://gitlab/
Enter the registration token:
change_me
Enter a description for the runner:
[sandbox-gitlab-runner]:
Enter tags for the runner (comma-separated):
Enter optional maintenance note for the runner:
Registering runner... succeeded runner=mSwVo29q
Enter an executor: docker-ssh, parallels, shell, ssh, docker-ssh+machine, custom, docker, virtualbox, docker+machine, instance, kubernetes:
docker
Enter the default Docker image (for example, ruby:2.7):
docker:20.10.18
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"
완료 된 후 gitlab을 보면 등록된 runner를 확인할 수 있습니다.
그리고 docker-compose.yml이 존재하는 디렉토리를 확인 해 보면 runner 폴더와 함께 설정 파일이 생성된 것도 확인 할 수 있습니다. 이 파일을 변경하여 runner 설정을 변경 할 수 있습니다.
├─ nginx
│ ├─ config
│ │ ├─ gitlab.conf
│ │ ├─ minio.conf
│ │ └─ nexus.conf
│ └─ nginx.conf
├─ gitlab-runner
│ └─ config.toml # this!
└─ docker-compose.yml
# ./gitlab-runner/config.toml
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "gitlab-runner"
url = "http://gitlab/"
id = 1
token = "token"
token_obtained_at = 2022-12-01T01:43:34Z
token_expires_at = 0001-01-01T00:00:00Z
executor = "docker"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "docker:20.10.18"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
config.toml을 변경하여 캐시 구성을 하겠습니다. 지금 설정하는 캐시는 ci 과정에서 발생되는 파일들을 캐시 서버에 보관하여 동일한 프로젝트의 CI 단계에서 원격 라이브러리 저장소에 접속하여 다운 받는 횟수를 최소화하 하여 수행 시간을 줄이기 위함입니다.
아래 설정과 같이 편집해 줍니다.
[runners.cache.s3] 의 AccessKey, SecretKey, BucketName은 아래 문서의 Bucket 생성을 확인해 주세요.
# ./gitlab-runner/config.toml
[[runners]]
[runners.cache]
Type = "s3"
Shared = true
[runners.cache.s3]
ServerAddress = "minio.domain.com"
AccessKey = "change_me"
SecretKey = "change_me"
BucketName = "private-gitlab-ci"
Insecure = true
[runners.docker]
privileged = true
disable_cache = true # runner volume cache 비활성화
# volumes = ["/cache"] <- 제거 하거나 주석처리, runner volume cache 비활성화
앞서 nexus에 구성한 docker container registry의 인증 정보를 runners.environment에 추 가합니다. 생성 방법은 아래 링크를 통해 확인 가능합니다.
https://docs.gitlab.com/ee/ci/docker/using_docker_images.html
먼저 아래 명령줄을 통해 Docker에 login 합니다.
$ docker login registry.nexus.domain.com --username change_me --password change_me
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
로그인에 성공한다면 해당 계정정보(username:password)를 Base64로 인코딩 합니다.
$ printf "my_username:my_password" | openssl base64 -A
<base64 encoded output>
이 문자열을 가지고 아래와 같은 json 구조를 만들어 주세요.
{
"auths": {
"registry.nexus.doamin.com": {
"auth": "<base64 encoded output>"
}
}
}
그리고 그 json 문자열을 아래와 같이 runners.environment에 추가합니다.
# ./gitlab-runner/config.toml
[[runners]]
environment = ["DOCKER_AUTH_CONFIG={\"auths\":{\"registry.nexus.domain.com\":{\"auth\":\"<base64 encoded output>\"}}}"]
변경한 설정을 gitlab-runner에 적용 시킵니다.
$ docker restart gitlab-runner
작성된 코드는 아래 Repository에 올려두었습니다.
다음은 Gitlab에 프로젝트를 생성하고 spring boot application을 올린 뒤 gitlab-ci를 구성하겠습니다.