프로젝트 진행 중에 CI/CD 를 작업을 위해 git Action을 써보았다.
이전에 젠킨스 강의를 들은 덕에 뭔가 개념 이해는 되지만 실전은 녹록치 않았던 작업이었다. 특히 CD 부분...
총 17번의 실패를 겪었고 이에 대한 해결 방법도 기술 해보려고 한다.

[New workflow 생성]
구성하고 싶은 리파지토리의 상단탭에서 Action을 클릭하고 왼쪽의 New workflow를 생성한다.
gradle 을 검색하면 Java with Gradle 이라는 workflow를 클릭한다.


[gradle.yml 작성]
아래와 같이 기본으로 제공되는 gradle.yml 파일이 생성 된다.

이제 자세하게 yml 파일을 작성 해 보자. 이것만 잘 작성하면 거의 90%는 성공이라고 보지만 작성이 쉽지 않았다.
환경 설정이 모두 다르다 보니 블로그 글들을 관심법으로 삭 봐서 내 환경 설정에 맞춰야 하기 때문이다.
아무튼 내가 개발 한 환경을 간단하게 적어 보자면
Spring boot를 이용하고 GCP에 서버 배포 (docker 사용) 를 하였다.
따러서 내 gradle.yml 파일은 아래와 같다.
name: CI/CD
on:
push:
branches: ["backdev"]
permissions:
contents: read
jobs:
spring-build:
runs-on: ubuntu-latest
steps:
- name: 레파지토리 체크아웃
uses: actions/checkout@v4
- name: JDK 17 세팅
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Gradle 세팅
uses: gradle/actions/setup-gradle@v4
- name: application.properties 생성
run: |
mkdir -p src/main/resources
echo "${{ secrets.APPLICATION_PROPERTIES }}" | base64 --decode > src/main/resources/application.properties
- name: gradlew 빌드
run: |
cd ReadingLogBackend
chmod +x gradlew
./gradlew build -x test
- name: 도커허브 로그인
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_ID }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: 도커이미지 빌드
run: |
cd ReadingLogBackend
docker build -t ${{ secrets.DOCKERHUB_ID }}/readinglog-app:latest .
- name: Push Docker image to Docker Hub
run: |
docker push ${{ secrets.DOCKERHUB_ID }}/readinglog-app:latest
deploy:
runs-on: ubuntu-latest
needs: spring-build
steps:
- name: 배포
uses: actions/checkout@v4
- name: .env 파일 생성
run: |
echo "NAVER_CLIENT_ID=${{ secrets.NAVER_CLIENT_ID }}" >> .env
echo "NAVER_CLIENT_SECRET=${{ secrets.NAVER_CLIENT_SECRET }}" >> .env
echo "NAVER_REDIRECT_URI=${{ secrets.NAVER_REDIRECT_URI }}" >> .env
echo "KAKAO_API_KEY=${{ secrets.KAKAO_API_KEY }}" >> .env
echo "KAKAO_REDIRECT_URI=${{ secrets.KAKAO_REDIRECT_URI }}" >> .env
echo "VITE_ALADIN_API=${{ secrets.VITE_ALADIN_API }}" >> .env
- name: .env 파일 GCP에 복사
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.GCP_HOST }}
username: ${{ secrets.GCP_USERNAME }}
key: ${{ secrets.GCP_PRIVATEKEY }}
port: 22
source: ".env"
target: "/home/readingLog"
overwrite: true
debug: true
- name: 도커컴포즈 GCP에 복사
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.GCP_HOST }}
username: ${{ secrets.GCP_USERNAME }}
key: ${{ secrets.GCP_PRIVATEKEY }}
port: 22
source: "ReadingLogBackend/docker-compose.yml"
target: "/home/readingLog"
overwrite: true
strip_components: 1
debug: true
- name: GCP에 배포
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.GCP_HOST }}
username: ${{ secrets.GCP_USERNAME }}
key: ${{ secrets.GCP_PRIVATEKEY }}
port: 22
script: |
sudo docker login -u ${{ secrets.DOCKERHUB_ID }} -p ${{ secrets.DOCKERHUB_TOKEN }}
sudo docker pull ${{ secrets.DOCKERHUB_ID }}/readinglog-app:latest
cd /home/readingLog
sudo docker-compose down || true
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
각 name 에 해당 하는 작업은 아래의 글에서 확인 가능!
git Action으로 Spring boot CI/CD 환경 구축 - gradle.yml 작성
[git Action 이름 설정 ]name: Java CI/CD with Gradle and Docker //Action의 이름 [워크플로우 트리거 설정] backdev 브랜치에 푸시 할 때마다 발생 하게 할 것이라는 의미 on: push: branches: ["backdev"]아래는 다른 트리
henniee.tistory.com
[비밀키 등록]
yml 파일에서 사용 했던 {secrets.키 이름} 을 따로 등록 해주어야 한다. 상단탭 setting을 클릭하면 왼쪽 사이드 바에 security 가 있다.
마지막 요소인 Secrets and variables의 Action을 클릭해 준다. 거기서 New repository secret 클릭 후 yml 파일에 작성한 키 이름과 동일하게 작성한다. 그리고 Add secret 를 눌러주면 끝!



[완성]
비밀키까지 등록 했다면 gradle.yml 에서 작성한 on: 에 해당하는 액션을 취해주면 자동으로 CI/CD 파이프라인이 실행 된다.

완성...!
'git' 카테고리의 다른 글
| GitHub Actions에서 "sudo: a terminal is required" 오류 해결 방법 – SSH 배포 자동화 시 필수 체크포인트 (0) | 2025.07.05 |
|---|---|
| git Action으로 Spring boot CI/CD 환경 구축 - gradle.yml 작성 (1) | 2025.05.16 |
| [Github] README.md 에 gif 파일 올리기 (0) | 2024.11.26 |
| [Github] README.md 에 코드 블록 작성하기 (0) | 2024.11.25 |
| Git Commit Convention (1) | 2024.09.06 |