CI CD 테스트(Docker 포함)
✒️ 2025-07-28 19:16 내용 수정
Docker 설정은 Docker와 Spring boot 설정하기(Window 환경) 참고.
1. workflows 생성
- 프로젝트의 Root 디렉터리에
.github디렉터리를 생성하고,workflows디렉터리를 생성한다. workflows하위에ci_cd.yml을 생성한다.
docker/
├── .github/
│ └── workflows/
│ └── ci_cd.yml
├── src/
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 생성
- IntelliJ에서 Setting - Version Controll로 접속해서 Github를 선택한다.
- 사진에는 이전에 연동을 미리 해둬서 계정이 뜬다.

- 만약 연동한 적이 없다면
+를 눌러 Github 계정을 추가한다.

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

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

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

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

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

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

- 원격에도 생성된 것을 볼 수 있다.


- CI/CD 동작 확인을 위한 빈 Commit을 생성할 수도 있다.
git commit --allow-empty -m "CI test"

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

Git branch 이름 변경
- IDE에서 생성한 리포지토리 기본 이름이 master였기에 main으로 수정해준다.
- 어느 branch에 새 commit이 올라올 때 자동 배포될지 설정되기 때문에 이름을 잘 확인하거나 변경해야 한다.

- 원격 저장소에서도 branch - 이름 변경을 수행하면 다음 명령어로 로컬 저장소와 연결을 다시 해줘야 한다.
# master -> main으로 이름 변경
git branch -m master main
# 원격 저장소 정보 가져오기
git fetch origin
# 원격 branch와 로컬 branch 연결
git branch -u origin/main main
git remote set-head origin -a

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

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

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



4. Docker 빌드 및 실행
- 이제 다시 Github Actions을 실행하면(새 Commit 추가 시) 잘 설정 되었다면 빌드가 완료된다.
- 빌드가 정상적으로 완료되면 Docker Hub의 Repository에도 이미지가 뜬다.
- IDE 터미널에서 Docker Hub로부터 컨테이너를 받는다.
docker pull docker/repository:latest
docker run으로 컨테이너를 실행한다.
docker run -p 8080:8080 docker/repository:latest
- 브라우저에서
http://localhost:port/api로 다시 접속하면 Controller에 설정한 정보가 잘 뜬다.