728x90

들어가기에 앞서

docker image 를 build 하여 docker image 저장소에 빌드를 하는 이유는 뭘까?

프로젝트를 하다보니 프로젝트 가 무거워지면서 점점 빌드하는 시간이 길어지고 Cloud vm에 좀더 빠르게 개발서버를 Run하기 위해서 도입하게 되었습니다.

이 글에서는 지속적인 배포 (CD) 에 대해서는 설명하지 않습니다. vm 이나 Azure app에 git push후 자동 배포후 실행까지 다루는 정보는 추후에 제가 조금더 공부해서 작성하도록 하겠습니다.

 

Azure set up

먼저 Azure docker registry를 만든뒤 Username 과 password 를 기억해주세요

gitlab plan을 비즈니스나 프로로 쓰시는분들은 gitlab에 있는 docker registry를 사용하셔도 무방합니다

 

gitlab runner 설치하기

gitlab runner 를 설치해야 gitlab에서 파이프라인을 실행 할 수 있습니다.

 

 

runner 를 설치하는 방법입니다.

 

sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

sudo chmod +x /usr/local/bin/gitlab-runner

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner

sudo gitlab-runner start

sudo gitlab-runner register --url https://gitlab.com/ --registration-token $REGISTRATION_TOKEN

 

ubuntu 를 기반으로 작성하였습니다.

 

윈도우 또는 Macos에서 작성하실려고하시는 분들은 아래 문서를 참고해주세요

https://docs.gitlab.com/runner/install/

 

Install GitLab Runner | GitLab

Documentation for GitLab Community Edition, GitLab Enterprise Edition, Omnibus GitLab, and GitLab Runner.

docs.gitlab.com

 

 

gitlab runner 가 등록되었습니다.

 

 

gitlab ci yml작성하기

stages:
  - build
  - test
  - deploy

build_prod_image:
  services:
    - docker:dind
  stage: deploy
  image: docker:latest
  script:
  - docker login -u 아이디 --password "패스워드" mboard.azurecr.io
  - docker pull mboard.azurecr.io/mboard-image-prod:latest || true
  - docker build --cache-from mboard.azurecr.io/mboard-image-prod -t mboard.azurecr.io/mboard-image-prod .
  - docker push mboard.azurecr.io/mboard-image-prod
  - echo "Image pushed successfully for prod"
  only:
    - deploy

build_dev_image:
  services:
    - docker:dind
  stage: build
  image: docker:latest
  - docker login -u 아이디 --password 패스워드 mboard.azurecr.io
  - docker pull mboard.azurecr.io/mboard-image-dev:latest || true
  - docker build --cache-from mboard.azurecr.io/mboard-image-dev -t mboard.azurecr.io/mboard-image-dev .
  - docker push mboard.azurecr.io/mboard-image-dev
  - echo "Image pushed successfully for dev"
  only:
    - master

 

https://portal.azure.com/#@elbigs.onmicrosoft.com/resource/subscriptions/00848046-1749-4daf-85d3-01536a93c129/resourceGroups/MenuboardResourceGroup-PROD/providers/Microsoft.ContainerRegistry/registries/mboard/quickStart

 

Microsoft Azure

 

portal.azure.com

Quick start 를 기반으로 작성하였습니다.

 

하나하나 살펴보겠습니다.

 

stages 에 들어있는 키워드 하나하나 가 gitlab runner에 있는 tag 리스트에 포함되어 있어야 실행 가능합니다.

 

services 에서 docker:dind 를 적어준 이유는 docker 안에서 docker 명령어를 실행하기 위해서 입니다.

처음에 docker registry에 로그인합니다. 그런뒤 이미지가 있으면 pull 해서 캐싱합니다. 없다면 그냥 빌드합니다.

빌드가 완료되면 push 합니다. 요기서 push 될때 주의하실점은 image 명과 tag 가 같으면 덮어 씌어집니다. 이게 싫으신 분들은 tag 를 따로 주셔야 할거 같습니다.

 

개발과 배포 환경 나눠서 빌드하려고 단계를 2개로 나눴고 only로 브랜치 를 강제하였습니다.

 

gitlab runner success!!

 

로그를 보니 push가 성공적으로 잘 되었습니다.

저장소에 이미지가 잘 들어 왔네요 아직 맨땅에 헤딩을 하면서 기록을 남기는 중이라 좀 더 좋은방법이 있따면 수정하겠습니다.

728x90