Docker처럼 Code를 수정하거나 추가할때마다 해당 Git Repository를 pull받아 새로운 image를 생성하고 image를 실행하는 방식과 같이 필수지만 반복되는 작업들을 CI/CD 파이프라인을 만들어 자동화 할 수 있다.
원래 리눅스에서 작업할때 Docker 과정
(1) sudo su -
(2) ll
(3) cd FinalProject_BaeJiWon
(4) git pull
(5) docker build -t springboot-finalproject
(6) docker images
(7) docker stop <기존 container_id>
(8) docker run -p 8080:8080 -e SPRING_DATASOURCE_URL=jdbc:mysql://<클라우드 인스턴스 주소>:3306/<db스키마> -e SPRING_DATASOURCE_PASSWORD=<db비밀번호> springboot-finalproject
(1) 관리자 권한 변경
(2) 현재 파일 리스트 출력
(3) 코드 Repository가 저장된 파일로 이동
(4) 새로 바뀐 코드를 받아 최신화
(5) 도커 이미지 생성
(6) 도커 이미지 생성되었는지 이미지 리스트 출력
(7) 기존에 사용하던 도커 컨테이너 중지
(8) 5번에서 생성한 이미지를 컨테이너로 동작시킴
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" \
]
stages:
- build
- dockerbuild-push
build:
image: openjdk:11.0-slim
stage: build
script:
- ./gradlew clean
- ./gradlew build -x test
before_script:
- chmod +x gradlew
artifacts:
paths:
- build/libs/*.jar
expire_in: 8 min
package:
image: docker:latest
stage: dockerbuild-push
services:
- docker:dind
before_script:
- docker login registry.gitlab.com -u $GITLAB_USER -p $GITLAB_PW
script:
- docker build -t registry.gitlab.com/$GITLAB_USER/<project-name> .
- docker push registry.gitlab.com/$GITLAB_USER/<project-name>
after_script:
- docker logout
stages:
- dockerbuild-push
package:
image: docker:latest
stage: dockerbuild-push
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
.gitlab-ci.yml파일에 들어있는 변수들($GITLAB_USER, $GITLAB_PASSWORD, $PROJECT_NAME)의 값을 정의해야한다.
Settings -> CI/CD으로 이동하고
Variables에 Collapse버튼을 누르고 Add Variable을 통해 해당 변수들의 값을 넣어준다.
(1) $GITLAB_USER : Gitlab의 유저 아이디(@로 시작하는)
(2) $GITLAB_PASSWORD : Gitlab의 비밀번호
(3) $PROJECT_NAME : 현재 작업하고 있는 프로젝트 이름
프로젝트 이름, Path이름 변경하기
(1) Settings -> General로 이동
(2) Project name 변경
(3) Advanced -> Change path에서 path주소 변경
docker pull <docker_image_url>
docker pull registry.gitlab.com/<$GITLAB_USER 부분>/<$PROJECT_NAME 부분>