DevOpsビルド・パイプラインでのOracle GraalVMの使用
DevOpsビルド・パイプラインを使用すると、Oracle GraalVMを使用して高パフォーマンスのJavaアプリケーションをビルドできます。
「管理対象ビルド」ステージでは、ビルド仕様ファイルに単純なYUMパッケージ・マネージャ・コマンドを追加することで、ネイティブ・イメージやJava Development Kit (JDK)などのOracle GraalVMコンポーネントをインストールして使用できます。
ビルド仕様ファイルの更新
DevOpsビルド・パイプラインでOracle GraalVMをインストールしてを使用するには、次のようにビルド仕様ファイルを更新します:
- 必要なOracle GraalVMコンポーネントを1つ以上インストールするには、次のコマンドを追加します。たとえば、このコマンドは、JDKおよびその他の必要な依存関係とともにネイティブ・イメージをインストールします。
steps: - type: Command name: "Install the latest Oracle GraalVM for JDK 20 - JDK and Native Image" command: | yum -y install graalvm-20-native-image
JAVA_HOME
環境変数を設定します。env: variables: "JAVA_HOME" : "/usr/lib64/graalvm/graalvm-java20"
PATH
環境変数を設定します。env: variables: # PATH is a reserved variable and cannot be defined as a variable. # PATH can be changed in a build step and the change is visible in subsequent steps. steps: - type: Command name: "Set the PATH here" command: | export PATH=$JAVA_HOME/bin:$PATH
例1:
MavenおよびOracle GraalVM for JDK 17 - Native Imageを使用してJavaアプリケーションからネイティブ実行可能ファイルをビルドするためのサンプル・ビルド仕様ファイル。
version: 0.1
component: build
timeoutInSeconds: 600
runAs: root
shell: bash
env:
variables:
"JAVA_HOME" : "/usr/lib64/graalvm/graalvm-java17"
# PATH is a reserved variable and cannot be defined as a variable.
# However, PATH can be changed in a build step and the change is visible in subsequent steps.
steps:
- type: Command
name: "Install the latest Oracle GraalVM for JDK 17 - JDK and Native Image"
command: |
yum -y install graalvm-17-native-image
- type: Command
name: "Set the PATH here. JAVA_HOME already set in env > variables above."
command: |
export PATH=$JAVA_HOME/bin:$PATH
- type: Command
name: "Build a native executable with Oracle GraalVM for JDK 17 - Native Image"
command: |
mvn --no-transfer-progress -Pnative -DskipTests package
outputArtifacts:
- name: app_native_executable
type: BINARY
location: target/my-app
例2:
MavenおよびOracle GraalVM for JDK 17 - Native Imageを使用してMicronautアプリケーションからネイティブ実行可能ファイルをビルドするためのサンプル・ビルド仕様ファイル。
version: 0.1
component: build
timeoutInSeconds: 900
runAs: root
shell: bash
env:
variables:
"JAVA_HOME" : "/usr/lib64/graalvm/graalvm-java17"
TAG: "mn-hello-ni:0.0.1"
APP_FILE: "MnHelloRest"
exportedVariables:
- BUILDRUN_HASH
steps:
- type: Command
name: "Define unique image tag"
timeoutInSeconds: 140
command: |
echo "OCI_BUILD_RUN_ID: ${OCI_BUILD_RUN_ID}"
export BUILDRUN_HASH=`echo ${OCI_BUILD_RUN_ID} | rev | cut -c 1-7`
echo "BUILDRUN_HASH: " $BUILDRUN_HASH
- type: Command
name: "Install the latest Oracle GraalVM for JDK 17 - JDK and Native Image"
command: |
yum -y install graalvm-17-native-image
- type: Command
name: "Set the PATH here. JAVA_HOME already set in env > variables above."
command: |
export PATH=$JAVA_HOME/bin:$PATH
- type: Command
name: "Build a native executable with Oracle GraalVM for JDK 17 - Native Image"
command: |
./mvnw --no-transfer-progress package -Dpackaging=native-image
- type: Command
name: "Package the native executable in a runtime container image"
command: |
docker build -f ./Dockerfile \
--build-arg APP_FILE=${APP_FILE} \
-t ${TAG} .
outputArtifacts:
- name: app_native_executable
type: BINARY
location: target/MnHelloRest
- name: runtime_image
type: DOCKER_IMAGE
location: ${TAG}
例3:
MavenおよびGraalVM Enterprise 22.x for Java 17 - Native Imageを使用してJavaアプリケーションからネイティブ実行可能ファイルをビルドするためのサンプル・ビルド仕様ファイル。
version: 0.1
component: build
timeoutInSeconds: 600
runAs: root
shell: bash
env:
variables:
"JAVA_HOME" : "/usr/lib64/graalvm/graalvm22-ee-java17"
# PATH is a reserved variable and cannot be defined as a variable.
# However, PATH can be changed in a build step and the change is visible in subsequent steps.
steps:
- type: Command
name: "Install the latest GraalVM Enterprise 22.x for Java 17 - JDK and Native Image"
command: |
yum -y install graalvm22-ee-17-native-image
- type: Command
name: "Set the PATH here. JAVA_HOME already set in env > variables above."
command: |
export PATH=$JAVA_HOME/bin:$PATH
- type: Command
name: "Build a native executable with the installed GraalVM Enterprise 22.x for Java 17 - Native Image"
command: |
mvn --no-transfer-progress -Pnative -DskipTests package
outputArtifacts:
- name: app_native_executable
type: BINARY
location: target/my-app
例4:
MavenおよびGraalVM Enterprise 22.x for Java 17 - Native Imageを使用してMicronautアプリケーションからネイティブ実行可能ファイルをビルドするためのサンプル・ビルド仕様ファイル。
version: 0.1
component: build
timeoutInSeconds: 900
runAs: root
shell: bash
env:
variables:
"JAVA_HOME" : "/usr/lib64/graalvm/graalvm22-ee-java17"
TAG: "mn-hello-ni:0.0.1"
APP_FILE: "MnHelloRest"
exportedVariables:
- BUILDRUN_HASH
steps:
- type: Command
name: "Define unique image tag"
timeoutInSeconds: 140
command: |
echo "OCI_BUILD_RUN_ID: ${OCI_BUILD_RUN_ID}"
export BUILDRUN_HASH=`echo ${OCI_BUILD_RUN_ID} | rev | cut -c 1-7`
echo "BUILDRUN_HASH: " $BUILDRUN_HASH
- type: Command
name: "Install the latest GraalVM Enterprise 22.x for Java 17 - JDK and Native Image"
command: |
yum -y install graalvm22-ee-17-native-image
- type: Command
name: "Set the PATH here. JAVA_HOME already set in env > variables above"
command: |
export PATH=$JAVA_HOME/bin:$PATH
- type: Command
name: "Build a native executable with the installed GraalVM Enterprise 22.x for Java 17 - Native Image"
command: |
./mvnw --no-transfer-progress package -Dpackaging=native-image
- type: Command
name: "Package the native executable in a runtime container image"
command: |
docker build -f ./Dockerfile \
--build-arg APP_FILE=${APP_FILE} \
-t ${TAG}
outputArtifacts:
- name: app_native_executable
type: BINARY
location: target/MnHelloRest
- name: runtime_image
type: DOCKER_IMAGE
location: ${TAG}