Add documentation for gradle bootBuildImage task

pull/19995/head
Scott Frederick 5 years ago
parent bceed1305f
commit 653cabe2ce

@ -1,5 +1,5 @@
= Spring Boot Gradle Plugin Reference Guide = Spring Boot Gradle Plugin Reference Guide
Andy Wilkinson Andy Wilkinson, Scott Frederick
:doctype: book :doctype: book
:toc: left :toc: left
:toclevels: 4 :toclevels: 4
@ -25,6 +25,7 @@ Andy Wilkinson
:spring-boot-docs: https://docs.spring.io/spring-boot/docs/{gradle-project-version} :spring-boot-docs: https://docs.spring.io/spring-boot/docs/{gradle-project-version}
:api-documentation: {spring-boot-docs}/gradle-plugin/api :api-documentation: {spring-boot-docs}/gradle-plugin/api
:spring-boot-reference: {spring-boot-docs}/reference/htmlsingle :spring-boot-reference: {spring-boot-docs}/reference/htmlsingle
:spring-boot-api: {spring-boot-docs}/api/org/springframework/boot
:version-properties-appendix: {spring-boot-reference}/#dependency-versions-coordinates :version-properties-appendix: {spring-boot-reference}/#dependency-versions-coordinates
:build-info-javadoc: {api-documentation}/org/springframework/boot/gradle/tasks/buildinfo/BuildInfo.html :build-info-javadoc: {api-documentation}/org/springframework/boot/gradle/tasks/buildinfo/BuildInfo.html
:boot-build-image-javadoc: {api-documentation}/org/springframework/boot/gradle/tasks/bundling/BootBuildImage.html :boot-build-image-javadoc: {api-documentation}/org/springframework/boot/gradle/tasks/bundling/BootBuildImage.html
@ -32,7 +33,7 @@ Andy Wilkinson
:boot-war-javadoc: {api-documentation}/org/springframework/boot/gradle/tasks/bundling/BootWar.html :boot-war-javadoc: {api-documentation}/org/springframework/boot/gradle/tasks/bundling/BootWar.html
:boot-run-javadoc: {api-documentation}/org/springframework/boot/gradle/tasks/run/BootRun.html :boot-run-javadoc: {api-documentation}/org/springframework/boot/gradle/tasks/run/BootRun.html
:github-code: https://github.com/spring-projects/spring-boot/tree/{github-tag} :github-code: https://github.com/spring-projects/spring-boot/tree/{github-tag}
:buildpacks-reference: https://buildpacks.io/docs
[[introduction]] [[introduction]]
@ -47,6 +48,7 @@ In addition to this user guide, {api-documentation}[API documentation] is also a
include::getting-started.adoc[] include::getting-started.adoc[]
include::managing-dependencies.adoc[] include::managing-dependencies.adoc[]
include::packaging.adoc[] include::packaging.adoc[]
include::packaging-oci-image.adoc[]
include::publishing.adoc[] include::publishing.adoc[]
include::running.adoc[] include::running.adoc[]
include::integrating-with-actuator.adoc[] include::integrating-with-actuator.adoc[]

@ -0,0 +1,99 @@
[[build-image]]
== Packaging OCI images
The plugin can create an https://github.com/opencontainers/image-spec[OCI image] from executable jars using https://buildpacks.io[Cloud Native Buildpacks].
Images can be built using the `bootBuildImage` task and a local Docker installation.
The task is automatically created when the `java` plugin is applied and is an instance of {boot-build-image-javadoc}[`BootBuildImage`].
[[build-image-customization]]
=== Image Customizations
The plugin invokes a {buildpacks-reference}/concepts/components/builder/[builder] to orchestrate the generation of an image.
The builder includes multiple {buildpacks-reference}/concepts/components/buildpack[buildpacks] that can inspect the application to influence the generated image.
By default, the plugin chooses a builder image.
The name of the generated image is deduced from project properties.
Task properties can be used to configure how the builder should operate on the project.
The following table summarizes the available properties and their default values:
|===
| Property | Description | Default value
| `builder`
| Name of the Builder image to use.
| `cloudfoundry/cnb:0.0.43-bionic`
| `imageName`
| {spring-boot-api}/buildpack/platform/docker/type/ImageReference.html#of-java.lang.String-[Image name] for the generated image.
| `docker.io/library/${project.artifactId}:${project.version}`
| `environment`
| Environment variables that should be passed to the builder.
|
| `cleanCache`
| Whether to clean the cache before building.
| `false`
| `verboseLogging`
| Enables verbose logging of builder operations.
| `false`
|===
[[build-image-examples]]
=== Examples
[[build-image-example-custom-image-builder]]
==== Custom Image Builder
If you need to customize the builder used to create the image, configure the task as shown in the following example:
[source,groovy,indent=0,subs="verbatim,attributes",role="primary"]
.Groovy
----
include::../gradle/packaging/boot-build-image-builder.gradle[tags=builder]
----
[source,kotlin,indent=0,subs="verbatim,attributes",role="secondary"]
.Kotlin
----
include::../gradle/packaging/boot-build-image-builder.gradle.kts[tags=builder]
----
This configuration will use a builder image with the name `mine/java-cnb-builder` and the tag `latest`.
If the builder exposes configuration options, those can be set using the `environment` property, as shown in the following example:
[source,groovy,indent=0,subs="verbatim,attributes",role="primary"]
.Groovy
----
include::../gradle/packaging/boot-build-image-env.gradle[tags=env]
----
[source,kotlin,indent=0,subs="verbatim,attributes",role="secondary"]
.Kotlin
----
include::../gradle/packaging/boot-build-image-env.gradle.kts[tags=env]
----
The example above assumes that the builder defines a `BP_JAVA_VERSION` property (typically used to customize the JDK version the image should use).
[[build-image-example-custom-image-name]]
==== Custom Image Name
By default, the image name is inferred from the `artifactId` and the `version` of the project, something like `docker.io/library/${project.artifactId}:${project.version}`.
You can take control over the name by setting task properties, as shown in the following example:
[source,groovy,indent=0,subs="verbatim,attributes",role="primary"]
.Groovy
----
include::../gradle/packaging/boot-build-image-name.gradle[tags=image-name]
----
[source,kotlin,indent=0,subs="verbatim,attributes",role="secondary"]
.Kotlin
----
include::../gradle/packaging/boot-build-image-name.gradle.kts[tags=image-name]
----
Note that this configuration does not provide an explicit tag so `latest` is used.
It is possible to specify a tag as well, either using `${project.version}`, any property available in the build or a hardcoded version.

@ -299,11 +299,3 @@ The jar will then be split into layer folders which may include:
* `snapshots-dependencies` * `snapshots-dependencies`
* `dependencies` * `dependencies`
[[packaging-oci-images]]
== Packaging OCI images
The plugin can create OCI images from executable jars using a https://buildpacks.io[buildpack].
Images can be built using the `bootBuildImage` task and a local Docker installation.
The task is automatically created when the `java` plugin is applied and is an instance of {boot-build-image-javadoc}[`BootBuildImage`].

@ -0,0 +1,14 @@
plugins {
id 'java'
id 'org.springframework.boot' version '{version}'
}
bootJar {
mainClassName 'com.example.ExampleApplication'
}
// tag::builder[]
bootBuildImage {
builder = "mine/java-cnb-builder"
}
// end::builder[]

@ -0,0 +1,16 @@
import org.springframework.boot.gradle.tasks.bundling.BootJar
plugins {
java
id("org.springframework.boot") version "{version}"
}
tasks.getByName<BootJar>("bootJar") {
mainClassName = "com.example.ExampleApplication"
}
// tag::builder[]
tasks.getByName<BootBuildImage>("bootBuildImage") {
builder = "mine/java-cnb-builder"
}
// end::builder[]

@ -0,0 +1,14 @@
plugins {
id 'java'
id 'org.springframework.boot' version '{version}'
}
bootJar {
mainClassName 'com.example.ExampleApplication'
}
// tag::env[]
bootBuildImage {
environment = ["BP_JAVA_VERSION" : "13.0.1"]
}
// end::env[]

@ -0,0 +1,16 @@
import org.springframework.boot.gradle.tasks.bundling.BootJar
plugins {
java
id("org.springframework.boot") version "{version}"
}
tasks.getByName<BootJar>("bootJar") {
mainClassName = "com.example.ExampleApplication"
}
// tag::env[]
tasks.getByName<BootBuildImage>("bootBuildImage") {
environment = ["BP_JAVA_VERSION" : "13.0.1"]
}
// end::env[]

@ -0,0 +1,14 @@
plugins {
id 'java'
id 'org.springframework.boot' version '{version}'
}
bootJar {
mainClassName 'com.example.ExampleApplication'
}
// tag::image-name[]
bootBuildImage {
imageName = "example.com/library/${project.artifactId}"
}
// end::image-name[]

@ -0,0 +1,16 @@
import org.springframework.boot.gradle.tasks.bundling.BootJar
plugins {
java
id("org.springframework.boot") version "{version}"
}
tasks.getByName<BootJar>("bootJar") {
mainClassName = "com.example.ExampleApplication"
}
// tag::image-name[]
tasks.getByName<BootBuildImage>("bootBuildImage") {
imageName = "example.com/library/${project.artifactId}"
}
// end::image-name[]

@ -1,5 +1,5 @@
= Spring Boot Maven Plugin Documentation = Spring Boot Maven Plugin Documentation
Stephane Nicoll, Andy Wilkinson Stephane Nicoll, Andy Wilkinson, Scott Frederick
:doctype: book :doctype: book
:toc: left :toc: left
:toclevels: 4 :toclevels: 4

@ -1,7 +1,7 @@
[[build-image]] [[build-image]]
== Packaging OCI Images == Packaging OCI Images
The plugin can create https://github.com/opencontainers/image-spec[OCI images] using a https://buildpacks.io/[buildpack]. The plugin can create an https://github.com/opencontainers/image-spec[OCI image] using https://buildpacks.io/[Cloud Native Buildpacks].
Images can be built using the `build-image` goal and a local Docker installation. Images can be built using the `build-image` goal and a local Docker installation.
The easiest way to get started is to to invoke `mvn spring-boot:build-image` on a project. The easiest way to get started is to to invoke `mvn spring-boot:build-image` on a project.
@ -14,7 +14,7 @@ It is possible to automate the creation of an image whenever the `package` phase
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<version>{version}</version> <version>{gradle-project-version}</version>
<executions> <executions>
<execution> <execution>
<goals> <goals>
@ -32,7 +32,11 @@ When the `build-image` repackages the application, it applies the same settings
[[build-image-customization]] [[build-image-customization]]
=== Image Customizations === Image Customizations
By default, the image is built using the `cloudfoundry/cnb:0.0.43-bionic` builder and its name is deduced from the `artifactId` of the project. The plugin invokes a {buildpacks-reference}/concepts/components/builder/[builder] to orchestrate the generation of an image.
The builder includes multiple {buildpacks-reference}/concepts/components/buildpack[buildpacks] that can inspect the application to influence the generated image.
By default, the plugin chooses a builder image.
The name of the generated image is deduced from project properties.
The `image` parameter allows to configure how the builder should operate on the project. The `image` parameter allows to configure how the builder should operate on the project.
The following table summarizes the available properties and their default values: The following table summarizes the available properties and their default values:
@ -40,15 +44,15 @@ The following table summarizes the available properties and their default values
| Property | Description | Default value | Property | Description | Default value
| `builder` | `builder`
| {buildpacks-reference}/concepts/components/builder/[Builder image] name to use. | Name of the Builder image to use.
| `cloudfoundry/cnb:0.0.43-bionic` | `cloudfoundry/cnb:0.0.43-bionic`
| `name` | `name`
| {spring-boot-api}/buildpack/platform/docker/type/ImageReference.html#of-java.lang.String-[Image name]. | {spring-boot-api}/buildpack/platform/docker/type/ImageReference.html#of-java.lang.String-[Image name] for the generated image.
| `docker.io/library/${project.artifactId}:${project.version}` | `docker.io/library/${project.artifactId}:${project.version}`
| `env` | `env`
| Environment properties that should be passed to the builder. | Environment variables that should be passed to the builder.
| |
| `cleanCache` | `cleanCache`
@ -56,7 +60,7 @@ The following table summarizes the available properties and their default values
| `false` | `false`
| `verboseLogging` | `verboseLogging`
| Whether verbose logging is required. | Enables verbose logging of builder operations.
| `false` | `false`
|=== |===
@ -81,7 +85,7 @@ If you need to customize the builder used to create the image, configure yours a
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<version>{version}</version> <version>{gradle-project-version}</version>
<configuration> <configuration>
<image> <image>
<builder>mine/java-cnb-builder</builder> <builder>mine/java-cnb-builder</builder>
@ -93,7 +97,7 @@ If you need to customize the builder used to create the image, configure yours a
</project> </project>
---- ----
This configuration will use the `latest` version of the `mine/java-cnb-builder` builder. This configuration will use a builder image with the name `mine/java-cnb-builder` and the tag `latest`.
If the builder exposes configuration options, those can be set using the `env` attributes, as shown in the following example: If the builder exposes configuration options, those can be set using the `env` attributes, as shown in the following example:
@ -105,7 +109,7 @@ If the builder exposes configuration options, those can be set using the `env` a
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<version>{version}</version> <version>{gradle-project-version}</version>
<configuration> <configuration>
<image> <image>
<builder>mine/java-cnb-builder</builder> <builder>mine/java-cnb-builder</builder>
@ -126,7 +130,7 @@ The example above assumes that `mine/java-cnb-builder` defines a `BP_JAVA_VERSIO
[[build-image-example-custom-image-name]] [[build-image-example-custom-image-name]]
==== Custom Image Name ==== Custom Image Name
By default, the image name is inferred from the `artifactId` and the `version` of the project, something like `docker.io/library/${project.artifactId}:{project.version}`. By default, the image name is inferred from the `artifactId` and the `version` of the project, something like `docker.io/library/${project.artifactId}:${project.version}`.
You can take control over the name, as shown in the following example: You can take control over the name, as shown in the following example:
[source,xml,indent=0,subs="verbatim,attributes"] [source,xml,indent=0,subs="verbatim,attributes"]
@ -137,7 +141,7 @@ You can take control over the name, as shown in the following example:
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<version>{version}</version> <version>{gradle-project-version}</version>
<configuration> <configuration>
<image> <image>
<name>example.com/library/${project.artifactId}</name> <name>example.com/library/${project.artifactId}</name>
@ -149,5 +153,5 @@ You can take control over the name, as shown in the following example:
</project> </project>
---- ----
Note that this configuration does not provide an explicit version so `latest` is used. Note that this configuration does not provide an explicit tag so `latest` is used.
It is possible to specify a version as well, either using `${project.version}`, any property available in the build or an hardcoded version. It is possible to specify a tag as well, either using `${project.version}`, any property available in the build or a hardcoded version.
Loading…
Cancel
Save