Server
[Server] GitHubActions와 Docker 로 CICD 구축하기
민이(MInE)
2024. 5. 10. 23:09
반응형
이제 GitHub Actions와 Docker로 CICD를 만들어보겠습니다 ~
저는 Spring Boot 프로젝트를 하나 만들어 만들어보았습니다 ~!
우선 github에 repository를 하나 파주고 안에 Spring Boot 프로젝트를 올려줍니다.
그리고 Settings -> Secrets and variables -> Actions에 Docker Hub의 username과 password를 추가해줍니다.
그리고 Actions 로 들어가서 빌드 툴을 Java with Gradle로 만들어줍니다. 그러면 gradle.yml을 수정하는 페이지가 나올건데 아래와 같이 수정해줍니다 !
name: Java CI with Gradle
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
permissions:
contents: read
jobs:
build-docker-image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Gradle 래퍼에 실행 권한 설정
run: chmod +x ./gradlew
- name: JDK 17 설정
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Gradle로 빌드
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: clean bootJar
- name: 도커 이미지 빌드
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/github-actions-test .
- name: 도커 로그인
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: 도커 허브에 푸시
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/github-actions-test
그리고 커밋을 하고 조금 기다리면 ~ 아래와 같이 성공합니다
여기까지 하면 Docker Hub에 이미지를 올리는 것은 완료되었습니다.
이제 배포 자동화 과정인 CD 를 구축해보겠습니다.
우선 Settings -> Actions -> Runners -> New self-hosted runner 를 순서대로 클릭해줍니다.
그다음 Linux를 클릭하고 마지막의 .run.sh를 제외하고 EC2 서버에서 모두 실행시켜줍니다
위 과정을 다 하셨으면 gradle.yml을 아래와 같이 수정합니다.
name: Java CI with Gradle
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
permissions:
contents: read
jobs:
build-docker-image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Gradle 래퍼에 실행 권한 설정
run: chmod +x ./gradlew
- name: JDK 17 설정
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Gradle로 빌드
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: clean bootJar
- name: 도커 이미지 빌드
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/github-actions-test .
- name: 도커 로그인
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: 도커 허브에 푸시
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/github-actions-test
run-docker-image-on-ec2:
needs: build-docker-image
runs-on: self-hosted
steps:
- name: docker pull
run: sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/github-actions-test
- name: docker stop container
run: sudo docker stop $(sudo docker ps -q) 2>/dev/null || true
- name: docker run new container
run: sudo docker run --name github-actions-test --rm -d -p 8080:8080 ${{ secrets.DOCKERHUB_USERNAME }}/github-actions-test
- name: delete old docker image
run: sudo docker system prune -f
그리고 Spring Boot 프로젝트를 수정하고 원격 저장소에 푸시를 하면 !!
이렇게 배포 자동화가 되어 main브랜치에 push 또는 pull-request가 수행되면 자동으로 최신화되어 서버가 배포됩니다.
반응형