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
- 다음의 3개 변수 설정은 필수 입니다.
- DOCKER_HOST: 내부에 Docker host를 명시합니다.
- DOCKER_TLS_CERTDIR: SSL 관련 cert 설정 해제
- DOCKER_DRIVER: Docker 드라이버 설정
- https://gitlab.com/gitlab-org/charts/gitlab/-/issues/478
- DOCKER_IMAGE : GitLab registry를 포함한 organization과 repoistory
- TAG: Docker image의 tag를 명시, GitLab에 Predefined된 변수를 활용
- 다음의 3개 변수 설정은 필수 입니다.
- 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
'Git > GitLab' 카테고리의 다른 글
GitLab CI를 활용한 Harbor Registry로 Container Image Push (1) | 2024.08.31 |
---|---|
GitLab Group Runner Docker Container (1) | 2024.07.24 |
GitLab Runner Docker Build Daemon 2375 port issue (0) | 2024.07.24 |
GitLab Project Runner using Docker (0) | 2024.07.20 |
GitLab CI Golang 배포 (0) | 2024.07.08 |