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 페이지가 방화벽 등으로 막혀있지 않은지 확인해야 한다.

  1. 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
  1. Gitlab Runner의 최신버전을 설치한다
# For Debian/Ubuntu/Mint
sudo apt-get install gitlab-runner

# For RHEL/CentOS/Fedora
sudo yum install gitlab-runner
  1. 만약 특정버전을 설치하고 싶다면 다음과 같이
# 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을 실행하면 되지만 여기서는 따로 계정을 둬서 관리하도록 하려고 한다.

  1. 계정을 생성
    sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
    
  2. 설치 및 실행
    sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
    sudo gitlab-runner start
    
  3. 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-ci-token

  • 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가 등록된 것을 확인 할 수 있다.

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 에서 작업이 성공했는지 확인한다. 작업이 성공적으로 수행되었다면 대략 다음과 같은 화면을 볼 수 있다.

작업이 정상적으로 수행 된 모습

namioto's profile image

namioto

2018-07-16 17:42

Read more posts by this author