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
워크플로우 이름입니다.

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 |
---|