Github Actions로 DockerHub에 자동 배포 CI 파이프라인 만들기

Dev.Dana·2025년 3월 25일

Zipitda

목록 보기
2/3
post-thumbnail

집잇다 프로젝트를 어느정도 마무리해가며 이제 CI/CD를 해야겠다는 마음을 먹었다.

CI/CD가 뭔가요?

- CI: 코드를 Github에 올리면 자동으로 Build해서 확인해주는 것
- CD: 빌드된 걸 자동으로 배포까지 해주는 것

이번엔 일단 CI까지 해보고 AWS로 서버 구축 후 CD도 도전해보도록 하자!

이전 회사에서 진행했던 프로젝트들은 Jenkins를 이용해서 배포를 할 수 있도록 되어있었는데 내가 직접 파이프라인을 설계한 것은 아니었기 때문에 사용할줄만 알지 직접 구축해본적은 없었다.
Github Actions를 이용하면 CI 자동화를 쉽게 할 수 있다고 해서 한 번 도전해보았다.

Github에 코드를 push하면
→ 자동으로 JAR을 빌드하고
Docker 이미지로 만들고
DockerHub에 자동 업로드까지
👉 자동화된 CI 파이프라인을 구축하는 것이 목표!

미리 준비해야 할 것

1. Github에 프로젝트 레포지토리 생성

내가 만든 프로젝트는 zipitda라는 이름의 Spring Boot 기반 웹 애플리케이션이었다.
https://github.com/abcdana/zipitda

원본 레포지토리에서할지 아니면 fork해온 내 계정의 레포지토리에서 할지 고민을 했는데 원본 레포지토리에선 설정권한이 없기 때문에 안될 수 있다.
→ 꼭 내 계정의 리포지토리에서 해야 한다는 것이 중요하다.
내가 원본 레포지토리의 Collaborator로 등록되어 있고, Write 권한 이상이 있다면 원본 리포지토리에서도 가능함

2. DockerHub 계정 만들기


https://hub.docker.com 에서 계정을 만들고, zipitda라는 이름으로 Repository도 만들어줬다. 처음엔 public으로 해두면 관리가 편하다.

본격적으로 파이프라인 구축하기

Github Action 설정하기

1. 프로젝트에서 .github/workflows/docker-build.yml 파일 만들기

2. docker-build.yml에 아래 코드 작성하기

name: CI - Build and Push Docker Image

on:
  push:
    branches: [ main ]  # main 브랜치에 push 될 때만 동작

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: 코드 받아오기
        uses: actions/checkout@v2

      - name: JDK 17 설치
        uses: actions/setup-java@v2
        with:
          java-version: '17'
          distribution: 'temurin'

      - name: Gradle 빌드 실행
        run: ./gradlew build

      - name: DockerHub 로그인
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Docker 이미지 빌드
        run: docker build -t yourdockerid/zipitda:latest

      - name: DockerHub에 업로드
        run: docker push yourdockerid/zipitda:latest

각자 상황에 맞게 yml파일을 작성하면 된다.

3. 시크릿 정보 등록 (Docker ID & 비밀번호)


Github에 내 DockerHub 계정 비밀번호를 직접 코드에 넣을 수는 없으니까
Github의 Secrets 기능을 사용한다.

  • Github 리포지토리에서 → 상단 Settings → Secrets and variables → Actions
  • New repository secret 클릭
  • 이름: DOCKER_USERNAME, 값: DockerHub 아이디/ 이름 DOCKER_PASSWORD, 값: DockerHub 비밀번호 설정후 저장

4. Main브랜치에 push하면 자동으로 실행


코드에 살짝 수정하고 Github에 push해보면 Github → Actions 탭에서 실행되는 것을 확인할 수 있다. 오예

5. DockerHub에서 확인

DockerHub에서 내가 올려놓은 docker image 확인이 가능하다.

후기

초기에는 ./gradlew build로 빌드했지만, 통합 테스트가 Redis와 MySQL을 필요로 해서 CI 환경에서는 실패가 발생했다. 그래서 테스트는 제외하고 build하도록 수정했다.

./gradlew build -x test

또한 집잇다는 develop브랜치에 feature브랜치들을 merge하는 방식으로 작업했고, 아직 master(main) 브랜치로 병합은 하지 않았기 때문에 CI테스트를 하기위해 develop브랜치에 push될 때 마다 실행되도록 설정하였다.

on:
  push:
    branches: [ develop ] 

처음엔 잘 몰라서 어렵다고 생각했던 CI 자동화인데 막상 해보니 별거 없었다..

  • 반복 작업은 사람이 아니라 Github이 하게 만들자!
  • 코드만 잘 작성하면 배포는 자동으로 이뤄진다.

다음엔 이 CI에 CD(자동 배포)까지 붙여서 서버에 자동으로 배포되게 만드는 것도 도전해볼 예정이다.

참고

github actions 공식 문서
https://hub.docker.com/

profile
어제의 나보단 나은 오늘의 내가 되기를

0개의 댓글