gitlab에서 지원하는 CI/CD기능을 이용하여, 내 프로젝트의 특정브랜치에 commit시 자동배포될 수 있도록 구성 할 수 있다. 실제 프로젝트 구성 시 develop, staging, production 3가지 환경(또는 3가지 이상) 을 설정하고, 이 분리된 환경을 이용하여 통합/배포 전략을 취한다.
프로젝트마다 차이는 있겠지만, 환경별로 간단하게 용도를 정리해 본다.
| 환경 | 용도 |
|---|---|
| develop | 개발자들이 로컬에서 작업 한 소스를 1차적으로 commit 하는 환경. 운영에 실제로 배포되지 않는 소스들도 자유롭게 commit가능하다. 원활한 개발을 위해 DB데이터 스키마에 대한 권한도 비교적 자유롭게 주어진다. |
| staging | develop환경에서 테스트가 완료된 후 배포 할 commit들을 브랜치로 통합하여배포하는 환경. 운영에 배포되지 않았으나 운영과 동일한 환경에서 테스트를 하기 위한 환경이다. DB가 실제 운영 데이터와 같은 경우가 많으며 이런 데이터를 통해 운영에 배포되었을 경우에 대비한 테스트가 가능하다. |
| production | staging 테스트 완료 후, staging->production으로 branch merge 를 실행하는 것으로 배포가 완료된다. 보통 배포 완료 후 해당 버전을 다시 develop에 merge하여 다음 배포를 위한 버전을 동기화 한다. |
이러한 분리된 환경 별로 브랜치를 구성하여, 해당 환경에 적용해야 할 소스를 로컬에서 작업한 feature 브랜치로부터 환경 브랜치로 선별적으로 commit 하고, 브랜치에 commit했을때 해당 환경에서 자동 배포가 이루어지도록 CI/CD를 구성한다.
sudo yum install gitlab-runner
설치여부를 확인한다.
sudo gitlab-runner -version
sudo gitlab-runner -status
WAS Server에 Gitlab-runner register를 진행한다.
sudo gitlab-runner -register
gitlab에서 관리자 계정으로 접속하고 shared-runner를 등록한다.
Admin Area → Overview → Runners → edit → gitlab runner의 전반적 설정
(lock to current projects에 체크 해제 해 준다.)
→ Project의 enable버튼을 통해 runner에 등록할 프로젝트들을 선택한다.
설정할 프로젝트 root폴더에 .gitlab-ci.yml파일을 만든다.
GitLab > Settings > CI/CD의 General 을 확인하면, CI/CD configuration file 에서 .gitlab-ci.yml 파일로 설정을 세팅해 놓은 것을 확인 할 수 있다.
, [CI/CD configuration]버튼을 클릭해 파일을 수정한다.
compile 후 package 까지 진행하면, war파일이 생성된다. 생성된 war파일을 nexus에 올리고, 이 war파일을 nexus로부터 WAS server로 옮겨 실행한다.
only를 추가해 해당 branch만 실행가능. 없으면 모든 브랜치가 실행되므로 주의하자.
build:
stage: deploy
script: echo "build"
WAS Server에서 curl로 NEXUS_URL로 생성된 war파일에 접근 할 수 있는 URL을 통해 WAR_PATH경로에 다운받고, 배포 위치에 옮겨 tomcat을 재실행하는 스크립트를 .gitlab-ci.yml 에 작성한다.
stages:
- build
- deploy
variables:
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version"
cache:
key: "$CI_COMMIT_REF_NAME"
paths:
- .m2/repository/
##프로젝트 빌드(Maven을 사용하여 compile 실행)
build:
stage: build
script:
- mvn $MAVEN_CLI_OPTS compile
##production 브랜치에 한해, Maven을 사용하여 deploy 명령어를 실행하여 배포
deploy:
stage: deploy
only:
- production
script:
- mvn $MAVEN_CLI_OPTS deploy
이외에도 다양한 커스텀 설정이 가능하다.
.gitlab-ci.yml파일 내 CI/CD 설정에 사용되는 YAML 문법 :
https://docs.gitlab.com/ee/ci/yaml/index.html