사수님이 이제 cicd도 알아야한다며 파이프라인을 분석해보라고 하셔서
우리팀에서 표준화로 만들어둔 프로젝트 코드 참고하면서 공부한 것들을 정리해보려고 합니다.
(사실 정리는 회사 PC에 해뒀기 때문에,, 일단 기억나는 부분만 적어볼게요..)
과제도 내주셔서 차차 블로그에 공부기록 남길 예정입니다.
.gitlab-ci.yml
: cicd 파이프라인 정의Dockerfile
: 컨테이너 이미지 생성 시 사용deployment.yml
: k8s에 배포할 리소스 정의# stage는 5개로 구성 되어 있다.
stages:
- build # `main` 브랜치에서 최종 배포시 사용하는 stage
- image-build # build해서 jar 파일 생성하고 컨테이너 이미지 생성
- image-push # 생성한 컨테이너 이미지 repo에 push
- image-mirgration # `dr` 브랜치에서 사용하는 stage
- deploy # 각 환경에 배포
# 참고로 아직 `dev` 브랜치만 분석한 상태이기 때문에
# dev 브랜치에서 사용하는 stage만 적을 예정^.^
dev
브랜치 기준image-build:
stage: image-build
before-script: ./mvn clean # 빌드하기 전에 이전 출력을 정리하는 과정
script: ./mvn package -DskipTests # 자바 프로젝트를 컴파일하고 패키지로 만들 때,
# 단위 테스트를 건너뛰고 직접 패키지 생성 단계로 이동
image-build:
stage: image-push
script: docker build -t {이미지명}:{태그명} -f {Dockerfile 경로} .
# 현재 디렉토리를 기준으로 {경로}/Dockerfile에 정의된 지침에 따라 Docker 이미지를 빌드
production:
stage: deploy
script:
- kubectl config use-context $CLUSTER
# 현재 작업 환경에서 사용할 컨텍스트를 변경하는 kube 명령어
# 컨텍스트? 클러스터, 사용자, 네임스페이스의 조합을 의미
- sed -i -e "s#{{PN}} #$CI_PROJECT_NAME#g" ... $DEPLOYMENT_YAML_PATH
# deployment.yml에 있는 {{변수}}들의 값을 $의 값으로 파일 수정
- kubectl delete -f #PATH || true
# 이전에 있는 k8s 리소스 삭제
# || true: 명령이 실패하더라도 (삭제하려는 리소스가 존재하지 않는 경우), 스크립트 전체가 실패 상태로 종료되는 것을 방지
- kubectl apply -f deployment.yaml
# 수정된 deployment.yaml을 기반으로 k8s 리소스 생성
우리 회사 환경에 맞게 짜여졌기 때문에 과제는 가장 보편적인 코드를 참고해서 짜보도록 하겠습니다~