저번 편에 Runner등록을 완료하였다. Runner는 빌드, 테스트 배포 등 실행하는 시스템으로 Pipeline에 정의된 작업을 실행한다.
이번엔 Pipeline을 구성해보려 한다.
Pipeline
Repository에 Push/Merge와 같은 이벤트가 발생했을 경우 테스트/빌드/배포와 같은 작업을 자동으로 수행해 주는 것
Pipeline은 회사의 특성, 상황에 맞게 커스텀 할 수 있다.
프로젝트에는 운영 서버 릴리즈 버전을 관리하는 master ,개발 서버 릴리즈 버전을 관리하는 develop 두가지 브랜치가 있다.
간단하게 develop branch의 변경을 감지하면 build 후 개발 서버에 반영 하도록 구성하려고한다.
1. develop branch 의 변경을 감지하면 build할 것
2. 1번의 build가 성공한 경우에 개발서버에 반영할 것
GitLab에서는 .gitlab-ci.yml파일을 해당 프로젝트의 Pipeline설정파일로 사용한다.
설정파일이므로 프로젝트의 상단 둔다.
https://workshop.infograb.io/gitlab-ci/11_introduction-to-gitlab-cicd/3_gitlab_ci_cd_terms_concepts/
stages:
-build
# 빌드 단계
build:
stage: build
image: node:16 # Node.js 이미지를 사용
script:
- npm install # npm 의존성 설치
- npm run build # npm 빌드 실행
only:
- develop # develop 브랜치에서만 실행
tags:
- CI/CD-test # 'CI/CD-test' 태그가 달린 Runner만 이 job을 실행
+ 사족을 붙이자면 runner가 local 환경에서 터미널 작업을 해준다는걸 파이프라인작업을 하면서 확실히 알게됐다. 역시 백문이 불여일타,,,
배포는 생각보다 쉬운듯 어려웠다.
수동배포때는 물리 서버의 특정경로에 하기 때문에 pipeline에서도 구현해야했다.
ssh-keygen -t rsa -b 4096 -C "gitlab-runner" -f /home/gitlab-runner/.ssh/id_rsa -N ""
stages:
-build
-deploy
# 배포 단계
deploy:
stage: deploy
image: alpine:latest # 최소한의 이미지로 SSH 및 SCP 도구를 설치
before_script:
- apk add --no-cache openssh # SSH 설치
script:
- echo "Deploying to server"
# SSH 접속하여 배포 작업 수행
- ssh -o StrictHostKeyChecking=no web3@192.168.123.241 'rm -rf /srv/ta-kyobo/web/apache/ROOT && cp -r /build/dist /srv/ta-kyobo/web/apache/ROOT'
only:
- develop # develop 브랜치에서만 실행
tags:
- CI/CD-test # 해당 태그가 달린 runner만 실행