ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [GitLab] GitLab Runner를 이용한 자동 통합 배포 시스템 구축
    기타/Git 2024. 10. 17. 14:11

    들어가기 전,

    프로젝트의 기능 개발이 일단락 된 후,

    테스트, 프로젝트 문서화, 코드 수정, 배포를 반복하면서 자동 통합 배포 시스템이 절실히 필요해졌고...

    공부해서 적용해보기로 했다.

     

    여러가지 통합 배포 툴이 있는데, 그 중에서도 나는 GitLab에서 제공하는 GitLab Runner를 사용하여 자동 통합 배포 시스템을 구축해보았다. (회사에서는 설치형 GitLab을 사용하고 있었고, 플러그인을 사용할 만큼 복잡한 배포 프로세스가 필요하지 않았기 때문에...)

     

    본 글은  React로 만든 프로젝트를 Build하여 nginx 기동 경로에 배포하는 과정을 기준으로 작성되었습니다.

    빌드 및 배포 서버 OS 환경 : CentOS Stream release 8

    React 버전 : 18.2.0

     

     

    동작 프로세스의 이해

    우선 GitLab과 GitLab Runner의  동작 프로세스는 아래와 같다.

     

    GitLab에 소스가 올라가면 프로젝트의 .gitlab-ci.yml에 설정해둔 pipeline을 따라

    GitLab Runner(실행환경)이 동작하고, 동작하는 결과를 GitLab 페이지에서 확인할 수 있다.

     

     

    설치 및 설정

    1. 빌드 및 배포할 서버에 gitlab-runner를 설치한다. (root 계정으로 혹은 sudo 명령어 사용)

    $ curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | bash
    
    $ yum install gitlab-runner

     

    * React 프로젝트를 빌드하고 실행시킬 NodeJs 와 Npm는 사전에 설치되어 있어야 한다.

     

    2. 설치한 서버에 GitLab Repository별 Gitlab Runner 를 등록

    $ sudo gitlab-runner register

     

    $ Enter the GitLab instance URL (for example, https://gitlab.com/):

      - 연결할 GltLab의 URL을 입력

    $ Enter the registration token:

      - 연결할 GitLab Repository의 Setting > CI/CD > Runner (expand) 에 있는 token을 입력

    $ Enter a description for the runner:

      - runner에 대한 설명

    $ [localhost.localdomain]:

      - runner를 구분할 수 있는 이름을 작성

    $ Enter tags for the runner (comma-separated):

      - 해당 러너에서 사용할 tags를 작성. 여러개 작성 시 ',' (comma)로 구분

    $ Enter optional maintenace note for the runner:

       - 이 옵션의 의미는 잘 모르겠다..!

     

     

    위 내용을 모두 작성 후, 재시작

    $ gitlab-runner restart

     

     

    GitLab 페이지에서 등록된 Runner를 확인할 수 있다.

     

     

     

    기타 명령어

    # 상태 확인
    $ gitlab-runner status
    
    # 서버에 등록된 runner 확인
    $ gitlab-runner list

     

    3. React Project의 최상위 경로에 .gitlab-ci.yml을 작성하여 git push

     

    .gitlab-ci.yml

    variables:
      CI: "false"
    
    stages:
      - modules
      - build
      - deploy
    
    npm:
      stage: modules
      cache:
        paths:
          - node_modules
      script:
        - npm ci --legacy-peer-deps
    
    build-job:
      stage: build
      cache:
        paths:
          - build
      script:
        - npm run build:stag
      only:
        - main
      tags:
        - staging
    
    deploy-stag:
      stage: deploy
      cache:
        paths:
          - build
      script:
        - sudo rm -rf /home/project/app
        - sudo cp -r build /home/project/app

     

    1) 최상위 depth에 작성된  npm, build, deploy를 jobs 라고 부른다. (하나의 작업 단위)

     

    2) variables > CI: "false"

    • 프로젝트 빌드 시 warning이 있을 때, job이 실패하기 때문이다.

    3) stages

    • 작성된 stage의 순서대로 실행된다.

    4) only

    • branch를 작성하면 되는데, 해당 job은 only에 작성한 브랜치에 변경사항이 있을 때만 실행된다.

    5) tags

    • gitlab-runner 를 등록할 때, runner에 등록한 tag와 일치하는 경우 해당 runner가 실행된다.

    6) deploy-stag>script 에서 사용하는 sudo 명령어

    •  gitlab-runner 를 설치하면 gitlab-runner가 사용자로 등록되고, 해당 계정으로 script가 실행되는데 이때 sudo 명령어 권한을 주지 않았으면 error가 발생한다.
    •   사용자에게 sudo 명령어 권한을 주는 방법에 대한 포스팅 => https://stirringdev.tistory.com/124

     

     

    그 외...

    1) gitlab-runner 설치된 server에서 clone된 소스코드 경로

    gitlab-runner를 설치하면 gitlab-runner가 사용자로 등록 되는데, 해당 계정으로 로그인해서 폴더를 뜯어보면 gitlab의 repository에 있는 소스코드가 clone 되어 있는 것을 확인할 수 있다.

     

    2) gitLab-runner 에서 등록한 runner 설정 변경하기

    편집하고자 하는 runner의 편집 버튼을 누르고

     

     

     

    • Run untagged jobs 를 체크하게 되면, .gitlab-ci.yml에 작성한 tags가 없는 job이 해당 runner에서 실행된다.

    댓글

Designed by Tistory.