[CI/CD] Gitlab-ci.yml 작성 예제 - Docker Image Push
앞서 실행한 두 테스트 이후에, 우선적으로 이미지를 생성하는 작업을 진행하였다.
이유는 뒤이어 실행할 두 테스트 (SiteSpeed.io / JMeter)가 실제 동작중인 백엔드 서버가 필요하기 때문.
그래서 우선 이미지를 만들어 push하고 push한 이미지를 구동한 후에 테스트를 이어서 진행하고자 하였다.
해당 단계를 설명하기 전에, 구성하였던 CI/CD의 전반적인 과정은 다음과 같다.
1. JUnit 테스트
2. Jacoco 테스트
3. 테스트용 Docker image 생성 -> 이후 pipeline 일시정지
4. 사용자는 생성된 docker image로 서버를 구동(스크립트 등을 이용해)
5. 테스트 이어서 진행(Gitlab에는 pipeline 일시정지 기능이 있다!)
6. SiteSpeed 테스트
7. JMeter 테스트
8. Docker image 생성 및 구동
이중에서 지금은 3번과 8번에서 쓰일 yml의 구성 방법을 설명하고자 함
아무튼 그래서, gitlab에 커밋된 코드를 토대로 docker 이미지를 빌드하고, HARBOR에 push하는 yml은 다음과 같다.
before_script:
- apk update > /dev/null
- apk add ca-certificates > /dev/null
- cp -r /etc/gitlab-runner/ca.crt /usr/local/share/ca-certificates
- update-ca-certificates --fresh > /dev/null
- docker login -u "${HARBOR_USER}" -p "${HARBOR_PASSWORD}" "${HARBOR_REGISTRY}"
script:
// docker image를 빌드하고 push하는 과정
- docker build --tag "${HARBOR_REGISTRY}"/devopst-test/test:test_tag .
- docker push "${HARBOR_REGISTRY}"/devopst-test/test:test_tag
이 때, ca.crt 파일은 넣어주어야 함.
HARBOR_USER와 HARBOR_PASSWORD는 gitlab에 kube의 secret과 같이 변수를 넣어줄 수 있다.
gitlab의 설정-CI/CD에 들어가면 변수를 넣어줄 수 있는데 이를 사용한 것.
과정은 crt 파일을 옮겨서 runner container에 적용시키고, docker login을 수행하는 과정을 우선 진행함.
before_script는 하단의 script부분이 실행되기 전에 무조건 먼저 실행되는 부분이기에 필요한 설정을 여기서 진행
script 부분은 빌드 후 push로, 필요하면 run도 수행시킬 수 있음!