diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml new file mode 100644 index 0000000..9dbe515 --- /dev/null +++ b/.github/workflows/cicd.yml @@ -0,0 +1,86 @@ +name: 🌱Farm System 4th Security-WEB deploy session🌱 + +on: + push: + branches: [ "main" ] + + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + + - name: Create application.yml for build + run: | + mkdir -p ./src/main/resources + echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.yml + + - name: Cache Gradle packages + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + gradle-${{ runner.os }}- + - name: κΆŒν•œ + run: chmod +x ./gradlew + + - name: Build with Gradle Wrapper (Skip Tests) + run: ./gradlew build -x test + + - name: Docker build & push to Docker Hub + run: | + echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + docker build -t ${{ secrets.DOCKER_USERNAME }}/farm:latest . + docker push ${{ secrets.DOCKER_USERNAME }}/farm:latest + docker logout + + + - name: Deploy to EC2 + + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.EC2_HOST }} + username: ubuntu + key: ${{ secrets.EC2_PRIVATE_KEY }} + script: | + set -e + + echo "πŸ›‘ κΈ°μ‘΄ μ»¨ν…Œμ΄λ„ˆ 쀑지 및 제거" + docker stop farm || true + docker rm farm || true + + echo "πŸ“¦ μ΅œμ‹  이미지 pull" + docker pull ${{ secrets.DOCKER_USERNAME }}/farm:latest + + echo "πŸ“‚ yml νŒŒμΌμ„ μ €μž₯ν•  디렉토리 생성" + sudo mkdir -p /home/ubuntu/app/src/main/resources + sudo chown -R ubuntu:ubuntu /home/ubuntu/app + sudo chmod -R 755 /home/ubuntu/app + + echo "πŸ“„ yml 파일 생성 및 GitHub Secrets κ°’ 적용" + echo "${{ secrets.APPLICATION }}" | sudo tee /home/ubuntu/app/src/main/resources/application.yml > /dev/null + sudo chmod 644 /home/ubuntu/app/src/main/resources/application.yml + + echo "πŸš€ μƒˆ μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ 쀑..." + sudo docker run -d --log-driver=syslog --name farm -p 8080:8080 \ + -v /home/ubuntu/app/src/main/resources:/app/src/main/resources \ + --restart always \ + ${{ secrets.DOCKER_USERNAME }}/farm:latest + + echo "🧹 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” Docker 이미지 정리" + docker image prune -f diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..42c00ed --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +# Dockerfile +FROM bellsoft/liberica-openjdk-alpine:17 + +# μ‹œμŠ€ν…œ μ‹œκ°„λŒ€λ₯Ό μ„€μ • +ENV TZ=Asia/Seoul +RUN apk add --no-cache tzdata \ + && cp /usr/share/zoneinfo/${TZ} /etc/localtime \ + && echo "${TZ}" > /etc/timezone + +# JAR 파일 볡사 +ARG JAR_FILE=build/libs/deploySession-0.0.1-SNAPSHOT.jar +COPY ${JAR_FILE} app.jar + +# JVM μ‹œκ°„λŒ€ 섀정을 ν¬ν•¨ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ +ENTRYPOINT ["java", "-Duser.timezone=Asia/Seoul", "-jar", "/app.jar"] diff --git a/build.gradle b/build.gradle index 8cf6730..d385d7a 100644 --- a/build.gradle +++ b/build.gradle @@ -18,9 +18,9 @@ repositories { } dependencies { - // implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' - // runtimeOnly 'com.mysql:mysql-connector-j' + runtimeOnly 'com.mysql:mysql-connector-j' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' }