GitLab-Runner

달달한단밤·2024년 2월 20일

1. EC2 환경에 Gitlab-Runner 설치

Git Runner 설치

  • Root 계정 접속
sudo su
sudo apt update
sudo apt upgrade
  • Gitlab repository 추가
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
  • Gitlab-runner 추가
sudo apt install gitlab-runner

2. GitLab Runner 생성

  • Gitlab → Setting → CICD → Runners
  • Shared Runners Disable 클릭
  • New Project Runner 버튼 클릭
  • 연결할 환경 선택
  • Tags
    • 나중에 연결할 때 사용할 태그명
  • Details
    • Runner Process 이름(나중에 연결에 사용됨)

  • Create runner

Runner 정보 확인

gitlab-runner register  --url https://lab.ssafy.com  --token glrt-nBKoNTTTK_DiBMqbnE-o

glrt-nBKoNTTTK_DiBMqbnE-o

3. Ubuntu에 Gitlab-Runner Process 등록

  • Gitlab-Runner Register 실행
sam
  • Gitlab instance url 설정
# lab.ssafy.com 설정 안하면 연결안됨 주의
https://lab.ssafy.com
  • Gitlab Token 입력

    • Runner 생성시 발급된 토큰 입력
  • Gitlab-Runner 이름(Tag) 입력

sample2
  • Gitlab-Runner 실행시킬 환경 지정
    • 도커면 docker shell 환경에서 작업시 shell 등등
docker
  • 도커 버전 지정
docker:20.0.7
  • Runner 연결 확인

  • Runner 추가 설정

EC2 Docker 실행 권한 수정

  • Gitlab-Runner가 도커를 실행 가능하도록 권한 수정 필요함
# docker와 gitlab-runner를 그룹으로 묶음
sudo usermod -aG docker gitlab-runner

# CI 설정 파일 수정
vi /etc/gitlab-runner/config.toml
  • privileged : true로 명경
  • volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"] 변경

  • 리눅스 vi 명령어
    • :q! 저장 안하고 종료
    • :w 저장

Gitlab-ci.yml 설정


# stage 
stages:
  - build
  - package
  - deploy

build:
  image: gradle:8.4.0-jdk17 # 자바 17 gradle의 이미지를 사용한다
  stage: build
  script:
    - echo [INFO] YML Settings
    - cd ./src/main/resources # src 디렉토리로 이동
    - echo "$APPLICATION_YML" > "application.yml" # gitlab cicd에 미리 설정해둔 APPLICATION_YML로 application.yml 생성
    - echo [INFO] spring-boot project build
    - cd ../../..
    - chmod +x gradlew
    - ./gradlew clean
    - ./gradlew bootjar # 스프링 부트 빌드
  artifacts:
    paths:
      - build/libs/*.jar # 빌드파일 저장위치
    expire_in: 1 days
  only:
    - master

package:
  image: docker:latest # 도커 이미지 사용
  stage: package
  services:
    - docker:dind
  before_script:
    - docker login -u $DOCKER_REGISTRY_USER -p $DOCKER_REGISTRY_PASSWORD # 도커 허브 로그인
  script:
    - echo [INFO] Start package stage
    - echo [INFO] CI_REGISTRY_USER       $CI_REGISTRY_USER
    - echo [INFO] CI_REGISTRY_IMAGE      $CI_REGISTRY_IMAGE
    - echo [INFO] SPRING_IMAGE_NAME      $SPRING_IMAGE_NAME
    - echo [INFO] NGINX_IMAGE_NAME       $NGINX_IMAGE_NAME
    - echo [INFO] DOCKER_REGISTRY_USER   $DOCKER_REGISTRY_USER
    - echo [INFO] DOCKER_REGISTRY_PWD    $DOCKER_REGISTRY_PASSWORD
    - echo [INFO] Spring docker project build
    - docker build -t $DOCKER_REGISTRY_USER/$SPRING_IMAGE_NAME . # 도커 파일로 스프링 부트 빌드해 이미지 생성
    - docker push $DOCKER_REGISTRY_USER/$SPRING_IMAGE_NAME:latest # 도커 허브에 빌드한 이미지 푸쉬
    - echo [INFO] Nginx docker build
    - cd nginx
    - docker build -t $DOCKER_REGISTRY_USER/$NGINX_IMAGE_NAME . # 도커 파일로 nginx 빌드해 이미지 생성
    - docker push $DOCKER_REGISTRY_USER/$NGINX_IMAGE_NAME:latest # 도커 허브에 빌드한 이미지 $DOCKER_REGISTRY_USER/$NGINX_IMAGE_NAME:latest로 푸쉬
  after_script:
    - docker logout
  only:
    - master

deploy:
  image: docker:latest
  stage: deploy
  services:
    - docker:dind
  before_script:
    - echo [INFO] docker deploy start!
    - docker login $CI_REGISTRY -u $DOCKER_REGISTRY_USER -p $DOCKER_REGISTRY_PASSWORD
  script:
    - docker volume prune -f # 사용하지 않는 볼륨 정리
    - docker-compose down # 실행중인 컨테이너 종료
    - docker-compose pull # 도커허브에서 이미지 받아오기
    - docker-compose build # 컴포즈 내용으로 컨테이너 생성
    - docker-compose up -d # 컨테이너 백그라운드 실행
  after_script:
    - docker logout
    - echo [INFO] docker deploy end!
  only:
    - master

0개의 댓글