diff --git a/.github/actions/build.yml b/.github/actions/build.yml new file mode 100644 index 0000000..0f75499 --- /dev/null +++ b/.github/actions/build.yml @@ -0,0 +1,43 @@ +name: build + +#event trigger : main 브랜치에 push 이벤트 발생시 jobs가 실행된다. +on: + push: + branches: [ "main" ] + +#권한 설정 +permissions: + contents: read + +#jobs 정의 +jobs: + #build job - jdk 설정, gradle 설정, docker 배포 + build: + #ubuntu 최신 버전 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + # JDK 17 설정 + - name: Set up JDK 21 + uses: actions/setup-java@v3 + # build를 위해서 jdk를 설치해줘야 하기 때문에 첫 단계로 설정하다. + with: + java-version: '21' + distribution: 'oracle' + + # Gradle 설정 - gradle이 제공하는 action으로 build하는데 도움을 준다. + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + + # gradlew 파일 권한 지정 - 기본적으로 gradlew에 대한 권한 설정이 되어있지 않기 때문에 권한 설정을 해준다. + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + # gradle bootBuildImage를 이용해 이미지를 만들고 원격 저장소에 Push + # env에 민감 정보(환경변수)를 추가한다. + - name: Build Image with Gradle and Push to DockerHub + run: ./gradlew bootBuildImage + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 78a804b..b204f24 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -65,12 +65,14 @@ tasks.withType { imageName = imageNames tags.set(setOf("$imageNames:latest", "$imageNames:${datetimeFormatter.format(LocalDateTime.now())}")) + buildpacks.set(setOf("docker.io/paketobuildpacks/oracle", "urn:cnb:builder:paketo-buildpacks/java-native-image")) environment = mapOf( "BP_NATIVE_IMAGE" to "true", - "BP_NATIVE_IMAGE_BUILD_ARGUMENTS" to "-march=compatibility", + "BP_NATIVE_IMAGE_BUILD_ARGUMENTS" to "-march=compatibility -H:+UnlockExperimentalVMOptions", "BP_JVM_TYPE" to "JDK", - "BP_JVM_VERSION" to "21" + "BP_JVM_VERSION" to "21", + "JAVA_TOOL_OPTIONS" to "-XX:UseSSE=2 -XX:UseAVX=2" ) }