Git/GitLab

GitLab CI Container 이미지 빌드와 GitLab Registry

김 정출 2024. 7. 8. 23:34

Deploy 에서 Container Registry를 클릭합니다.

Registry에 로그인 진행이 필요합니다.

docker login registry.gitlab.com

docker build -t registry.gitlab.com/[ORGANIZATION]/[REPOSITORY_NAME] .

docker push registry.gitlab.com/[ORGANIZATION]/[REPOSITORY_NAME]

Golang 기반의 Gin Web-framework 서버를 빌드하기 위한 Dockerfile을 작성합니다.

FROM golang:1.22 AS builder

# copy source files from current directory
COPY . /go/src/xxx-api-server

WORKDIR /go/src/xxx-api-server

RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-s' -o xxx-api-server main.go

FROM alpine:3.20.0

WORKDIR /root/
COPY --from=builder /go/src/xxx-api-server/xxx-api-server .
RUN chmod 755 $HOME/xxx-api-server

USER $USER

ENTRYPOINT ["./xxx-api-server"]

다음은 이전의 .gitlab-ci.yml에 다음을 추가합니다.

  • services: dind→ Docker in Docker
    • 해당 Services를 명시해야 빌드 시에 이슈가 없습니다.
  • variables
  • Container build, test stage에서는 before_script에 docker login을 명시합니다.
variables:
  REPO_NAME: gitlab.com/<organization>/<repository>
  DOCKER_IMAGE: registry.gitlab.com/<organization>/<repository>
  TAG: $CI_COMMIT_REF_SLUG-$CI_COMMIT_SHA
  DOCKER_HOST: tcp://docker:2375
  DOCKER_TLS_CERTDIR: ""
  DOCKER_DRIVER: overlay2

services:
  - docker:dind
...

before_script:
  - echo "start job at :" `date`
  - echo "workspace is:" `pwd`

stages:
  - check
  - build
  - container-build
  - container-test

container-build:
  image: docker:latest
  services:
  - docker:dind
  stage: container-build
  script:
    - docker build --platform linux/x86_64 -t $DOCKER_IMAGE:$TAG .
    - docker push $DOCKER_IMAGE:$TAG
  before_script:
    - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY

container-test:
  image: docker:latest
  services:
  - docker:dind
  stage: container-test
  script:
    - docker pull $DOCKER_IMAGE:$TAG
    - docker run --rm $DOCKER_IMAGE:$TAG
  before_script:
    - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY

Code가 Push됨에 따라 Pipeline이 실행됩니다.

container-build stage 입니다.

다음은 Container Test가 진행됩니다.

완료가 되면 Container Registry에서 빌드된 이미지가 확인이 됩니다.

container image name을 클릭하면 Tag도 확인 가능합니다.

배포하는 환경에서는 다음의 명령어로 Container image를 pull로 가져올 수 있습니다.

docker login registry.gitlab.com
docker pull registry.gitlab.com/xxx/xxx-api-server:xxxxx-build-33a6e832eb84b2e7333339915b80f962590e2bf1