git action CI/CD, deploy.yml 작성해보기

728x90

경로

프로젝트 .github/workflows/deploy.yml

 

name: Docker Build and Deploy via SSH

on:
  push:
    branches:
      - main # 배포할 브랜치 지정

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
            java-version: '17'
            distribution: 'temurin'

      - name: Build with Gradle
        run: ./gradlew clean build -x test

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Log in to GHCR
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GHCR_TOKEN }}

      - name: Build and push Docker image
        uses: docker/build-push-action@v5
        with:
          context: .
          file: ./Dockerfile
          push: true
          tags: ghcr.io/${{ github.repository }}:${{ github.sha }}

  deploy-via-ssh:
    needs: build-and-push # 이미지 빌드 후 실행
    runs-on: ubuntu-latest
    steps:
      - name: Install SSH key
        uses: shimataro/ssh-key-action@v2
        with:
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          known_hosts: 'just-a-placeholder-so-we-can-disable-strict-host-key-checking'

      - name: SSH into server and deploy container
        run: |
          ssh -o StrictHostKeyChecking=no -p ${{ secrets.REMOTE_SSH_PORT }} ${{ secrets.REMOTE_SSH_USERNAME }}@${{ secrets.REMOTE_SSH_HOST }} << EOF
            echo "${{ secrets.GHCR_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
          
            docker pull ghcr.io/${{ github.repository }}:${{ github.sha }}
          
            docker stop demo-app || true && docker rm demo-app || true
          
            docker run -d \
              --name demo-app \
              -p 8888:8888 \
              ghcr.io/${{ github.repository }}:${{ github.sha }}
          EOF

name: Docker Build and Deploy via SSH

워크플로우 이름입니다.

etc-image-0

on:
  push:
    branches:
      - main

트리거 조건입니다.

- main 브랜치에 push 이벤트가 발생하면 이 워크플로우를 실행한다.

 

jobs:
  build-and-push:

워크플로우의 작업이고, 

build-and-push 는 Docker 이미지를 빌드하고 GitHub Container Registery(GHCR)에 푸시하는 작업입니다.

 

runs-on: ubuntu-latest

이 작업은 ubuntu-latest 환경에서 실행된다를 명시해줍니다.

 

- name: Checkout repository
  uses: actions/checkout@v4 
  // 현재 레포지토리를 체크아웃하여 워크플로우에서 사용할 수 있도록 함.
  
- name: Set up JDK 17
  uses: actions/setup-java@v4
  with:
      java-version: '17'
      distribution: 'temurin'
// JDK 17 환경을 설정하고 합니다.

- name: Build with Gradle
  run: ./gradlew clean build -x test
// Gradle 로 빌드, -x test 옵션은 테스트 단계를 생략하고 빌드만 실행 (기본 세팅 설정을 위한 pass)

- name: Set up Docker Buildx
  uses: docker/setup-buildx-action@v3
// Docker Buildx를 설정하여 멀티 플랫폼 이미지를 빌드 할 수 있게 준비

- name: Log in to GHCR
  uses: docker/login-action@v3
  with:
    registry: ghcr.io
    username: ${{ github.actor }}
    password: ${{ secrets.GHCR_TOKEN }}
// GitHub Container Registry(GHCR)에 로그인
// GHCR_TOKEN은 GitHub Secrets에서 제공, 인증

- name: Build and push Docker image
  uses: docker/build-push-action@v5
  with:
    context: .
    file: ./Dockerfile
    push: true
    tags: ghcr.io/${{ github.repository }}:${{ github.sha }}
// Dockerfile을 기반으로 이미지를 빌드하고 GHCR에 푸시.
// 태그는 ghcr.io/{리포지토리명} : {커밋 SHA} 형식.

 

도커 이미지를 빌드하고 GHCR에 푸시하는 작업까지의 설정

 

needs: build-and- // build-and-push 작업 완료 후 진행 작업
runs-on: ubuntu-latest // ubuntu-latest 환경에서 실행
- name: Install SSH key
  uses: shimataro/ssh-key-action@v2
  with:
    key: ${{ secrets.SSH_PRIVATE_KEY }}
    known_hosts: 'just-a-placeholder-so-we-can-disable-strict-host-key-checking'
// SSH 키 설정
// known_hosts 는 보안 경고를 무시하기 위한 설정 (기본 설정을 위한 pass)


- name: SSH into server and deploy container
  run: |
    ssh -o StrictHostKeyChecking=no -p ${{ secrets.REMOTE_SSH_PORT }} ${{ secrets.REMOTE_SSH_USERNAME }}@${{ secrets.REMOTE_SSH_HOST }} << EOF
      echo "${{ secrets.GHCR_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
      docker pull ghcr.io/${{ github.repository }}:${{ github.sha }}
// 원격 서버에 SSH로 접속하고, GHCR에 로그인하여 Docker 이미지를 가져옵니다.
      docker stop demo-app || true && docker rm demo-app || true
// 기존 컨테이너 중지 및 삭제
      docker run -d \
        --name demo-app \
        -p 8888:8888 \
        ghcr.io/${{ github.repository }}:${{ github.sha }}
    EOF
// 새 컨테이너 실행

 

 

Spring Boot, Java 17, Gradle 환경 git action, docker 를 이용한 CI/CD 기본 설정 완료.

반응형

'Git' 카테고리의 다른 글

Git gitmoji와 작성법 및 되돌리기, 취소 방법 정리  (0) 2022.11.22