빌드 환경 구성하기
GitLab CI/CD 환경을 구축하기 위해선 빌드파일을 만들 환경 구성이 필수이다.

Git과 GitLab의 pipeline 프로세스
위 Git과 GitLab의 pipeline 프로세스 그림을 보면 CODE가 local에 있는 버전의 작성된 코드이고, RELATED CODE 가 저장소에 COMMIT(로컬에서 변경사항을 기록한 상태) 된 CODE이다.
사실은 COMMIT 을 하면 로컬에서 가지고 있는 버전이 올라가는 의미이지만, PUSH 행위를 통해 원격 저장소에 COMMIT(로컬의 기록된 변경사항) 할 수 있다.
여기서 운영 서버에 빌드 환경을 구성해야 하는 이유는 CI/CD의 동작이 GitLab runner(운영서버에 위치하여 각종 cmd 명령어를 수행하는 녀석) + 소스(원격 저장소에 위치) + 빌드툴(운영서버에 위치)의 조합으로 이뤄지기 때문이다.
빌드 환경은 각 시스템마다 사용하는 빌드도구가 다르기 때문에 본 페이지에서는 SpringBoot + vue.js 시스템을 기준으로 작성함.
환경구성
- zulu8 Java jdk 설치(zulu8버전)
- maven maven 설치
- nodejs nodejs 설치
각 설치 버전은 프로젝트 or 운영 버전에 맞는 구성을 사용해야 함.
버전이 다를 경우 종속성의 제약 or 기타 호환의 문제가 있기 때문에 Local 환경을 기준으로 환경설정을 진행한다.
↑설정이 완료된 배포 대상 서버의 환경변수
명령 프롬프트 창(CMD)에서 각 설치 버전의 명령어가 유효한지 검사를 꼭 실시하길 권장함.
CI/CD 구성하기
Gitlab runner를 다운(서버 OS에 맞는 파일로) ---> Repository of Gitlab runner
서버의 Application이 있는 드라이브에 Gitlab-Runner 폴더를 생성
다운로드한 파일을 생성한 폴더 안에 위치 시킴.
명령 프롬프트를 이용해 해당 gitlab-runner.exe 파일을 찾아 들어감.
gitlab-runner.exe register
위 명령어를 입력하면 설치한 Runner가 호출을 받게되는 원격 저장소를 입력하라고 한다.
원격 저장소를 입력해 주고 나면 프로젝트 repository에 부여된 token을 입력하라고 한다.
글쓴이가 운영하고 있는 시스템의 토큰값은 http://{your-GitLab-URL}:8888/repo/{your-repository-name}/settings/ci_cd로 접속하여 Runners 패널 펼치기를 하면 Specifics아래에서 확인할 수 있다.
cmd 창으로 돌아가서 토큰값을 입력하고 난 뒤 엔터
토큰의 값을 입력하고 엔터를 누르게 되면 해당 서버의 hostname에 대한 별칭(설명)을 줄수 있다.
러너를 각기 다른 Repository에 등록하여 해당 서버에 배포를 진행할 수 있음으로 식별할수 있는 설명을 적어 놓는다.
(해당 사항을 필수 사항이 아니며 사용자가 GitLab UI에서 Runner를 구분하기 위해 사용하는 것이다.)
cmd 창에서 discription을 입력후 엔터 (그냥 엔터를 눌러도 상관없음.)
discription 입력 단계에서 엔터를 누르게 되면 tag를 지정하라는 문구가 나오게 되는데 이 단계에서는 회사의 서버 분리 정책 or 브랜치 전략에 따라서 다름으로 알맞게 지정해 입력 + 엔터
(글쓴이는 시스템에 개발과 운영 서버가 배정되어 있고, Back-end와 Front-end가 나눠져 있어 tag는 필수적...)
gitlab-ci.yml 스크립트 작성
CI/CD 스크립트를 작성하는 방법은 시스템의 구성에 따라, 빌드 툴에 따라서 달라진다.
아래 스크립트는 maven 빌드 툴을 이용한 배포 과정이다.
Stages
job 이 실행되는 단계를 의미한다.
동일한 stage 안에 있는 job 은 병렬적으로 실행되며, 다음 stage 의 job 은 이전 stage 가 성공적으로 완료된 후 실행된다.
위 스크립트의 compile stage 의 모든 job 이 성공적으로 완료되면 build stage 의 job 이 실행되고, deploy stage 또한 마찬가지로 동작한다.
only
job의 생성을 제한하는 것으로, 작업이 실행될 브랜치 및 tag의 이름을 정의함.
cache
작업간에 캐시를 저장할 파일 및 디렉토리 목록을 지정하는데 사용함. 로컬 작업 복사본 내에 있는 경로만 사용할 수 있음.
-path: pipeline에서 수행된 빌드 산출물을 가지고있어 다음 수행시 빌드를 빠르게 할수 있게 도와줌.
script
배포 대상 서버에서 runner가 수행하는 CMD(or shell script) 명령어. 스크립트에서 특수문자가 나오는 경우 따옴표로 묶어줘야 함.참고: https://docs.gitlab.com/12.10/ee/ci/yaml/#parameter-details
참고 URL
https://docs.gitlab.com/12.10/ee/ci/yaml/
https://bravenamme.github.io/2020/11/09/gitlab-runner/
https://otrodevym.tistory.com/entry/Gitlab-CICD-gitlab-ciyml-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95
https://assu10.github.io/dev/2020/10/09/gitlab-runner-3/