Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add 'container' configuration object to wrap container-specific parameters #421

Merged
merged 11 commits into from
Jun 20, 2018
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public Blob getContainerConfigurationBlob() {
// Sets the entrypoint.
template.setContainerEntrypoint(image.getEntrypoint());

// Sets the entrypoint.
// Sets the main class arguments.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

main method?

template.setContainerCmd(image.getJavaArguments());

// Serializes into JSON.
Expand Down
1 change: 1 addition & 0 deletions jib-gradle-plugin/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file.
### Changed

- Fetches credentials from inferred credential helper before Docker config ([#401](https://github.com/GoogleContainerTools/jib/issues/401))
- `jvmFlags`, `mainClass`, `args`, and `format` are now grouped under `container` configuration object ([#384](https://github.com/GoogleContainerTools/jib/issues/384))

### Fixed

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ dependencies {
}

jib {
args = ['An argument.']
container {
args = ['An argument.']
}

// Does not have tests use user-level cache for base image layers.
useOnlyProjectCache = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ jib {
image = 'gcr.io/jib-integration-testing/simpleimage:gradle'
credHelper = 'gcr'
}
args = ['An argument.']
container {
args = ['An argument.']
}

// Does not have tests use user-level cache for base image layers.
useOnlyProjectCache = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,8 @@ public void buildDocker() throws InvalidImageReferenceException {
.setBaseImageCredentialHelperName(jibExtension.getFrom().getCredHelper())
.setKnownBaseRegistryCredentials(knownBaseRegistryCredentials)
.setMainClass(mainClass)
.setJavaArguments(jibExtension.getArgs())
.setJvmFlags(jibExtension.getJvmFlags())
.setJavaArguments(jibExtension.getContainer().getArgs())
.setJvmFlags(jibExtension.getContainer().getJvmFlags())
.build();

// TODO: Instead of disabling logging, have authentication credentials be provided
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,9 @@ public void buildImage() throws InvalidImageReferenceException {
.setTargetImageCredentialHelperName(jibExtension.getTo().getCredHelper())
.setKnownTargetRegistryCredentials(knownTargetRegistryCredentials)
.setMainClass(mainClass)
.setJavaArguments(jibExtension.getArgs())
.setJvmFlags(jibExtension.getJvmFlags())
.setTargetFormat(jibExtension.getFormat())
.setJavaArguments(jibExtension.getContainer().getArgs())
.setJvmFlags(jibExtension.getContainer().getJvmFlags())
.setTargetFormat(jibExtension.getContainer().getFormat())
.build();

// TODO: Instead of disabling logging, have authentication credentials be provided
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
/*
* Copyright 2018 Google LLC. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/

package com.google.cloud.tools.jib.gradle;

import com.google.cloud.tools.jib.image.ImageFormat;
import com.google.cloud.tools.jib.image.json.BuildableManifestTemplate;
import com.google.common.base.Preconditions;
import java.util.Collections;
import java.util.List;
import javax.annotation.Nullable;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.Optional;

/**
* A bean that configures properties of the container run from the image. This is configurable with
* Groovy closures and can be validated when used as a task input.
*/
public class ContainerConfiguration {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe ContainerParameters so that it's not confused with the container configuration that is part of the image format?


private List<String> jvmFlags = Collections.emptyList();
@Nullable private String mainClass;
private List<String> args = Collections.emptyList();
private ImageFormat format = ImageFormat.Docker;

@Input
@Optional
public List<String> getJvmFlags() {
return jvmFlags;
}

public void setJvmFlags(List<String> jvmFlags) {
this.jvmFlags = jvmFlags;
}

@Input
@Nullable
@Optional
public String getMainClass() {
return mainClass;
}

public void setMainClass(String mainClass) {
this.mainClass = mainClass;
}

@Input
@Optional
public List<String> getArgs() {
return args;
}

public void setArgs(List<String> args) {
this.args = args;
}

@Input
@Optional
public Class<? extends BuildableManifestTemplate> getFormat() {
return Preconditions.checkNotNull(format).getManifestTemplateClass();
}

public void setFormat(ImageFormat format) {
this.format = format;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,9 @@ public void generateDockerContext() {
try {
new DockerContextGenerator(gradleProjectProperties.getSourceFilesConfiguration())
.setBaseImage(jibExtension.getBaseImage())
.setJvmFlags(jibExtension.getJvmFlags())
.setJvmFlags(jibExtension.getContainer().getJvmFlags())
.setMainClass(mainClass)
.setJavaArguments(jibExtension.getArgs())
.setJavaArguments(jibExtension.getContainer().getArgs())
.generate(Paths.get(targetDir));

gradleBuildLogger.info("Created Docker context at " + targetDir);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public String getJarPluginName() {
*/
String getMainClass(JibExtension jibExtension) {
try {
return MainClassFinder.resolveMainClass(jibExtension.getMainClass(), this);
return MainClassFinder.resolveMainClass(jibExtension.getContainer().getMainClass(), this);
} catch (MainClassInferenceException ex) {
throw new GradleException(ex.getMessage(), ex);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,11 @@

package com.google.cloud.tools.jib.gradle;

import com.google.cloud.tools.jib.image.ImageFormat;
import com.google.cloud.tools.jib.image.json.BuildableManifestTemplate;
import com.google.common.base.Preconditions;
import java.util.Collections;
import java.util.List;
import javax.annotation.Nullable;
import org.gradle.api.Action;
import org.gradle.api.Project;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.Internal;
Expand Down Expand Up @@ -58,36 +53,24 @@ public class JibExtension {

// Defines default configuration values.
private static final String DEFAULT_FROM_IMAGE = "gcr.io/distroless/java";
private static final List<String> DEFAULT_JVM_FLAGS = Collections.emptyList();
private static final List<String> DEFAULT_ARGS = Collections.emptyList();
private static final ImageFormat DEFAULT_FORMAT = ImageFormat.Docker;
private static final boolean DEFAULT_USE_ONLY_PROJECT_CACHE = false;

private final ImageConfiguration from;
private final ImageConfiguration to;
private final ListProperty<String> jvmFlags;
private final Property<String> mainClass;
private final ListProperty<String> args;
private final Property<ImageFormat> format;
private final ContainerConfiguration container;
private final Property<Boolean> useOnlyProjectCache;

public JibExtension(Project project) {
ObjectFactory objectFactory = project.getObjects();

from = objectFactory.newInstance(ImageConfiguration.class);
to = objectFactory.newInstance(ImageConfiguration.class);
container = objectFactory.newInstance(ContainerConfiguration.class);

jvmFlags = objectFactory.listProperty(String.class);
mainClass = objectFactory.property(String.class);
args = objectFactory.listProperty(String.class);
format = objectFactory.property(ImageFormat.class);
useOnlyProjectCache = objectFactory.property(Boolean.class);

// Sets defaults.
from.setImage(DEFAULT_FROM_IMAGE);
jvmFlags.set(DEFAULT_JVM_FLAGS);
args.set(DEFAULT_ARGS);
format.set(DEFAULT_FORMAT);
useOnlyProjectCache.set(DEFAULT_USE_ONLY_PROJECT_CACHE);
}

Expand All @@ -99,20 +82,8 @@ public void to(Action<? super ImageConfiguration> action) {
action.execute(to);
}

public void setJvmFlags(List<String> jvmFlags) {
this.jvmFlags.set(jvmFlags);
}

public void setMainClass(String mainClass) {
this.mainClass.set(mainClass);
}

public void setArgs(List<String> args) {
this.args.set(args);
}

public void setFormat(ImageFormat format) {
this.format.set(format);
public void container(Action<? super ContainerConfiguration> action) {
action.execute(container);
}

public void setUseOnlyProjectCache(boolean useOnlyProjectCache) {
Expand Down Expand Up @@ -142,28 +113,10 @@ ImageConfiguration getTo() {
return to;
}

@Input
List<String> getJvmFlags() {
return jvmFlags.get();
}

@Input
@Nullable
@Optional
String getMainClass() {
return mainClass.getOrNull();
}

@Input
@Optional
List<String> getArgs() {
return args.get();
}

@Input
@Nested
@Optional
Class<? extends BuildableManifestTemplate> getFormat() {
return format.get().getManifestTemplateClass();
ContainerConfiguration getContainer() {
return container;
}

@Input
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,35 +84,25 @@ public void testTo() {
}

@Test
public void testJvmFlags() {
Assert.assertEquals(Collections.emptyList(), testJibExtension.getJvmFlags());

testJibExtension.setJvmFlags(Arrays.asList("flag1", "flag2"));
Assert.assertEquals(Arrays.asList("flag1", "flag2"), testJibExtension.getJvmFlags());
}

@Test
public void testMainClass() {
Assert.assertNull(testJibExtension.getMainClass());

testJibExtension.setMainClass("some main class");
Assert.assertEquals("some main class", testJibExtension.getMainClass());
}

@Test
public void testArgs() {
Assert.assertEquals(Collections.emptyList(), testJibExtension.getArgs());

testJibExtension.setArgs(Arrays.asList("arg1", "arg2"));
Assert.assertEquals(Arrays.asList("arg1", "arg2"), testJibExtension.getArgs());
}

@Test
public void testFormat() {
Assert.assertEquals(V22ManifestTemplate.class, testJibExtension.getFormat());

testJibExtension.setFormat(ImageFormat.OCI);
Assert.assertEquals(OCIManifestTemplate.class, testJibExtension.getFormat());
public void testContainer() {
Assert.assertEquals(Collections.emptyList(), testJibExtension.getContainer().getJvmFlags());
Assert.assertNull(testJibExtension.getContainer().getMainClass());
Assert.assertEquals(Collections.emptyList(), testJibExtension.getContainer().getArgs());
Assert.assertEquals(V22ManifestTemplate.class, testJibExtension.getContainer().getFormat());

testJibExtension.container(
container -> {
container.setJvmFlags(Arrays.asList("jvmFlag1", "jvmFlag2"));
container.setMainClass("mainClass");
container.setArgs(Arrays.asList("arg1", "arg2", "arg3"));
container.setFormat(ImageFormat.OCI);
});
Assert.assertEquals(
Arrays.asList("jvmFlag1", "jvmFlag2"), testJibExtension.getContainer().getJvmFlags());
Assert.assertEquals("mainClass", testJibExtension.getContainer().getMainClass());
Assert.assertEquals(
Arrays.asList("arg1", "arg2", "arg3"), testJibExtension.getContainer().getArgs());
Assert.assertEquals(OCIManifestTemplate.class, testJibExtension.getContainer().getFormat());
}

@Test
Expand Down
1 change: 1 addition & 0 deletions jib-maven-plugin/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file.
### Changed

- Fetches credentials from inferred credential helper before Docker config ([#401](https://github.com/GoogleContainerTools/jib/issues/401))
- `jvmFlags`, `mainClass`, `args`, and `format` are now grouped under `container` configuration object ([#384](https://github.com/GoogleContainerTools/jib/issues/384))

### Fixed

Expand Down
Loading