Docker Google JIB 创建的图像不包含 spring rest 文档的 asciidoc
Docker Image created by Google JIB did not include asciidoc of spring rest docs
我使用 Spring Rest Docs 和 JIB
当我做 ./gradlew build
和 java -jar /some/build/libs/app.jar
时。我可以在 example.com/docs/asciidocname.html
.
获得由 spring rest 文档生成的 api 文档
但是 docker 带有 ./gradlew jib
的图像不包含此 url。
我想获取 Api 由 Spring Rest Docs 生成的文档 当我这样做时 ./gradlew jib
下面是我的一部分build.gradle
plugins {
id "org.asciidoctor.convert" version "2.4.0"
id "com.google.cloud.tools.jib" version "2.5.0"
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
querydsl.extendsFrom compileClasspath
asciidoctor
}
repositories {
mavenCentral()
maven { url 'https://repo.spring.io/milestone' }
maven { url 'https://repo.spring.io/snapshot' }
}
sourceCompatibility = '11'
dependencies {
/**
* RestDocs
*/
asciidoctor 'org.springframework.restdocs:spring-restdocs-asciidoctor'
testImplementation('org.springframework.restdocs:spring-restdocs-mockmvc')
}
test {
useJUnitPlatform {
includeEngines 'junit-jupiter'
}
}
/*************************
* Rest Docs
*************************/
asciidoctor {
dependsOn test
}
bootJar {
dependsOn asciidoctor
from ("${asciidoctor.outputDir}/html5") {
into 'static/docs'
}
}
您已将 bootJar
任务配置为依赖于 asciidoctor
任务并包括生成的 HTML 文件:
bootJar {
dependsOn asciidoctor
from ("${asciidoctor.outputDir}/html5") {
into 'static/docs'
}
}
Jib 在构建容器镜像时不使用 jar 文件,因此您需要为 Jib 添加类似的配置。
让我们先看看如何让它包含生成的 HTML。它提供了一个名为 jib
的扩展,您可以在其中使用 extraDirectories
来执行此操作:
jib {
extraDirectories {
paths {
path {
from = "${asciidoctor.outputDir}/html5"
into = "/app/resources/static/docs"
}
}
}
}
您可以在 the documentation for its Gradle plugin 中了解有关将文件添加到 Jib 生成的图像的更多信息。
现在我们需要将 jib
任务配置为依赖于 asciidoctor
任务。这确保了 HTML 在 Jib 尝试将其包含在图像中之前已经生成。由于扩展和任务都命名为 jib
,我们需要明确引用任务:
tasks.named('jib') {
dependsOn asciidoctor
}
如果您曾将映像构建到本地 Docker 守护程序,您可能还需要对 jibDockerBuild
任务进行类似的配置:
jibDockerBuild {
dependsOn asciidoctor
}
我发现了另一种方法。
首先。 JIB 通过 java -cp
命令执行一个主要的 java class。未打包 .jar
个文件。
和 asciidoctor 任务将 html 文件复制到 jar 文件中。
我可以在 jib gradle github.
找到选项
- 如果您使用
containerizingMode = 'packaged'
选项。它将构建 jar 文件并在 docker 容器中执行 java -cp
命令。
- 和
./gradlew jib
带有此选项的任务将执行jar
任务。
所以我将我的 bootJar 任务复制到 jar 任务并使用该选项。效果不错
我使用 Spring Rest Docs 和 JIB
当我做 ./gradlew build
和 java -jar /some/build/libs/app.jar
时。我可以在 example.com/docs/asciidocname.html
.
但是 docker 带有 ./gradlew jib
的图像不包含此 url。
我想获取 Api 由 Spring Rest Docs 生成的文档 当我这样做时 ./gradlew jib
下面是我的一部分build.gradle
plugins {
id "org.asciidoctor.convert" version "2.4.0"
id "com.google.cloud.tools.jib" version "2.5.0"
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
querydsl.extendsFrom compileClasspath
asciidoctor
}
repositories {
mavenCentral()
maven { url 'https://repo.spring.io/milestone' }
maven { url 'https://repo.spring.io/snapshot' }
}
sourceCompatibility = '11'
dependencies {
/**
* RestDocs
*/
asciidoctor 'org.springframework.restdocs:spring-restdocs-asciidoctor'
testImplementation('org.springframework.restdocs:spring-restdocs-mockmvc')
}
test {
useJUnitPlatform {
includeEngines 'junit-jupiter'
}
}
/*************************
* Rest Docs
*************************/
asciidoctor {
dependsOn test
}
bootJar {
dependsOn asciidoctor
from ("${asciidoctor.outputDir}/html5") {
into 'static/docs'
}
}
您已将 bootJar
任务配置为依赖于 asciidoctor
任务并包括生成的 HTML 文件:
bootJar {
dependsOn asciidoctor
from ("${asciidoctor.outputDir}/html5") {
into 'static/docs'
}
}
Jib 在构建容器镜像时不使用 jar 文件,因此您需要为 Jib 添加类似的配置。
让我们先看看如何让它包含生成的 HTML。它提供了一个名为 jib
的扩展,您可以在其中使用 extraDirectories
来执行此操作:
jib {
extraDirectories {
paths {
path {
from = "${asciidoctor.outputDir}/html5"
into = "/app/resources/static/docs"
}
}
}
}
您可以在 the documentation for its Gradle plugin 中了解有关将文件添加到 Jib 生成的图像的更多信息。
现在我们需要将 jib
任务配置为依赖于 asciidoctor
任务。这确保了 HTML 在 Jib 尝试将其包含在图像中之前已经生成。由于扩展和任务都命名为 jib
,我们需要明确引用任务:
tasks.named('jib') {
dependsOn asciidoctor
}
如果您曾将映像构建到本地 Docker 守护程序,您可能还需要对 jibDockerBuild
任务进行类似的配置:
jibDockerBuild {
dependsOn asciidoctor
}
我发现了另一种方法。
首先。 JIB 通过 java -cp
命令执行一个主要的 java class。未打包 .jar
个文件。
和 asciidoctor 任务将 html 文件复制到 jar 文件中。
我可以在 jib gradle github.
找到选项- 如果您使用
containerizingMode = 'packaged'
选项。它将构建 jar 文件并在 docker 容器中执行java -cp
命令。 - 和
./gradlew jib
带有此选项的任务将执行jar
任务。
所以我将我的 bootJar 任务复制到 jar 任务并使用该选项。效果不错