diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml new file mode 100644 index 0000000..0f55de6 --- /dev/null +++ b/.github/workflows/cd.yml @@ -0,0 +1,83 @@ +name: Java CD with Gradle + +on: + push: + branches: [ "main" ] + workflow_dispatch: + inputs: + logLevel: + description: 'Log level' + required: true + default: 'warning' + type: choice + options: + - info + - warning + - debug + tags: + description: 'Test scenario tags' + required: false + type: boolean + environment: + description: 'Environment to run tests against' + type: environment + required: false + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + steps: + # 1. checkout + - uses: actions/checkout@v3 + + # 2. Java 17 설정 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + + # 3. properties 설정 + - name: Set up application.yml + run: | + mkdir -p src/main/resources + echo "${{ secrets.APPLICATION }}" > src/main/resources/application.yml + + # 4. gradlew build + - name: Build with Gradle + uses: gradle/gradle-build-action@v2 # v2.6.0 + with: + arguments: build + + # 5. Docker 이미지 빌드 + - name: docker image build + run: docker build -t ${{ secrets.DOCKER_USERNAME }}/warmlink-was . + + # 6. DockerHub 로그인 + - name: docker login + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + # 7. Docker Hub 이미지 푸시 + - name: docker Hub push + run: docker push ${{ secrets.DOCKER_USERNAME }}/warmlink-was + + # 8. EC2 pull + - name: Deploy + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.AWS_HOST }} + username: ${{ secrets.AWS_USERNAME }} + key: ${{ secrets.AWS_KEY }} + port: ${{ secrets.AWS_PORT }} + script: | + sudo docker stop warmlink-was + sudo docker rm warmlink-was + sudo docker image prune -af + sudo docker pull ${{ secrets.DOCKER_USERNAME }}/warmlink-was + sudo docker run -d -p 8080:8080 --name warmlink-was -e TZ=Asia/Seoul ${{ secrets.DOCKER_USERNAME }}/warmlink-was \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..523bccb --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,57 @@ +name: Java CI with Gradle + +on: + pull_request: + branches: [ "main" ] + workflow_dispatch: + inputs: + logLevel: + description: 'Log level' + required: true + default: 'warning' + type: choice + options: + - info + - warning + - debug + tags: + description: 'Test scenario tags' + required: false + type: boolean + environment: + description: 'Environment to run tests against' + type: environment + required: false + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + steps: + # 1. checkout + - uses: actions/checkout@v3 + + # 2. Java 17 설정 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + + # 3. properties 설정 + - name: Set up application.yml + run: | + mkdir -p src/main/resources + echo "${{ secrets.APPLICATION }}" > src/main/resources/application.yml + + # 4. gradlew 실행 권한 설정 + - name: Run chmod to make gradlew executable + run: chmod +x ./gradlew + + # 5. gradlew build + - name: Build with Gradle + uses: gradle/gradle-build-action@v2 + with: + arguments: build \ No newline at end of file diff --git a/.gitignore b/.gitignore index c2065bc..90492ca 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,9 @@ build/ !**/src/main/**/build/ !**/src/test/**/build/ +### APPLICATION ### +src/main/resources/application.yml + ### STS ### .apt_generated .classpath diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..060c615 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM openjdk:17-jdk +ARG JAR_FILE=build/libs/*.jar +COPY ${JAR_FILE} app.jar +ENTRYPOINT ["java", "-Dspring.profiles.active=docker", "-jar", "app.jar"] \ No newline at end of file diff --git a/build.gradle b/build.gradle index c512544..110cc46 100644 --- a/build.gradle +++ b/build.gradle @@ -30,8 +30,15 @@ dependencies { annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + + // mysql + implementation 'com.mysql:mysql-connector-j' } tasks.named('test') { useJUnitPlatform() } + +jar { + enabled = false +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.yml similarity index 100% rename from src/main/resources/application.properties rename to src/main/resources/application.yml