CI CD 테스트(Docker 포함)

✒️ 2025-07-28 19:16 내용 수정


Docker 설정은 Docker와 Spring boot 설정하기(Window 환경) 참고.

1. workflows 생성

  1. 프로젝트의 Root 디렉터리에 .github 디렉터리를 생성하고, workflows 디렉터리를 생성한다.
  2. workflows 하위에 ci_cd.yml을 생성한다.
docker/
├── .github/
│   └── workflows/
│       └── ci_cd.yml
├── src/
  1. ci_cd.yml에 workflow 설정을 추가한다.
# workflow 이름  
name: CI  
  
## workflow 시작 조건  
## main branch에 코드가 올라올 때마다 실행  
on:  
  push:  
    branches: [ main ]  
  
# 환경 변수  
env:  
  DOCKER_REGISTRY: docker.io  
  IMAGE_NAME: cicdtest  
  
## 진행할 작업  
jobs:  
  build-and-test:  
    runs-on: ubuntu-latest  
  
    steps:  
      # step 1 : 소스코드 복사  
      - name: 코드 가져오기  
        uses: actions/checkout@v3  
          
      # step 2 : Java 환경 구성  
      - name: JDK 17 설치  
        uses: actions/setup-java@v3  
        with:  
          java-version: '17'  
          distribution: 'temurin'  
  
      # step 3 : maven 빌드  
      - name: Maven 빌드  
        run: mvn clean package  
  
      # step 4 : 아티팩트 설정  
      - name: 빌드 아틱팩트 업로드  
        uses: actions/upload-artifact@v4  
        with:  
          name: jar-artifact  
          path: target/*.jar  
            
  # docker 작업  
  docker-build-push:  
    needs: build-and-test  
    runs-on: ubuntu-latest  
    # main branch에 코드 업데이트 시에만 실행  
    if: github.ref == 'refs/heads/main' && github.event_name == 'push'  
  
    steps:  
      - uses: actions/checkout@v3  
  
      - name: JAR 다운로드  
        uses: actions/download-artifact@v4  
        with:  
          name: jar-artifact  
          path: target/  
  
      - name: Dockerfile 생성  
        run: |  
          cat > Dockerfile << 'EOF'  
          FROM openjdk:17-jdk-slim  
          WORKDIR /app  
          COPY target/*.jar app.jar  
          EXPOSE 8080  
          ENTRYPOINT ["java", "-jar", "app.jar"]  
          EOF  
  
      - name: Docker Hub 로그인  
        uses: docker/login-action@v2  
        with:  
          username: ${{ secrets.DOCKER_USERNAME }}  
          password: ${{ secrets.DOCKER_PASSWORD }}  
  
      - name: Docker 이미지 빌드 및 푸시  
        uses: docker/build-push-action@v4  
        with:  
          context: .  
          push: true  
          tags: |  
              ${{ env.DOCKER_REGISTRY }}/dockerhub/cicdtest:latest  
              ${{ env.DOCKER_REGISTRY }}/dockerhub/cicdtest:${{ github.sha }}  

#      - name: 원격 서버 배포  
#        uses: appleboy/ssh-action@v0.1.5  
#        with:  
#          host:  
#          username:  
#          key:  
#        script: docker run -p 8080:8080 ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:latest

2. IntelliJ에서 Git Repository 생성

  1. IntelliJ에서 Setting - Version Controll로 접속해서 Github를 선택한다.
    • 사진에는 이전에 연동을 미리 해둬서 계정이 뜬다.

github_cicd 1.png

github_cicd 2.png

  1. 상단 메뉴 탭에 VCS를 선택하고 Create Git Repository를 선택한다.

github_cicd 3.png

  1. 새 Github Repository를 생성할 디렉터리를 선택한다.
    • git init과 같은 역할

github_cicd 4.png

  1. 리포지토리 생성이 완료되면 프로젝트 파일을 스테이징한 후 Commit을 생성한다.
    • 스테이징 : git add .
    • commit : git commit -m "Initial commit

github_cicd 5.png

  1. 상단의 VCS에서 Git으로 바뀐 메뉴를 누르고 Github - Shate Project on Github를 선택한다.
    • 원격 저장소에 리포지토리를 보내기 위한 작업이다.

github_cicd 6.png

  1. 원격 저장소에 저장할 리포지토리 이름을 생성하고, CI/CD 테스트를 위한 리포지토리기 때문에 Private으로 설정한다.

github_cicd 7.png

  1. 상단 메뉴에서 Git - Github을 다시 선택하고 Shate Project on Github를 선택하여 원격 저장소로 git push한다.

github_cicd 8.png

github_cicd 9.png

github_cicd 10.png

git commit --allow-empty -m "CI test"

github_cicd 11.png

  1. 이제 Github 사이트에서 해당 리포지토리에 접속한 후 Actions에서 Workflow를 확인할 수 있다.
    • 프로젝트 Root 경로 하위의 .github/workflows/file.yml을 감지해서 뜨기 때문에 만약 뜨지 않을 경우 파일 경로를 다시 확인하거나 파일을 새로 작성한다.

github_cicd 12.png

Git branch 이름 변경

github_cicd 13.png

# master -> main으로 이름 변경
git branch -m master main

# 원격 저장소 정보 가져오기
git fetch origin

# 원격 branch와 로컬 branch 연결
git branch -u origin/main main
git remote set-head origin -a

github_cicd 14.png


3. Docker Hub와 Github Actions Secrets 설정

  1. Docker Hub에 접속해서 회원가입/로그인을 진행한다.
    • OAuth2 가입(다른 사이트 계정을 통한 가입)일 경우 Account - Settings에서 Password 리셋으로 비밀번호를 재설정 혹은 확인할 필요가 있다.

github_cicd 15.png

  1. Github의 CI/CD를 설정한 리포지토리에서 Settings - Secrets and variables - Actions 를 선택한다.

github_cicd 16.png

  1. New Secret을 선택하고 Docker Hub의 사용자 이름과 비밀번호를 추가한다.
    • Docker Hub의 이메일이 아닌 사용자 이름이다.
    • workflow 파일의 ${{ secrets.DOCKER_USERNAME }}에 들어가는 내용이다.

github_cicd 17.png

github_cicd 18.png

github_cicd 19.png


4. Docker 빌드 및 실행

  1. 이제 다시 Github Actions을 실행하면(새 Commit 추가 시) 잘 설정 되었다면 빌드가 완료된다.

![github_cicd 20.png

![github_cicd 22.png

  1. IDE 터미널에서 Docker Hub로부터 컨테이너를 받는다.
docker pull docker/repository:latest

![github_cicd 21.png

  1. docker run으로 컨테이너를 실행한다.
docker run -p 8080:8080 docker/repository:latest

![github_cicd 23.png

  1. 브라우저에서 http://localhost:port/api로 다시 접속하면 Controller에 설정한 정보가 잘 뜬다.

![github_cicd 24.png