Skip to content

Commit 846b759

Browse files
Introduce fromImage field in jib builder interface. (#4873)
* rename baseImage to fromImage * Update HelloController.java * Update pkg/skaffold/schema/latest/config.go Co-authored-by: Brian de Alwis <[email protected]> * Update v2beta9.json Co-authored-by: Brian de Alwis <[email protected]>
1 parent 7e5ae4c commit 846b759

File tree

11 files changed

+62
-36
lines changed

11 files changed

+62
-36
lines changed

docs/content/en/schemas/v2beta9.json

+7-1
Original file line numberDiff line numberDiff line change
@@ -1590,6 +1590,11 @@
15901590
"[\"--no-build-cache\"]"
15911591
]
15921592
},
1593+
"fromImage": {
1594+
"type": "string",
1595+
"description": "overrides the configured jib base image.",
1596+
"x-intellij-html-description": "overrides the configured jib base image."
1597+
},
15931598
"project": {
15941599
"type": "string",
15951600
"description": "selects which sub-project to build for multi-module builds.",
@@ -1608,7 +1613,8 @@
16081613
"preferredOrder": [
16091614
"project",
16101615
"args",
1611-
"type"
1616+
"type",
1617+
"fromImage"
16121618
],
16131619
"additionalProperties": false,
16141620
"description": "builds images using the [Jib plugins for Maven and Gradle](https://github.com/GoogleContainerTools/jib/).",

integration/examples/jib-sync/README.md

+14-25
Original file line numberDiff line numberDiff line change
@@ -63,41 +63,30 @@ build:
6363
6464
This example is designed around the functionality available in [Spring Boot Developer Tools](https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-devtools) for developing against running applications.
6565
66-
Some additional steps in your java build are required for this to work:
67-
- Sync requires `tar` on the running container to copy files over. The default base image that Jib uses `gcr.io/distroless/java` does not include `tar` or any utilities. During development you must use a base image that includes `tar`, in this example we use the `debug` flavor of distroless: `gcr.io/distroless/java:debug`
66+
Some additional steps are required for this to work:
67+
- Sync requires `tar` on the running container to copy files over. The default base image that Jib uses `gcr.io/distroless/java` does not include `tar` or any utilities. During development, you must use a base image that includes `tar`, in this example we use the `debug` flavor of distroless: `gcr.io/distroless/java:debug`
6868

69-
`maven`
70-
```xml
71-
<plugin>
72-
<groupId>com.google.cloud.tools</groupId>
73-
<artifactId>jib-maven-plugin</artifactId>
74-
<version>${jib.maven-plugin-version}</version>
75-
<configuration>
76-
...
77-
<from>
78-
<image>gcr.io/distroless/java:debug</image>
79-
</from>
80-
</configuration>
81-
</plugin>
82-
```
69+
This can be done directly in the artifact configuration by overriding the `fromImage` property.
8370

84-
`gradle`
85-
```groovy
86-
jib {
87-
...
88-
from {
89-
image = "gcr.io/distroless/java:debug"
90-
}
91-
}
71+
```yaml
72+
build:
73+
artifacts:
74+
- image: skaffold-example
75+
context: .
76+
jib:
77+
fromImage: gcr.io/distroless/java:debug
78+
sync:
79+
auto: {}
9280
```
9381

82+
9483
- You must include the `spring-boot-devtools` dependency at the `compile/implementation` scope, which is contrary to the configuration outlined in the [official docs](https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-devtools). Because jib is unaware of any special spring only configuration in your builds, we recommend using profiles to turn on or off devtools support in your jib container builds.
9584

9685
`maven`
9786
```xml
9887
<profiles>
9988
<profile>
100-
<id>sync<id>
89+
<id>sync</id>
10190
<dependencies>
10291
<dependency>
10392
<groupId>org.springframework.boot</groupId>

integration/examples/jib-sync/build.gradle

-6
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,3 @@ dependencies {
2121

2222
testImplementation "org.springframework.boot:spring-boot-starter-test"
2323
}
24-
25-
jib {
26-
from {
27-
image = "gcr.io/distroless/java:debug"
28-
}
29-
}

integration/examples/jib-sync/pom.xml

-3
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,6 @@
3737
<artifactId>jib-maven-plugin</artifactId>
3838
<version>${jib.maven-plugin-version}</version>
3939
<configuration>
40-
<from>
41-
<image>gcr.io/distroless/java:debug</image>
42-
</from>
4340
<container>
4441
<jvmFlags>
4542
<jvmFlag>-Djava.security.egd=file:/dev/./urandom</jvmFlag>

integration/examples/jib-sync/skaffold-gradle.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ build:
77
type: gradle
88
args:
99
- -Psync
10+
fromImage: gcr.io/distroless/java:debug
1011
sync:
1112
auto: {}
1213

integration/examples/jib-sync/skaffold-maven.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ build:
88
args:
99
- --no-transfer-progress
1010
- -Psync
11+
fromImage: gcr.io/distroless/java:debug
1112
sync:
1213
auto: {}
1314

pkg/skaffold/build/jib/gradle.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,9 @@ func GenerateGradleBuildArgs(task string, imageName string, a *latest.JibArtifac
103103
// jib doesn't support marking specific registries as insecure
104104
args = append(args, "-Djib.allowInsecureRegistries=true")
105105
}
106-
106+
if a.BaseImage != "" {
107+
args = append(args, fmt.Sprintf("-Djib.from.image=%s", a.BaseImage))
108+
}
107109
args = append(args, "--image="+imageName)
108110
return args
109111
}

pkg/skaffold/build/jib/gradle_test.go

+16
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,13 @@ func TestBuildJibGradleToDocker(t *testing.T) {
5555
"gradle fake-gradleBuildArgs-for-project-for-jibDockerBuild --image=img:tag",
5656
),
5757
},
58+
{
59+
description: "build with custom base image",
60+
artifact: &latest.JibArtifact{BaseImage: "docker://busybox"},
61+
commands: testutil.CmdRun(
62+
"gradle fake-gradleBuildArgs-for-jibDockerBuild -Djib.from.image=docker://busybox --image=img:tag",
63+
),
64+
},
5865
{
5966
description: "fail build",
6067
artifact: &latest.JibArtifact{},
@@ -114,6 +121,13 @@ func TestBuildJibGradleToRegistry(t *testing.T) {
114121
"gradle fake-gradleBuildArgs-for-project-for-jib --image=img:tag",
115122
),
116123
},
124+
{
125+
description: "build with custom base image",
126+
artifact: &latest.JibArtifact{BaseImage: "docker://busybox"},
127+
commands: testutil.CmdRun(
128+
"gradle fake-gradleBuildArgs-for-jib -Djib.from.image=docker://busybox --image=img:tag",
129+
),
130+
},
117131
{
118132
description: "fail build",
119133
artifact: &latest.JibArtifact{},
@@ -337,6 +351,8 @@ func TestGenerateGradleBuildArgs(t *testing.T) {
337351
{"multi module", latest.JibArtifact{Project: "project"}, "image", false, nil, []string{"fake-gradleBuildArgs-for-project-for-testTask", "--image=image"}},
338352
{"multi module without tests", latest.JibArtifact{Project: "project"}, "image", true, nil, []string{"fake-gradleBuildArgs-for-project-for-testTask-skipTests", "--image=image"}},
339353
{"multi module without tests with insecure registries", latest.JibArtifact{Project: "project"}, "registry.tld/image", true, map[string]bool{"registry.tld": true}, []string{"fake-gradleBuildArgs-for-project-for-testTask-skipTests", "-Djib.allowInsecureRegistries=true", "--image=registry.tld/image"}},
354+
{"single module with custom base image", latest.JibArtifact{BaseImage: "docker://busybox"}, "image", false, nil, []string{"fake-gradleBuildArgs-for-testTask", "-Djib.from.image=docker://busybox", "--image=image"}},
355+
{"multi module with custom base image", latest.JibArtifact{Project: "project", BaseImage: "docker://busybox"}, "image", false, nil, []string{"fake-gradleBuildArgs-for-project-for-testTask", "-Djib.from.image=docker://busybox", "--image=image"}},
340356
}
341357
for _, test := range tests {
342358
testutil.Run(t, test.description, func(t *testutil.T) {

pkg/skaffold/build/jib/maven.go

+3
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ func GenerateMavenBuildArgs(goal string, imageName string, a *latest.JibArtifact
104104
// jib doesn't support marking specific registries as insecure
105105
args = append(args, "-Djib.allowInsecureRegistries=true")
106106
}
107+
if a.BaseImage != "" {
108+
args = append(args, fmt.Sprintf("-Djib.from.image=%s", a.BaseImage))
109+
}
107110
args = append(args, "-Dimage="+imageName)
108111

109112
return args

pkg/skaffold/build/jib/maven_test.go

+14
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,13 @@ func TestBuildJibMavenToDocker(t *testing.T) {
5555
"mvn fake-mavenBuildArgs-for-module-for-dockerBuild -Dimage=img:tag",
5656
),
5757
},
58+
{
59+
description: "build with custom base image",
60+
artifact: &latest.JibArtifact{BaseImage: "docker://busybox"},
61+
commands: testutil.CmdRun(
62+
"mvn fake-mavenBuildArgs-for-dockerBuild -Djib.from.image=docker://busybox -Dimage=img:tag",
63+
),
64+
},
5865
{
5966
description: "fail build",
6067
artifact: &latest.JibArtifact{},
@@ -110,6 +117,11 @@ func TestBuildJibMavenToRegistry(t *testing.T) {
110117
artifact: &latest.JibArtifact{Project: "module"},
111118
commands: testutil.CmdRun("mvn fake-mavenBuildArgs-for-module-for-build -Dimage=img:tag"),
112119
},
120+
{
121+
description: "build with custom base image",
122+
artifact: &latest.JibArtifact{BaseImage: "docker://busybox"},
123+
commands: testutil.CmdRun("mvn fake-mavenBuildArgs-for-build -Djib.from.image=docker://busybox -Dimage=img:tag"),
124+
},
113125
{
114126
description: "fail build",
115127
artifact: &latest.JibArtifact{},
@@ -325,6 +337,8 @@ func TestGenerateMavenBuildArgs(t *testing.T) {
325337
{"multi module", latest.JibArtifact{Project: "module"}, "image", false, nil, []string{"fake-mavenBuildArgs-for-module-for-test-goal", "-Dimage=image"}},
326338
{"multi module without tests", latest.JibArtifact{Project: "module"}, "image", true, nil, []string{"fake-mavenBuildArgs-for-module-for-test-goal-skipTests", "-Dimage=image"}},
327339
{"multi module without tests with insecure-registry", latest.JibArtifact{Project: "module"}, "registry.tld/image", true, map[string]bool{"registry.tld": true}, []string{"fake-mavenBuildArgs-for-module-for-test-goal-skipTests", "-Djib.allowInsecureRegistries=true", "-Dimage=registry.tld/image"}},
340+
{"single module with custom base image", latest.JibArtifact{BaseImage: "docker://busybox"}, "image", false, nil, []string{"fake-mavenBuildArgs-for-test-goal", "-Djib.from.image=docker://busybox", "-Dimage=image"}},
341+
{"multi module with custom base image", latest.JibArtifact{Project: "module", BaseImage: "docker://busybox"}, "image", false, nil, []string{"fake-mavenBuildArgs-for-module-for-test-goal", "-Djib.from.image=docker://busybox", "-Dimage=image"}},
328342
}
329343
for _, test := range tests {
330344
testutil.Run(t, test.description, func(t *testutil.T) {

pkg/skaffold/schema/latest/config.go

+3
Original file line numberDiff line numberDiff line change
@@ -1165,4 +1165,7 @@ type JibArtifact struct {
11651165
// `maven`: for Maven.
11661166
// `gradle`: for Gradle.
11671167
Type string `yaml:"type,omitempty"`
1168+
1169+
// BaseImage overrides the configured jib base image.
1170+
BaseImage string `yaml:"fromImage,omitempty"`
11681171
}

0 commit comments

Comments
 (0)