GITLAB CI/CD 구축하기 - (2) Pipeline구성

성현·2025년 3월 24일

저번 편에 Runner등록을 완료하였다. Runner는 빌드, 테스트 배포 등 실행하는 시스템으로 Pipeline에 정의된 작업을 실행한다.
이번엔 Pipeline을 구성해보려 한다.

Pipeline
Repository에 Push/Merge와 같은 이벤트가 발생했을 경우 테스트/빌드/배포와 같은 작업을 자동으로 수행해 주는 것

PipeLine 구성

Pipeline은 회사의 특성, 상황에 맞게 커스텀 할 수 있다.

프로젝트에는 운영 서버 릴리즈 버전을 관리하는 master ,개발 서버 릴리즈 버전을 관리하는 develop 두가지 브랜치가 있다.
간단하게 develop branch의 변경을 감지하면 build 후 개발 서버에 반영 하도록 구성하려고한다.
1. develop branch 의 변경을 감지하면 build할 것
2. 1번의 build가 성공한 경우에 개발서버에 반영할 것

GitLab에서는 .gitlab-ci.yml파일을 해당 프로젝트의 Pipeline설정파일로 사용한다.
설정파일이므로 프로젝트의 상단 둔다.

gitlab-ci.yml 작성

  • Job : 수행할 작업을 정의한다. (ex 반영 , 빌드 등) Runner가 실행해야하는 명령 모음.
  • Stages : 작업의 실행 시기를 정의한다. (ex 빌드 후 반영)

https://workshop.infograb.io/gitlab-ci/11_introduction-to-gitlab-cicd/3_gitlab_ci_cd_terms_concepts/

yml파일 build 설정

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을 실행
  • stages: 실행 단계로 build를 추가한다.
  • job 단계로 build를 설정한다.
    - 프로젝트를 빌드해주기 위한 기본값 설정
    • only develop : develop branch에서만 설정

+ 사족을 붙이자면 runner가 local 환경에서 터미널 작업을 해준다는걸 파이프라인작업을 하면서 확실히 알게됐다. 역시 백문이 불여일타,,,

yml 파일 deploy 설정

배포는 생각보다 쉬운듯 어려웠다.
수동배포때는 물리 서버의 특정경로에 하기 때문에 pipeline에서도 구현해야했다.

  1. GItLab Runner에서 ssh 키 생성
    원격 접속시 id와 비밀번호가 필요했기에 ssh를 활용하기로했다.
ssh-keygen -t rsa -b 4096 -C "gitlab-runner" -f /home/gitlab-runner/.ssh/id_rsa -N ""
  1. 원격 서버의 authorized_keys에 공개키 추가하기
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만 실행
profile
행동하는 사람

0개의 댓글