CICD란?
CI (지속적 통합) : 작성된 코드를 통합하고, 자동화된 빌드 테스트를 거쳐 코드의 안정성을 확보하는 과정
CD (지속적 배포) : CI의 과정을 통해 준비된 코드가 프로덕션 환경에 자동으로 배포될 수 있도록 하는 과정
GitAction을 통해 내 레포지토리에 코드가 반영되면 실시간으로 자동화된 테스트를 거쳐 통합하고(CI), 빌드 산출물을 통해 자동으로 배포될 수 있도록 의도하였다.
내가 생각한 방법
Docker를 이용해 DB와 JAR 빌드 산출물을 각각 컨테이너 이미지로 생성하고, Docker Compose를 통해 동일한 실행 환경에서 통합·배포되도록 구성 후, 모든 빌드 및 배포 과정은 GitHub Actions 워크플로를 통해 자동으로 수행된다.
GitAction 명령어 알아보기
1. name
- 워크플로 이름
- GitHub Actions 탭에서 표시되는 이름
name: Java CI with Gradle
2. on
- 워크플로를 실행시키는 트리거(조건)
- 보통 push, pull_request, schedule 등으로 사용
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
3. jobs
- 실행할 작업 단위들을 정의
- 한 워크플로에 여러 job이 있을 수 있고, job은 병렬 혹은 순차적으로 실행
jobs:
build:
runs-on: ubuntu-latest
4. runs-on
- 해당 job이 어떤 환경(OS) 에서 실행될지를 지정
runs-on: ubuntu-latest # Linux 환경
# macos-latest, windows-latest 등도 가능
5. steps
- 하나의 job 안에서 실행할 단계들을 나열
- 순서대로 실행돼요.
steps:
- name: Checkout repository
uses: actions/checkout@v4
6. uses
- 다른 사람이 만든 GitHub Action(플러그인) 을 불러올 때 사용
- 예: Java 세팅, Gradle 캐싱, Docker 빌드 등.
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
7. run
- 직접 명령어를 실행할 때 사용
- 예: Gradle 빌드, Docker 명령, chmod, echo 등
- name: Build with Gradle
run: ./gradlew build
run: |
chmod +x gradlew
./gradlew clean build
8. env
- 환경 변수(Environment Variables) 설정
env:
SPRING_PROFILES_ACTIVE: test
DB_URL: jdbc:h2:mem:testdb
9. secrets
- GitHub Repository Settings → Secrets에서 등록한 민감 정보를 참조할 때 사용.
env: DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
10. needs
- job 간 순서(의존 관계) 지정.
jobs:
build:
runs-on: ubuntu-latest
deploy:
runs-on: ubuntu-latest
needs: build
CI
먼저 github에서 내 레포지토리에 들어가게되면

이러한 화면이 나오는데 이곳에서 나는 java를 쓸 것이므로 java with Ant를 선택해주었다.
그러면 레포지토리 메인에

이러한 폴더가 생기는데 들어가서 gradle.yml 파일을 열어보면
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle
name: Java CI with Gradle
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
# Configure Gradle for optimal use in GitHub Actions, including caching of downloaded dependencies.
# See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
- name: Build with Gradle Wrapper
run: ./gradlew build
# NOTE: The Gradle Wrapper is the default and recommended way to run Gradle (https://docs.gradle.org/current/userguide/gradle_wrapper.html).
# If your project does not have the Gradle Wrapper configured, you can use the following configuration to run Gradle with a specified version.
#
# - name: Setup Gradle
# uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
# with:
# gradle-version: '8.9'
#
# - name: Build with Gradle 8.9
# run: gradle build
dependency-submission:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
# Generates and submits a dependency graph, enabling Dependabot Alerts for all project dependencies.
# See: https://github.com/gradle/actions/blob/main/dependency-submission/README.md
- name: Generate and submit dependency graph
uses: gradle/actions/dependency-submission@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
이러한 파일이 기본으로 세팅되어있다.
일단 실행이 되는지 확인해보기 위해 다시 Action으로 이동해보면,

실패로 나와있어 에러를 확인해보았다.
에러핸들링
submission쪽에서 터진오류이다. 이를 해결해보기 위해 구글링을 해보니,

github 상단에 Setting에 들어가준다.

왼쪽 Security탭에서 Advanced Security로 들어가서,

Dependency graph를 Enable로 바꿔주었다.
다시 Action으로 가서 실행해보니
Error: Process completed with exit code 126.
이번에는 이런 오류가 있는데, 권한 문제인 것 같다.
gradlew 파일에 실행 권한이 없어 중단된 것으로 보인다.
yml파일을 조금 수정해서 앞 부분에 권한을 넣어주었다.
- name: Grant execute permission for gradlew
run: chmod +x gradlew

성공!
간단한 CI 작업을 완료해보았다.
'BackEnd' 카테고리의 다른 글
| AWS EC2 세팅하기 (0) | 2025.11.08 |
|---|---|
| CICD 구현해보기 (2) - DockerFile (0) | 2025.11.07 |
| JWT + Security로 로그인 구현해보기 (2) | 2025.09.07 |
| 6/5 - Mapper 클래스, 트랜잭션 제어 (5) | 2025.06.06 |
| 6/4 - MariaDB, Log4JDBC (0) | 2025.06.06 |