네. 지난 1, 2편을 통해 구현과 도커 배포까지 마쳤는데요. 2편에서 예고한 대로 main branch에 push 발생 시 자동으로 도커 재배포하는 파이프라인을 구성했던 내용을 공유하고자 합니다!

1. gitlab-ci.yml
프로젝트 루트 경로에 .gitlab-ci.yml
파일을 만들어 주어야 합니다.
그러면 GitLab에서는 해당 파일을 읽고 그에 맞는 작업을 GitLab Runner에게 할당해 주거든요! (자세한 내용은 아래에서)
stages:
- deploy
deploy-to-server:
stage: deploy
only:
- main
script:
- echo "📦 Deploy 시작"
- ./run-notion-automation.sh
tags:
- deploy
- stages: 전체 파이프라인의 단계(stage)를 정의, 여기선 오직 배포(deploy) 목적
- deploy-to-server: 실제로 실행될 Job 이름
- stage: deploy: 이 Job이 어떤 단계에서 실행될지 지정
- only: - main -> main 브랜치에서 push 될 때만 실행
- script: 실제 실행할 명령어
- run-notion-automation.sh은 제가 프로젝트 루트에 작성해 둔 도커 재배포 쉘 스크립트 파일입니다.
- 실행 중인 도커 이미지가 있다면 중지하고, 새로 빌드하여 시작합니다.
- tags: - deploy -> 이 Job을 실행할 GitLab Runner에 붙어있는 태그랑 매칭돼야 함
- 이 내용은 아래 GitLab Runner 부분에서 추가 설명이 있습니다.
이렇게 하면 프로젝트에서 진행해야 하는 내용은 끝났습니다. 간단하죠?
필요에 맞게 stages를 수정한다거나 대상 브랜치를 변경하는 등 다방면으로 커스텀 가능할 것 같습니다.
2. GitLab Runner
Tip
GitLab Runner란?
GitLab CI/CD에서 .gitlab-ci.yml을 실제로 실행해 주는 녀석
GitLab Runner - Registration URL과 Token 가져오기


위 경로를 찾아 들어가면 Runners 항목이 있고 여기서 확인해야 할 부분은 Project runners 항목입니다.
이미지엔 보안을 위해 모자이크 되었지만 URL과 Token을 확인할 수 있습니다.
이 점을 인지하고 GitLab이 배포되어 있는 서버에 SSH 접속을 해줍니다.
GitLab Runner Register
해당되는 서버에 접속됐다고 가정하고 GitLab Runner Register를 진행합니다.
이 글에서 서버는 리눅스 기준으로 작성되었습니다.
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
sudo apt install gitlab-runner
우선, gitlab-runner
를 설치해 줍니다.
sudo gitlab-runner register
- Enter the GitLab instance URL: {Registration URL}
- Enter the registration token: {Registration Token}
- Enter a description for the runner: "이 러너에 대한 설명(이름)"
- Enter tags for the runner (comma-separated): "이 러너의 태그(gitlab-ci.yml의 tags 항목에 해당합니다.)"
- Enter an executor: shell
러너를 등록해 주면 끝입니다.
sudo gitlab-runner list # 러너 목록 조회
sudo gitlab-runner status # 러너 서비스 상태 조회
위 명령어들로 정상 등록 여부를 확인할 수도 있고, 위에서 설명했던 Runners 항목에도 추가된 것이 확인 가능합니다.
이제 정리해 보면,
- 프로젝트에 gitlab-ci.yml 설정을 마쳤고
- GitLab Runner 설정도 마쳤습니다.
- 이제 실제로 main에 push 해보면 실행 결과를 확인할 수 있습니다.


어떻게 동작하는건지 궁금해서 가볍게 디버깅 해보았는데,
- GitLab → .gitlab-ci.yml 파일의 설정대로 Runner에게 작업 할당 (Runner는 반드시 정상적으로 등록 및 실행 중이어야 함)
- GitLab Runner → 깃랩에서 등록한 조건이 되면
- /var/lib/gitlabrunner/builds/{runner_id}/0 아래 경로에 조건에 맞는 branch를 checkout 한 뒤
- gitlab-ci.yml 파일에 작성된 script를 실행함 (이 글에선 도커 재배포 쉘 스크립트)
이상으로 배포부터 CI/CD까지 적용기를 마칩니다.