주녁, DevNote
article thumbnail
Published 2023. 1. 18. 22:50
Let's Go Docker (3) - 심화편 DevOps

지적과 댓글은 언제나 환영합니다!

 

변경사항을 Docker로 자동 배포하기

변경사항을 감지하고 배포하려면

CI/CD 파이프라인 구축을 먼저 알아야한다.

 

CI/CD 파이프라인을 구축하는 방법은

버전 관리 플랫폼별로 다르다.

 

대표적으로 Github Action, Gitlab, Terraform 등이 있으나

Github Action으로 진행해보도록 하겠다.

 


Github Action을 이용한 CI/CD

 

Github는 사용자가 CI/CD 도구를 직접 통합해야 한다.

선택지로 Jenkins, CircleCI, TravisCI 등이 있다

 

필자는 현재 이 블로그도 Github Action으로 자동 배포하고 있다.

그 때의 빌드 스크립트를 재활용해보자.

자세한 설명은 주석을 참고하자.

 

# 알아두기
중간중간 보이는 secret들은 저장소 내 환경변수로,
Repository 상단 Settings > Secrets에서 설정할 수 있다.
name: App Deployment # 이 스크립트의 제목

# 어떤 행동을 할때마다 실행할지
on:
  # master, release/v*라는 이름의 브랜치에 push가 발생할 때마다
  # ex) release/v0.1, release/v2.1.5
  push:
    branches:
      - master
      - release/v*

  # feature, fix 브랜치에 pull_request가 발생할 때마다
  pull_request:
    branches:
      - feature-*
      - fix-*

# 실행할 작업을 순서대로 정의함
jobs:
  build:
    runs-on: ubuntu-latest
    steps:

    # 체크아웃
    - name: checkout
      uses: actions/checkout@v3

    # JDK 설치
    - name: Set up JDK 11
      uses: actions/setup-java@v3
      with:
        java-version: '11'
        distribution: 'temurin'

    # DB 설정 파일 생성
    # 중요 정보는 Github Secret에서 복사해온다.
    - name: make application-database.yaml
      run: |
        # create application-database.yaml
        cd ./src/main/resources

        # application-database.yaml 파일 생성
        touch ./application-database.yaml

        # GitHub-Actions 에서 설정한 값을 application-database.yaml 파일에 쓰기
        echo "${{ secrets.DATABASE }}" >> ./application-database.yaml
      shell: bash

    # gradle 빌드
    # maven 빌드 : mvn package
    - name: Build with Gradle
      run: ./gradlew bootJar


    # 웹 이미지 빌드 및 도커허브에 push
    - name: web docker build and push
      run: |
        docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
        docker build -t ${{ secrets.DOCKER_REPO }}/second-eyes-web .
        docker push ${{ secrets.DOCKER_REPO }}/second-eyes-web

위 스크립트를 Github Action을 통해 동작시키면

빌드 -> 배포 -> 도커 이미지화까지 한번에 처리할 수 있다.

추가적으로 실행까지 하려면 아래 Docker Compose 스크립트를 추가하면 된다.

Docker Compose의 개념이 생소할 수 있겠지만,

실행 정보까지 추가해주는 것으로 생각하면 좋다.

    ## docker compose up
    - name: executing remote ssh commands using password
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.HOST }}
        username: ubuntu
        key: ${{ secrets.KEY }}
        script: |
          sudo docker rm -f $(docker ps -qa)
          sudo docker pull ${{ secrets.DOCKER_REPO }}/second-eyes-web
          sudo docker pull ${{ secrets.DOCKER_REPO }}/second-eyes-nginx
          docker-compose up -d
          docker image prune -f




출처

wjdrbs96님 블로그

stalker5217님 블로그

rmswjdtn님 블로그

'DevOps' 카테고리의 다른 글

MSA Dockerizing (3) - 발전시키기  (0) 2023.01.19
MSA Dockerizing (2) - 다듬기  (0) 2023.01.19
MSA Dockerizing (1) - 시작하기  (0) 2023.01.19
Let's Go Docker (2) - 실습편  (0) 2023.01.18
Let’s Go Docker (1) - 개념편  (1) 2023.01.18
profile

주녁, DevNote

@junwork

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!