GitLab 연동 및 CI/CD 구축

Sol's·2023년 1월 1일

프로젝트

목록 보기
3/16

Gitlab 연동하기

Github 레포지토리를 만들고 Gitlab과 연동을 한다.

(gradle/wrapper는 나중에 제외시켰다)

프로젝트에 도커파일을 만든다.

FROM gradle:7.4-jdk11-alpine as builder
WORKDIR /build

# 그래들 파일이 변경되었을 때만 새롭게 의존패키지 다운로드 받게함.
COPY build.gradle settings.gradle /build/
RUN gradle build -x test --parallel --continue > /dev/null 2>&1 || true

# 빌더 이미지에서 애플리케이션 빌드
COPY . /build
RUN gradle build -x test --parallel

# APP
FROM openjdk:11.0-slim
WORKDIR /app

# 빌더 이미지에서 jar 파일만 복사
COPY --from=builder /build/build/libs/*-SNAPSHOT.jar ./app.jar

EXPOSE 8080

# root 대신 nobody 권한으로 실행
USER nobody
ENTRYPOINT [                                                \
   "java",                                                 \
   "-jar",                                                 \
   "-Djava.security.egd=file:/dev/./urandom",              \
   "-Dsun.net.inetaddr.ttl=0",                             \
   "app.jar"              \
]

CI/CD 파이프라인 구축

Gitlab의 Pipeline Editor 설정

stages:
  - dockerbuild-push

package:
  image: docker:latest
  stage: dockerbuild-push
  only:
    - main
  services:
    - docker:dind
  before_script:
    - docker login registry.gitlab.com -u $GITLAB_USER -p $GITLAB_PASSWORD
  script:
    - docker build -t registry.gitlab.com/$GITLAB_USER/$PROJECT_NAME .
    - docker push registry.gitlab.com/$GITLAB_USER/$PROJECT_NAME
  after_script:
    - docker logout

variables 설정

  • Pipeline Editor의 변수들을 설정

Crontab 설정

  • 변경사항을 push하면 자동으로 변경된 컨테이너를 띄울 수 있게 설정한다.

deploy.sh 파일 생성

#!/bin/bash    
set -ex

docker pull registry.gitlab.com/solkim/finalproject_kimsolbae:latest | grep "Image is up to date" && pull_status="already_pulled" || pull_status="newly_pulled"

echo $pull_status

if [ "$pull_status" = "newly_pulled" ]; then
        docker stop finalproject_kimsolbae
        docker rm -f finalproject_kimsolbae
	docker rmi $(docker images -f "dangling=true" -q)
        docker run -p 8082:8080 --name {프로젝트명} -e SPRING_DATASOURCE_URL=jdbc:mysql://{주소} -e SPRING_DATASOURCE_PASSWORD={비밀번호} -e JWT_SECRET={시크릿키} -d registry.gitlab.com/solkim/finalproject_kimsolbae
fi

1분에 한번씩 업데이트가 되게 설정
crontab -e 명령어로 Crontab을 설정한다.

* * * * * sh /home/ubuntu/deploy.sh >> /home/ubuntu/deploy.log

이제 CI/CD 구축을 완료하였다!

profile
배우고, 생각하고, 행동해라

0개의 댓글