CI/CD는 이제 조직의 생산성을 위한 필수 요소가 되었다. CI를 구성하기 위해 jenkins, github-actions, gitlab-runner 등이 있다. 이 글에서는 CI를 파이프라인을 구성하기 위한 요소로 gitlab-runner를 등록하는 방법에 대해 작성해보겠다. 여기서는 각 프로젝트 별 Specific runners를 등록하는 방법으로 진행한다.
준비물
1. gitlab 계정과 프로젝트
2. gitlab-runner를 설치할 머신이나 인스턴스 (도커가 설치되어있어야함)
이 글에서의 설치 환경
- ubuntu 20.0.4
인스턴스에 gitlab-runner 설치하기
gitlab-runner를 설치하는 방법에는 여러 가지가 있지만 여기서는 dind (docker in docker) 방식으로 설치한다. 이 방식은 도커 안에서 도커를 실행한다는 의미이다. 도커 안에 도커는 도커 바이너리를 세팅하고 도커 컨테이너 내부에 격리된 데몬을 실행한다. 즉, 도커 데몬이 2개가 실행되는 것이다.
도커 컨테이너 띄우기
아래 명령어로 도커 컨테이너를 띄운다. privileged 옵션을 주는 이유는 도커 안의 도커 데몬을 동작시키기 위한 권한이 필요하기 때문이다. 또한 bind mount 옵션을 주어, docker 안에 docker 컨테이너를 시작할 수 있게 한다.
docker run -d --privileged --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
컨테이너가 잘 등록되었는지 확인하여 아래 명령어를 입력하여 docker container를 확인해보자
docker ps
gitlab-runner 등록하기
도커 컨테이너 안에 진입하여 gitlab-runner를 등록해야 한다.
docker container exec -it gitlab-runner bash
gitlab-runner를 등록하는 방법에는 대화형과 비대화형이 있는데, 여기서는 대화형으로 gitlab-runner를 등록한다. 본격적으로 등록하기 전에 gitlab-runner 정보를 먼저 확인해야 한다.
gitlab-runner register
gitlab-runner 정보 확인하기
gitlab-runner를 설치하려면 우선 gitlab 프로젝트에서 runner를 등록하기 위한 정보를 확인해야 한다.
1. gitlab 프로젝트 > settings > CI/CD에 진입한다.
2. Runners > Expand를 눌러 아래와 같이 runners 정보가 나오게 한다.
3. Specific runners의 2번 URL, registration token을 각각 복사한다.
gitlab-runner 이어서 등록하기
다시 gitlab-runner를 등록하는 과정으로 돌아와서 한 줄 한 줄마다 정보를 등록한다. Gitlab instance URL에는 Specific runners의 URL을 입력하고, registration token에는 Specific runners registration token를 입력한다. 그리고 executor에는 반드시 docker를 입력하여 dind 모드로 running 할 수 있게 한다.
Enter the GitLab instance URL (for example, https://gitlab.com/):
// gitlab URL 입력
Enter the registration token:
// registration token 입력
Enter a description for the runner:
// runner 이름 등록
Enter tags for the runner (comma-separated):
// runner tag 등록
Registering runner... succeeded
Enter an executor: docker-ssh, parallels, shell, virtualbox, docker-ssh+machine, kubernetes, custom, docker, ssh, docker+machine:
docker
Enter the default Docker image (for example, ruby:2.6):
// ci 세팅과 동일한 상태의 이미지 (docker:stable)
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
등록되었는지 알아보기 위해 Specific runners 하단 Available specific runners의 목록이 생성되었는지 확인한다. 사진에서는 상태가 초록불로 나왔는데, 등록만 했으면 아직 run이 되지 않았기 때문에 빨간색으로 상태가 떠야 한다.
CI세팅을 위한 gitlab-runner config.toml 수정하기
여기서 마무리되면 좋지만, CI 세팅을 위해 config.toml을 수정해야 한다. confit.toml은 gitlab-runner의 세팅이 담겨있는 파일이다. config.toml은 gitlab-runner가 설치된 도커 컨테이너 안에 위치한다. 도커 컨테이너에는 vim이 설치되어있지 않기 때문에, 수정을 위해 vim을 설치해야 한다.
sudo apt update
sudo apt install vim
그리고 config.toml을 수정한다.
vi /etc/gitlab-runner/config.toml
수정된 config.toml의 내용은 아래와 같이 된다.
[[runners]]
name = "94e6512c8c68"
url = "https://gitlab.com/"
id = 37
token = "token"
token_obtained_at = 2022-10-11T16:08:22Z
token_expires_at = 0001-01-01T00:00:00Z
executor = "docker"
environment = ["DOCKER_DRIVER=overlay2", "DOCKER_TLS_CERTDIR="]
pre_build_script = "export DOCKER_HOST=tcp://docker:2375"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "docker:stable"
privileged = true // false를 true로 수정 : CI를 돌게하기 위해
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
gitlab-runner 시작하기
아래 명령어를 입력하여 gitlab-runner를 시작시킨다.
gitlab-runner start // 백그라운드에서 gitlab-runner 시작
gitlab-runner run // 현재 세션에서 gitlab-runner 시작
시작을 하면 runner의 상태가 초록불로 바뀐다.
위와 같이 gitlab-runner를 등록한 후, .gitlab-ci.yml 파일을 생성 후 push 하여 CI가 돌 수 있게 하면 된다.
'개발' 카테고리의 다른 글
EC2에 docker 배포 시 디스크 용량 정리 (0) | 2022.10.25 |
---|---|
오류가 난 도커 컨테이너의 내부 파일 수정하기 (0) | 2022.10.24 |
Airflow 로컬에서 세팅하기 (0) | 2022.10.15 |
EC2 인스턴스에 AWS Cloud watch Agent 설치하기 (0) | 2022.10.14 |
AWS OpenSearch mapper_parsing_exception Trouble shooting (0) | 2022.10.12 |