노션 DB 추가/수정 시 슬랙 알림 자동화 (3) - 자동 배포 파이프라인

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

etc-image-0
GitLab을 사용한 방식이므로 Github과는 상이한 점이 있을 수 있습니다.

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 가져오기

etc-image-1
GitLab - Repo - Settings - CI/CD
etc-image-2
Runners

위 경로를 찾아 들어가면 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 항목에도 추가된 것이 확인 가능합니다.


이제 정리해 보면,

  1. 프로젝트에 gitlab-ci.yml 설정을 마쳤고
  2. GitLab Runner 설정도 마쳤습니다.
  3. 이제 실제로 main에 push 해보면 실행 결과를 확인할 수 있습니다.

etc-image-3
CI/CD - Pipelines에서 처리 여부 확인
etc-image-4
passed 항목을 클릭하면 로그 확인도 가능합니다.

어떻게 동작하는건지 궁금해서 가볍게 디버깅 해보았는데,

  1. GitLab → .gitlab-ci.yml 파일의 설정대로 Runner에게 작업 할당 (Runner는 반드시 정상적으로 등록 및 실행 중이어야 함)
  2. GitLab Runner → 깃랩에서 등록한 조건이 되면
    • /var/lib/gitlabrunner/builds/{runner_id}/0 아래 경로에 조건에 맞는 branch를 checkout 한 뒤
    • gitlab-ci.yml 파일에 작성된 script를 실행함 (이 글에선 도커 재배포 쉘 스크립트)

이상으로 배포부터 CI/CD까지 적용기를 마칩니다.

차니님의 😊
글이 좋았다면 응원을 보내주세요!