티스토리 뷰

728x90

https://hasumang.tistory.com/89

 

[설치부터 응용까지] Java Spring Boot, Docker 활용해서 EC2에 배포하기

Docker를 활용해서 EC2에 간단하게 배포해보겠습니당! Docker 활용하니까 진짜 편하더라구요..! 사전 준비물은 EC2 인스턴스와 spring boot 프로젝트 파일입니당~ 순서 1. DockerHub 회원가입하기 & repository

hasumang.tistory.com

⬆️이전 단계⬆️

 

 EC2 인스턴스에 Docker를 활용하여 Spring 컨테이너를 만들었습니다. 그런데 로컬에서 이미지 푸시하고 EC2에서 이미지 풀 받아오는 과정을 자동화시키고 싶었습니다. GitHub Actions을 활용하면 push나 PR이 올라올 경우 바로 EC2가 갱신되도록 할 수 있다는 사실을 발견했습니다!

 

 이런 자동화시키는 일련의 과정이 CI/CD입니다. 즉, CI/CD는 소프트웨어 개발의 전반적인 과정을 자동화하여 빠른 소프트웨어 제공을 가능하게하는 개념입니다. CI는 지속적 통합(Contiuous Integration), CD는 지속적 배포(Continuous Deployment)를 의미합니다.  

 

 이때, CI 는 개발자를 위한 자동화 프로세스를 제공하고, CD는 downtime(서비스 중단 시간)을 최소화하여 사용자들이 서비스에 대한 연속적인 접근성을 유지하면서도 최신 버전의 소프트웨어를 이용할 수 있도록 도와줍니다.  

 

 CI에 대해 더 알아보자면, 우리가 코드 작성을 완료하고 깃헙에 push, PR할 경우(commit과 같은 다른 액션도 가능), 하나하나 일일이 코드 상태를 확인하지 않아도 패키지다운 및 Test, 충돌 문제를 자동화하여 개발 코스트를 줄여줍니다.  

 

 따라서, 이번 포스팅은 GitHub Actions를 활용해서 PR을 보낼 경우 바로 빌드하고 docker 이미지가 갱신되는 과정까지를 개발해보겠습니다. EC2에 올리는 과정은 다음 포스팅에서 올리겠습니다!


1. GitHub Actions 설정

GitHub Actions 에서 gradle.yml 파일 생성

1. GitHub Repository에서 New workflow 선택

 

2. gradle 검색 후 Java with Gradle 선택

 

3. 다음 화면이 나올 경우 생성 완료

 

GitHub Actions 코드 수정하기

name: Java CI with Gradle & Docker

# push와 PR이 발생했을 경우 실행
on:
  push:
    branches: [ "develop", "feat/*", "cicd/*", "fix/*", "hotfix/*", "refactor/*", "chore/*", "docs/*", "style/*", "test/*" ]
  pull_request:
    branches: [ "develop", "feat/*", "cicd/*", "fix/*", "hotfix/*", "refactor/*", "chore/*", "docs/*", "style/*", "test/*" ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      #자바 버전 설정
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
            java-version: '17'
            distribution: 'temurin'
	  # 브랜치 전환
      - name: Checkout
        uses: actions/checkout@v3

      # Spring Boot 어플리케이션 Build (1)
      - name: Spring Boot Build
        run: ./gradlew clean build -x test --warning-mode=all --stacktrace

      # Docker 이미지 Build (2)
      - name: docker image build
        run: docker build -t rimi3226/gamegoo .

      # DockerHub Login (3)
      - name: docker login
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_PW }}

      # Docker Hub push (4)
      - name: docker Hub push
        run: docker push rimi3226/gamegoo

Trouble Shooting

에러 1 : clean build를 하려고 옵션으로 clean build --exclude-task test 을 넣었더니 빌드 에러가 남

해결 : ./gradelw 명령어로 빌드함

 

에러 2 : 도커 이미지 만드는거니까 그래도 test 파일 빼야 빌드가 빨리 될 것 같아서 clean build 하려다가 에러남

* What went wrong:
Execution failed for task ':compileJava'.
> Could not resolve all files for configuration ':compileClasspath'.

시도 1 : 에러 로그 중에 버전이 안맞다는 로그를 찾아냈다.

 -> build.gradle 파일에서

java {
    sourceCompatibility = '17'
}

 

이거 대신에 

sourceCompatibility = '17'

 

이걸로 바꿔봄 -> 실패! 

-> 자바 스프링 파일 빌드가 로컬에서 잘됐기때문에 스프링의 문제라기 보다는 깃헙 액션의 문제라고 판단

 

해결 : 깃헙 액션 yml 에 java version을 명시하는 코드를 삽입

- name: Set up JDK 17
  uses: actions/setup-java@v3
  with:
      java-version: '17'
      distribution: 'temurin'

 

빌드 완료! 

 

2. Github Action Secret Key 설정

Settings/Secrets and variables/Actions에서 New repository secret을 선택해서 docker용 secret key 세개 설정


해결!!!!!

 


다음 포스팅을 참고해서 개발했습니다.

참고 :https://lucas-owner.tistory.com/49

 

[Docker] GitHub Actions - Docker Image 자동 빌드, push(CI) (1)

GitHub Actions 를 사용한 Docker Image 자동 빌드, push - Info Docker를 사용하여 EC2에 Spring Boot를 배포하는 방법들을 포스팅해왔다, 실제로 해봤다면 알겠지만 해당 작업은 상당히 복잡한 프로세스를 갖고

lucas-owner.tistory.com

참고 : https://jinmay.github.io/2020/05/13/git/github-action-syntax/

 

[Github]깃허브의 CI툴인 Actions의 문법 간단 정리

GitHub Actions의 Workflow syntax에 대해서 정리한다. workflow 예시 전체 코드123456789101112131415161718# https://help.github.com/en/actions/automating-your-workflow-with-github-actions/configuring-a-workflowname: Gre

jinmay.github.io

참고 : https://rok93.tistory.com/entry/Github-Action-failed-to-compute-cache-key-failed-to-calculate-checksum-of-ref-%EC%97%90%EB%9F%AC-%EB%B0%9C%EC%83%9D

 

[Github Action] failed to compute cache key: failed to calculate checksum of ref ... 에러 발생

하고있는 작업 Github Action으로 ECS(Elastic Container Service)로 스프링부트 애플리케이션을 배포하려고한다. github action script는 깃헙 액션에서 의도에 따라서 템플릿을 복붙해서 쓸 수 있게 잘 제공해주

rok93.tistory.com

 

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함