Gitlab CI/CD로 자동 배포하기
git을 통해 버전관리를 하면서도 배포 과정에선 FTP, SCP 등과 같은 절차로 너무나도 많은 시간을 소요하고 있었다.
몰론 배포 스크립트 등을 활용하는 조직도 있었으나, 팀에서 Gitlab
을 적극적으로 활용하는 만큼 Gitlab-CI
기능을 이용하여 branch commit시에 자동 배포를 하려고 마음을 먹었다.
Jenkins등을 활용 할 수도 있지만, 사람은 새로운 도구보다 익숙한 도구를 좋아하는데다 같은 팀원들에게 Jenkins를 전파할 때 발생할 러닝커브도 고려하여 gitlab을 그대로 활용하기로 했다.
Gitlab의 CI-CD 기능을 이용하기 위해서는 원격지 서버에 gitlab-runner
를 설치해야한다.
처음에 이 개념을 설명하는 곳이 없어서 조금 해맸었다.
원격지 서버(배포될 서버)들에 gitlab-runner
들을 설치하고,
gitlab이 설치된 서버에 runner를 register
해두면 gitlab 상에서 commit와 같은 이벤트가 발생할 때, gitlab-ci.yml
에 작성된 스크립트가 원격지 서버에서 실행되는 게 전체 프로세스다.
Installing the Runner
원격지 서버에서 아래 작업이 수행되어야 한다.
몰론 원격지에서 Gitlab 페이지가 방화벽 등으로 막혀있지 않은지 확인해야 한다.
- Gitlab 공식 Repository를 추가한다.
# For Debian/Ubuntu/Mint
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
# For RHEL/CentOS/Fedora
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
- Gitlab Runner의 최신버전을 설치한다
# For Debian/Ubuntu/Mint
sudo apt-get install gitlab-runner
# For RHEL/CentOS/Fedora
sudo yum install gitlab-runner
- 만약 특정버전을 설치하고 싶다면 다음과 같이
# for DEB based systems
apt-cache madison gitlab-runner
sudo apt-get install gitlab-runner=10.0.0
# for RPM based systems
yum list gitlab-runner --showduplicates | sort -r
sudo yum install gitlab-runner-10.0.0-1
Registering Runners
원격지 서버에서 아래 작업이 수행되어야 한다.
몰론 원격지에서 Gitlab 페이지가 방화벽 등으로 막혀있지 않은지 확인해야 한다.
root 계정에서 실행할거라면 gitlab-runner register
을 실행하면 되지만 여기서는 따로 계정을 둬서 관리하도록 하려고 한다.
- 계정을 생성
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
- 설치 및 실행
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner sudo gitlab-runner start
- Gitlab Runner 등록
sudo gitlab-runner register
- Gitlab의 서버 주소를 입력한다.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ) http://192.168.123.456
- Gitlab CI 에서 발급된 토근 값을 입력한다.
Please enter the gitlab-ci token for this runner: 1xxxxxxxxx
토큰 값을 확인 하는 방법은 Gitlab의 프로젝트를 선택하고 Settings > CI/CD > Runners settings > Specific Runners 영역을 살펴보면 URL과 토큰 값을 확인 할 수 있다.
- Gitlab의 서버 주소를 입력한다.
- Runner 의 설명을 추가한다.
Please enter the gitlab-ci description for this runner: Deploy Runner
- Runner의 태그를 설정한다. (중요하다.)
Please enter the gitlab-ci tags for this runner (comma separated): deploy
- Runner가 어떤 작업으로 동작할지 결정
Please enter the executor: docker-ssh, ssh, virtualbox, docker, parallels, shell, docker+machine, docker-ssh+machine, kubernetes: shell
- Runner가 정상 등록 되었다면 Settings > CI/CD > Runners settings > Specific Runners 에서 다음과 같이 Runner가 등록된 것을 확인 할 수 있다.
.gitlab-ci.yml 스크립트 작성
# Master 브랜치에 push가 들어올 때 동작하는 job
deploy-to-server:
stage: deploy
only:
- master
script:
- echo 'hello world!'
tags:
- deploy
- deploy-to-server 은 임의로 지어준 JOB 이름
- Gitlab 은 스테이지(단계) 별로 특정 작업들을 수행할 수 있는 큰 그룹이 정해져 있음
- build, test, deploy 3단계의 스테이지가 있음
- 자세한 내용은 여기를 참고
- only는 master 브런치에 이벤트가 발생했을 경우 파이프라인 기능이 활성화 된다.
- script 항목에선 runner에 의해 수행될 쉘 스크립트를 작성한다.
- tags 는 특정 태그가 달린 runner에 명령을 내릴 수 있다. (여기서는 deploy 태그를 가진 runner에 명령을 내린다.)
위 파일을 .gitlab-ci.yml
로 저장하여 커밋
마무리
master 브런치에 커밋을 하고 프로젝트 > CI/CD > Pipelines 또는 Jobs 에서 작업이 성공했는지 확인한다. 작업이 성공적으로 수행되었다면 대략 다음과 같은 화면을 볼 수 있다.