diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 06372dd..62acf24 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -1,18 +1,14 @@ name: Java CI with Gradle - on: push: branches: [ "main" ] pull_request: branches: [ "main" ] - jobs: - build: - + build-docker-image: runs-on: ubuntu-latest permissions: contents: read - steps: - uses: actions/checkout@v4 - name: Set up JDK 17 @@ -20,9 +16,51 @@ jobs: with: java-version: '17' distribution: 'temurin' - - name: Setup Gradle - uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 - + uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0 + - name: Grant execute permission for gradlew + run: chmod +x gradlew + # Spring Boot 어플리케이션 Build.. - name: Build with Gradle Wrapper - run: ./gradlew build -x test \ No newline at end of file + run: ./gradlew build -x test + env: + DB_PASSWORD : ${{ secrets.DB_PASSWORD }} + DB_URL : ${{ secrets.DB_URL }} + DB_USERNAME : ${{ secrets.DB_USERNAME }} + SECRET_KEY : ${{ secrets.SECRET_KEY }} + # Docker 이미지 Build + - name: docker image build + run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test:latest . + # DockerHub Login (push 하기 위해) + - name: docker login + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + # Docker hub 로 push + - name: Docker Hub push + run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test + + # EC2에서 컨테이너 실행 + run-docker-image-on-ec2: + needs: build-docker-image + runs-on: self-hosted + steps: + - name: docker pull + run: sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test:latest + - name: docker stop old container + run: | + if [ $(sudo docker ps -a -q -f name=spring-cicd-test) ]; then + sudo docker stop spring-cicd-test + fi + - name: docker run new container with env + run: | + sudo docker run --rm -d -p 80:8080 \ + --name spring-cicd-test \ + -e DB_URL=${{ secrets.DB_URL }} \ + -e DB_USERNAME=${{ secrets.DB_USERNAME }} \ + -e DB_PASSWORD=${{ secrets.DB_PASSWORD }} \ + -e SECRET_KEY=${{ secrets.SECRET_KEY }} \ + ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test:latest + - name: delete old docker images + run: sudo docker system prune -f \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1faad58 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM openjdk:17 +ARG JAR_FILE=build/libs/*.jar +COPY ${JAR_FILE} app.jar +ENTRYPOINT ["java","-jar","/app.jar"] \ No newline at end of file diff --git a/src/main/java/com/example/onederful/domain/cdtest/controller/CdController.java b/src/main/java/com/example/onederful/domain/cdtest/controller/CdController.java new file mode 100644 index 0000000..6b0bb81 --- /dev/null +++ b/src/main/java/com/example/onederful/domain/cdtest/controller/CdController.java @@ -0,0 +1,16 @@ +package com.example.onederful.domain.cdtest.controller; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/test") +public class CdController { + + @GetMapping + public ResponseEntity test() { + return ResponseEntity.ok("cd successful"); + } +} diff --git a/src/main/java/com/example/onederful/filter/JwtFilter.java b/src/main/java/com/example/onederful/filter/JwtFilter.java index df25a03..76e0139 100644 --- a/src/main/java/com/example/onederful/filter/JwtFilter.java +++ b/src/main/java/com/example/onederful/filter/JwtFilter.java @@ -38,6 +38,7 @@ public void doFilter( requestURI.startsWith("/swagger-ui") || requestURI.startsWith("/v3/api-docs") || requestURI.startsWith("/swagger-resources") || + requestURI.startsWith("/api/test") || requestURI.startsWith("/webjars")) { filterChain.doFilter(servletRequest, servletResponse); return;