카테고리 없음
[Gitlab] git push 한 내용을 자동으로 docker build + push 하기
by whereisco
2022. 12. 15.
전체 배포 pipeline architecture
- CI/CD pipeline을 구축하면, 변경된 내용이 자동으로 배포된 서버에 반영하는 과정을 자동화할 수 있습니다.
- 문제는 Build Server(ex. gitlab runner)와 실제 배포되는 서버 (ex.aws ec2)는 다를 수 있습니다. 따라서, 중간에 container Registry를 씁니다.
- Containter Registry는 Docker Image가 저장되는 공간 입니다.
- 개발자는 브랜치를 생성한 뒤 각자 작업을 수행하고, main 브렌치에 merge 해줍니다.
- 이번 포스팅에선, 개발자가 main 브랜치에 merge 하여 생성된 새로운 변경사항을 Gitlab에 의해 자동적으로 docker build + push가 되도록 환경을 구축해보도록 하겠습니다.
👀 목표 : git에 변경사항을 push하면, gitlab에 의해 docker build + push의 과정을 자동화해보자.
.gitlab-ci.yml
# stage : 단계. 우리의 경우에는 build-push와 같은 형태의 하나의 단계만 존재
stages:
- dockerbuild-push
package:
image: docker:latest
stage: dockerbuild-push
services:
- docker:dind
before_script:
#docker 로그인
- docker login registry.gitlab.com -u $GITLAB_USER -p $GITLAB_PASSWORD
script:
- docker build -t registry.gitlab.com/$GITLAB_USER/likelion-hospital-review .
- docker push registry.gitlab.com/$GITLAB_USER/likelion-hospital-review
after_script:
- docker logout
- script 부분을 대문자로 작성하는 것을 권장합니다.
- 위와 같은 yml 파일을 작성함으로써, docker build 과정을 gitlab-runner(gitlab linux server)가 대신 해줍니다.
DockerFile
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", \
"-
환경 변수 추가
- settings → CI/CD로 이동해줍니다.
- 이동한 뒤, 아래와 같이 Variable에서 GITLAB_USER, GITLAB_PASSWORD, PROJECT_NAME과 관련된 변수 값들을 추가해줍니다.
- 이제, build 과정을 자동화 되었을 것 입니다. 우리가 변경 사항을 push 해주면, gitlab server가 자동적으로 docker build와 push를 해주는 것입니다.
- 빌드가 성공적으로 수행되면, 깃랩에 등록한 이메일을 통해서도 성공 결과를 확인할 수 있습니다.
Container Registry에서 Docker Image 받아오기
- 이제 배포 서버에서 container Registry에 접근해, gitlab을 통해 자동으로 push되어 올라간 image들을 받아올 수 있습니다.
docker pull <docker_image_url> : Container Registry에서 Docker image 받아오기
docker images : 받아온 이미지 확인
- Container Registry에 저장된 도커 이미지를 배포 서버에 잘 받아온 것을 알 수 있습니다.