Git/GitLab

GitLab CI를 활용한 Harbor Registry로 Container Image Push

김 정출 2024. 8. 31. 23:21

GitLab CI를 활용한 Harbor Registry로 Container Image Push

지난번 글에서 GitLab을 통해 Runner를 등록해보았습니다.

https://jeongchul.tistory.com/717

 

GitLab Project Runner using Docker

GitLab Project Runner using DockerGitLab에서 기본으로 제공되는 Runner 를 활용하여 CI를 이용하던 도중에 Pipeline의 Jobs 다음의 에러와 함께 실패가 되고 있었습니다.Email과 Google Chats에도 실패된 Alarm 들..실

jeongchul.tistory.com

이번 글에서는 Tag를 Push하면 빌드된 Container Image가 Harbor에 Push 되도록 설정을 진행해보겠습니다.

Reference: https://docs.gitlab.com/ee/user/project/integrations/harbor.html

 

Harbor | GitLab

GitLab product documentation.

docs.gitlab.com

 

GitLab 설정

Repoistory에서 Settings의 Integrations 메뉴를 클릭합니다.

Integrations 페이지에서 Harbor를 검색하고 Configure 클릭합니다.

다음에서 Harbor URL과 Project name 및 Username 그리고 password를 입력합니다. 완료 후 Test settings를 눌러 정상적으로 연결되는지 확인합니다.

Harbor Integration 설정이 완료되면 다음의 글로벌 변수$HARBOR_USERNAME, $HARBOR_HOST, $HARBOR_OCI, $HARBOR_PASSWORD, $HARBOR_URL and $HARBOR_PROJECT 가 생성되며 CI/CD에 활용됩니다.

Deploy 메뉴에서 Harbor Registry를 클릭합니다.

선 등록된 Container Image 들을 확인할 수 있습니다.

GitLab CI

Tag를 Push하면 빌드된 Container Image가 Harbor에 Push 되도록 설정을 진행해보겠습니다.

다음은 .gitlab-ci.yaml 파일을 수정합니다.

  • DOCKER_IMAGE : $HARBOR_HOST/$HARBOR_PROJECT/[REPOSITORY_NAME]
  • TAG : $CI_COMMIT_REF_NAME
  • before_script: echo "$HARBOR_PASSWORD" | docker login -u "$HARBOR_USERNAME" --password-stdin "$HARBOR_HOST"
    variables:
      REPO_NAME: gitlab.com/xxx/xxx-api-server
      DOCKER_IMAGE: $HARBOR_HOST/$HARBOR_PROJECT/xxx-api-server
      TAG: $CI_COMMIT_REF_NAME
      DOCKER_HOST: tcp://docker:2375
      DOCKER_TLS_CERTDIR: ""
      DOCKER_DRIVER: overlay2
      
     ...
    
    container-build-push:
      stage: container-build-push
       image: docker:latest
       rules:
         - if: $CI_COMMIT_TAG # Run this job when a tag is created
      variables:
        # using "docker" as the host is only possible if you alias the service below
        DOCKER_HOST: tcp://docker:2375
        # could be wrong here but although Docker defaults to overlay2,
        # Docker-in-Docker (DIND) does not according to the following GitLab doc:
        # https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-the-overlayfs-driver
        DOCKER_DRIVER: overlay2
        DOCKER_TLS_CERTDIR: ""
      services:
      - name: docker:dind
        alias: docker
        command: ["--tls=false"]
      script:
        - docker build --platform linux/x86_64 -t $DOCKER_IMAGE:$TAG .
        - docker push $DOCKER_IMAGE:$TAG
      before_script:
        - echo "$HARBOR_PASSWORD" | docker login -u "$HARBOR_USERNAME" --password-stdin "$HARBOR_HOST"

.gitlab-ci.yaml을 Push하고 Tag를 달아봅니다.

git tag -a alpha-v1.0.0 -m"Release version alpha-v1.0.0 for GitLab CI Harbor"
git push origin alpha-v1.0.0

Tag를 배포하면서 위에서 설정한 Pipeline 중 Container Image Push가 실행됩니다.

Harbor

Container Image가 Push 되었는지 확인을 해봅니다.

다음 글에서는 Kubernetes에서 Harbor 구축 진행을 설명 드리겠습니다.

감사합니다.