개발/devOps

[docker] 쉽고 빠른 서비스를 향해 (3)

김키쿠 2023. 12. 9. 19:58

https://kiku99.tistory.com/14

 

[docker] 쉽고 빠른 서비스를 향해 (2)

https://kiku99.tistory.com/13 [docker] 쉽고 빠른 서비스를 향해 (1) 때는 바야흐로 2020년. 코로나로 인해 비대면 수업을 하던 시절이었다. 1년동안 아무도 학교에 나오지 않았고, 학과 회장 선거에 비상이

kiku99.tistory.com

지난 글에서 봤듯이 시스템 구축은 끝났다. 남은 작업은 CI/CD pipeline과 readme를 작성하는 것 뿐.

 

CI/CD pipeline은 github acitons를 통해 구축하기로 했다. github actions는 yaml 파일을 통해 간단하게 파이프라인을 구축할 수 있다는 장점을 가지고 있다. 

name: "[Push] Build dev"

on:
  push:
    branches:
      - master
    paths-ignore:
      - '.github/**'
      - 'README.md'
  workflow_dispatch:

jobs:
  versioning:
    runs-on: ubuntu-latest
    outputs:
      version: ${{ steps.versioning.outputs.VERSION }}
    steps:
      - uses: actions/checkout@v2
      - name: get current date
        run: |
          sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
          echo "TIME=$(date +'%Y%m%d.%H%M%S')" >> $GITHUB_ENV

      - name: set version with current date
        id: versioning
        run: |
          echo "VERSION=${{ env.TIME }}" >> $GITHUB_OUTPUT
          echo "::set-output name=VERSION::${{ env.TIME }}"

  docker:
      needs: versioning
      runs-on: ubuntu-latest
      env:
        VERSION: ${{ needs.versioning.outputs.version }}
      steps:
        - uses: actions/checkout@v2
        - name: get service name
          run: |
            echo "SERVICE=$(echo ${{ github.repository }} | cut -d '/' -f2)" >> $GITHUB_ENV

        - name: Upload docker
          uses: docker/build-push-action@v1
          with:
            path: .
            repository: ampmjbnu/${{ env.SERVICE }}
            username: ${{ secrets.DOCKER_USERNAME }}
            password: ${{ secrets.DOCKER_PASSWORD }}
            tags: ${{ env.VERSION }}

 

workflow 디렉터리 안에 위와 같은 yaml파일을 작성했다. 작업은 버저닝과 도커라이징 두 가지로 구성했다. 요약하자면 master 브랜치에 변경이 일어나면 현재 프로젝트의 버전을 정의한다. 그 다음 프로젝트의 도커 파일을 실행함과 동시에 도커 허브에 이미지가 push된다.

대충 이런 흐름

 

하지만 고민거리가 생겼다. 지금 프로젝트의 컨테이너가 정상적으로 실행이 되려면 프로덕션 서버와 같은 환경을 만들어 주어야 하는데 로컬 환경에서 테스트를 해야하는 입장이라면 꽤 번거로운 일이다. 즉 테스트가 용이하지 않기 때문에 테스트 환경을 새로 만들어 주었다. github에 dev라는 브랜치를 새로 파고 테스트 환경을 구축했다. 이 브랜치에서는 도커 컨테이너로 시스템이 실행되지 않고 로컬 환경에서 실행된다. 

 

이제 readme만 잘 작성해주면 프로젝트는 끝!

 

뭐 이런 느낌으로 열심히 썼는데 다음 인수자가 잘 이해했으면 좋겠으면 하는 바람이다. dev 브랜치에서 테스트하다가 master 브랜치로 병합하진 않겠지...? 그러면 큰일나

 

아무튼 작년 10월부터 진행한 프로젝트가 마무리되었다. 개발 기간에 비해 내용이 많진 않지만 컨테이너와 자동화를 통해 프로젝트를 한층 더 단단하게 만들었다는 점에 의의를 둔다. 프로젝트를 진행하면서 도커에 대해 더 익숙해질 수 있었고 아름다운 배포 환경을 위해 고민해보는 경험도 좋았던 것 같다. 앞으로도 개발부터 배포까지 근사한 환경을 구축하는 사람이 되었으면!