
🔥이전 시리즈들을 통합하여 github actions로 ci/cd를 구축하려합니다🔥
[Naver Cloud] 웹서버 구축시리즈: 바로가기
[Docker] 도커를 이용한 서버 배포: 바로가기

CI/CD의 기본 개념
CI/CD는 '지속적 통합(Continuous Integration)'과 '지속적 배포(Continuous Deployment)'를 아우르는 개발 방법론입니다. 이는 개발자가 코드를 작성하는 순간부터 실제 사용자에게 서비스를 제공하는 순간까지의 모든 과정을 자동화하는 것을 목표로 합니다.
지속적 통합(CI)은 여러 개발자의 코드 변경사항을 정기적으로 통합하는 프로세스입니다. 각자 작업한 코드 조각들이 전체 시스템과 잘 맞는지 자동으로 확인하고 검증합니다.
지속적 배포(CD)는 통합된 코드를 실제 운영 환경에 자동으로 배포하는 과정입니다. 때로는 '지속적 전달(Continuous Delivery)'이라는 중간 단계를 포함하기도 하는데, 이는 배포 전에 수동 승인 단계를 두는 보다 신중한 접근 방식입니다.
출처: https://blog.kakaocloud.com/138
서버에서 다음 명령어로 ssh키를 생성하겠습니다
$ ssh-keygen -t rsa -b 4096 -C "github-actions"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
$ cat ~/.ssh/id_rsa.pub
# 서버에 로그인
$ ssh [사용자명]@[서버_공인_IP]
# authorized_keys에 공개 키 등록
$ mkdir -p ~/.ssh
$ echo "공개 키 내용" >> ~/.ssh/authorized_keys
# 권한 설정
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ cat ~/.ssh/id_rsa


로컬 환경에서 다음 명령어로 GitHub Actions가 서버에 접속할 수 있는지 확인!
$ ssh -i ~/.ssh/id_rsa [사용자명]@[서버_공인_IP]
------------------------------------------------------------------------------------------------------------
// //
////// ////// // //// // // //////
// // // // // // // // // //
// // // // // // // // // //
// // ////// // //// ////// //////
Welcome to Naver Cloud Platform Server!
Authorized access only!
If you are not authorized to access this system, disconnect now!
------------------------------------------------------------------------------------------------------------
Activate the web console with: systemctl enable --now cockpit.socket
서버 접속 성공!
이제 GitHub Actions에서 Gradle 빌드와 Docker 배포를 자동화하는 gradle.yml 파일을 만들어보겠습니다
name: CI/CD with Gradle and Docker
on:
push:
branches:
- main # main 브랜치에 푸시할 때 실행
jobs:
build:
runs-on: ubuntu-latest
steps:
# 코드 체크아웃
- name: 소스 코드 체크아웃
uses: actions/checkout@v4
# JDK 설정
- name: JDK 17 설정
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
# Gradle 캐시 설정 (빌드 속도 향상)
- name: Gradle 캐시 설정
uses: actions/cache@v4
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle
# Gradle 빌드
- name: Gradle 빌드 및 테스트
run: |
chmod +x gradlew
./gradlew clean build -x test
# Docker 이미지 빌드
- name: Docker 이미지 빌드
run: |
docker build -t my-app:${{ github.sha }} .
# 서버에 Docker 이미지 배포
- name: 서버에 Docker 배포
uses: appleboy/ssh-action@v0.1.10
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
docker stop my-app || true
docker rm my-app || true
docker pull my-app:${{ github.sha }}
docker run -d -p 8080:8080 --env-file .env --name izikgram kokiyo1030/izikgram:${{ github.sha }}
GitHub 저장소의 Settings → Secrets and variables → Actions
main 브랜치에 코드를 푸시하면 GitHub Actions가 자동으로 실행됩니다!

다음 내용은 오류 수정에 대해...