Gitlab CI/CD - commit 자동배포 파이프라인 구성

way·2024년 5월 28일

devOps

목록 보기
1/2
post-thumbnail

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를 구성한다.

1. gitlab runner를 CI/CD Server에 설치한다.

sudo yum install gitlab-runner

설치여부를 확인한다.

sudo gitlab-runner -version
sudo gitlab-runner -status

WAS Server에 Gitlab-runner register를 진행한다.

sudo gitlab-runner -register

2. gitlab runner setting

gitlab에서 관리자 계정으로 접속하고 shared-runner를 등록한다.
Admin Area → Overview → Runners → edit → gitlab runner의 전반적 설정
(lock to current projects에 체크 해제 해 준다.)
→ Project의 enable버튼을 통해 runner에 등록할 프로젝트들을 선택한다.

3. CI/CD설정

설정할 프로젝트 root폴더에 .gitlab-ci.yml파일을 만든다.
GitLab > Settings > CI/CD의 General 을 확인하면, CI/CD configuration file 에서 .gitlab-ci.yml 파일로 설정을 세팅해 놓은 것을 확인 할 수 있다.
, [CI/CD configuration]버튼을 클릭해 파일을 수정한다.

4. build

compile 후 package 까지 진행하면, war파일이 생성된다. 생성된 war파일을 nexus에 올리고, 이 war파일을 nexus로부터 WAS server로 옮겨 실행한다.
only를 추가해 해당 branch만 실행가능. 없으면 모든 브랜치가 실행되므로 주의하자.

build:
	stage: deploy
	script: echo "build"    

5. deploy

WAS Server에서 curl로 NEXUS_URL로 생성된 war파일에 접근 할 수 있는 URL을 통해 WAR_PATH경로에 다운받고, 배포 위치에 옮겨 tomcat을 재실행하는 스크립트를 .gitlab-ci.yml 에 작성한다.

.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

0개의 댓글