Usando o Oracle GraalVM em DevOps Pipelines de Build
Os pipelines de build DevOps permitem que você use o Oracle GraalVM para criar aplicativos Java de alto desempenho.
No estágio Build Gerenciado, você pode instalar e usar componentes do Oracle GraalVM, como o Native Image e o JDK (Java Development Kit), adicionando um comando simples do gerenciador de pacotes YUM no arquivo de especificação do build.
O Oracle GraalVM está disponível no OCI (Oracle Cloud Infrastructure) sem custo adicional.
Atualizando o Arquivo de Especificação de Build
Para instalar e usar o Oracle GraalVM no pipeline de build DevOps, atualize seu arquivo de especificação de build da seguinte forma:
- Adicione o comando a seguir para instalar um ou mais componentes Oracle GraalVM necessários. Por exemplo, esse comando instala a Imagem Nativa junto com o JDK e outras dependências necessárias.
steps: - type: Command name: "Install the latest Oracle GraalVM for JDK 20 - JDK and Native Image" command: | yum -y install graalvm-20-native-image
- Defina a variável do ambiente
JAVA_HOME
.env: variables: "JAVA_HOME" : "/usr/lib64/graalvm/graalvm-java20"
- Defina a variável de ambiente
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
Exemplo 1:
Amostra de arquivo de especificação de build para criar um arquivo executável nativo de um aplicativo Java usando Maven e Oracle GraalVM para JDK 17 - Native Image.
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
Exemplo 2:
Amostra de arquivo de especificação de build para criar um arquivo executável nativo de um aplicativo Micronaut usando Maven e Oracle GraalVM para JDK 17 - Native Image.
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}
Exemplo 3:
Amostra de arquivo de especificação de build para criar um arquivo executável nativo de um aplicativo Java usando Maven e GraalVM Enterprise 22.x para Java 17 - Native Image.
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
Exemplo 4:
Amostra de arquivo de especificação de build para criar um arquivo executável nativo de um aplicativo Micronaut usando Maven e GraalVM Enterprise 22.x para Java 17 - Native Image.
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}