구성한 파이프라인이 정상적으로 돌아가는 아주 간단한 project로 테스트를 진행한다
stages: # List of stages for jobs, and their order of execution
- build
get-latest-git-version:
stage: .pre
image:
name: alpine/git
entrypoint: [""]
script:
- |
git clone https://$GIT_USERNAME:$GIT_PWD@gitlab.example.kr/ShinGyeongseon/demo-pipeline.git
cd demo-pipeline
pwd
build-job: # This job runs in the build stage, which runs first.
stage: build
image:
# 구글 공식 kaniko 이미지 repository 사용
# debug 태그 이미지를 사용해야 파이프라인 출력 내용 확인 가능
name: gcr.io/kaniko-project/executor:debug
# entrypoint를 override 하지 않으면 아래 script 커맨드들이 실행되지 않음
entrypoint: [""]
script:
# registry 접속 정보를 저장하기 위한 디렉토리 생성
- mkdir -p /kaniko/.docker
# Gitlab > Repository > Setting > CI/CD > Variables 사용
# HARBOR_URL : harbor.example.com
# HARBOR_USER : username
# HARBOR_PASSWORD : userpassword
- echo "{\"auths\":{\"$HARBOR_URL\":{\"username\":\"$HARBOR_USER\",\"password\":\"$HARBOR_PASSWORD\"}}}" > /kaniko/.docker/config.json
# Gitlab에 미리 정의된 Variables 사용
# CI_PROJECT_DIR : Dockerfile을 포함한 Source Repositry 경로
# CI_COMMIT_SHORT_SHA : Commit SHA의 앞 8자를 tag로 사용
- |
cat /builds/ShinGyeongseon/demo-pipeline/Dockerfile
- /kaniko/executor --context dir://$CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $HARBOR_URL/$CI_PROJECT_PATH:$CI_COMMIT_SHORT_SHA
- /kaniko/executor --context dir://$CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $HARBOR_URL/$CI_PROJECT_PATH:latest
[Kaniko] Gitlab CI를 위해 Docker 대신 사용할 수 있는 이미지 빌드 툴
kaniko 참고한 내용입니다.
위에서 환경변수처럼 사용되는 변수들이 존재한다. gitlab에서는 변수 생성할 수 있으며 log에 남기기 민감한 정보들은 마스킹도 가능하다. pwd와 같은 민감정보들은 마스킹 하는 것을 권장한다.
변수 메뉴: 왼쪽 메뉴 → settings → CI/CD → **Variables 에서 설정할 수 있습니다.**
FROM ubuntu
ENTRYPOINT ["/bin/bash", "-c", "echo Hello"]
helm create 를 통해서 간단한 helm chart 를 생성했고 image registry 만 harbor에 생성된 이미지를 보도록 설정하였습니다.
Argo 에 대해서 디테일하게 원리까지 이해하고 싶다면 위 글을 추천합니다.
만약 빠르게 배포를 확인해보고 싶다면
위 속성들을 보고 빠르게 설정하면 된다.
단 배포 패키지를 여러가지를 선택할 수 있다. 나의 경우는 HELM 을 선택했습니다. 해당 설정은 create app 할 때 맨 아래에서 변경할 수 있습니다.
그리고 path의 경우는 manifests이 있는 위치를 말해주면 됩니다.
도커파일을 보게되면 Hello만 출력되도록 설정했습니다.
(원래는 pod 를 통해 서비스가 살아 있다면 초록색으로 표시되는게 맞습니다.)