-
Notifications
You must be signed in to change notification settings - Fork 49
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #60 from cloudogu/feature/59_add_gradle_support
Feature/59 add gradle support
- Loading branch information
Showing
7 changed files
with
174 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
package com.cloudogu.ces.cesbuildlib | ||
|
||
abstract class Gradle implements Serializable { | ||
protected script | ||
|
||
Gradle(script) { | ||
this.script = script | ||
} | ||
|
||
def call(String args, boolean printStdOut = true) { | ||
gradle(args, printStdOut) | ||
} | ||
|
||
/** | ||
* @param printStdOut - returns output of gradle as String instead of printing to console | ||
*/ | ||
protected abstract def gradle(String args, boolean printStdOut = true) | ||
|
||
def gradlew(String args, boolean printStdOut) { | ||
sh("./gradlew -q "+ args, printStdOut) | ||
} | ||
|
||
void sh(String command, boolean printStdOut) { | ||
script.echo "executing sh: ${command}, return Stdout: ${printStdOut}" | ||
if (printStdOut) { | ||
script.sh "${command}" | ||
} else { | ||
new Sh(script).returnStdOut command | ||
} | ||
} | ||
} |
34 changes: 34 additions & 0 deletions
34
src/com/cloudogu/ces/cesbuildlib/GradleInDockerBase.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package com.cloudogu.ces.cesbuildlib | ||
/** | ||
* Common tools for all GradleInDocker classes | ||
*/ | ||
abstract class GradleInDockerBase extends Gradle { | ||
|
||
/** Setting this to {@code true} allows the Gradle build to access the docker host, i.e. to start other containers.*/ | ||
boolean enableDockerHost = false | ||
|
||
Docker docker | ||
|
||
GradleInDockerBase(script) { | ||
super(script) | ||
this.docker = new Docker(script) | ||
} | ||
|
||
@Override | ||
def gradle(String args, boolean printStdOut = true) { | ||
call ({ args }, printStdOut) | ||
} | ||
|
||
abstract def call(Closure closure, boolean printStdOut); | ||
|
||
protected void inDocker(String imageId, Closure closure) { | ||
docker.image(imageId) | ||
// Mount user and set HOME, which results in the workspace being user.home. Otherwise '?' might be the user.home. | ||
.mountJenkinsUser(true) | ||
.mountDockerSocket(enableDockerHost) | ||
.inside("") { | ||
closure.call() | ||
} | ||
} | ||
|
||
} |
23 changes: 23 additions & 0 deletions
23
src/com/cloudogu/ces/cesbuildlib/GradleWrapperInDocker.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package com.cloudogu.ces.cesbuildlib | ||
|
||
/** | ||
* Run gradle using a Gradle Wrapper from the local repository within a Docker Container. | ||
* The image of the container can be used to specified a JDK. | ||
*/ | ||
class GradleWrapperInDocker extends GradleInDockerBase { | ||
/** The docker image to use, e.g. {@code adoptopenjdk/openjdk11:jdk-11.0.1.13-alpine} **/ | ||
private String imageId | ||
|
||
@SuppressWarnings("GrDeprecatedAPIUsage") // GradleWrapper will become protected constructor that is no longer deprecated | ||
GradleWrapperInDocker(script, String imageId) { | ||
super(script) | ||
this.imageId = imageId | ||
} | ||
|
||
@Override | ||
def call(Closure closure, boolean printStdOut) { | ||
inDocker(imageId) { | ||
gradlew(closure.call(), printStdOut) | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package com.cloudogu.ces.cesbuildlib | ||
|
||
class GradleMock extends Gradle { | ||
String args | ||
|
||
GradleMock(scriptMock) { | ||
super(scriptMock) | ||
} | ||
|
||
def gradle(String args, boolean printStdOut) { | ||
this.args = args | ||
return args | ||
} | ||
|
||
static Docker setupDockerMock(GradleInDockerBase gradle) { | ||
gradle.docker = DockerMock.create() | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package com.cloudogu.ces.cesbuildlib | ||
|
||
|
||
import org.junit.After | ||
import org.junit.Test | ||
|
||
import static org.junit.Assert.assertEquals | ||
|
||
class GradleTest { | ||
def scriptMock = new ScriptMock() | ||
def gradle = new GradleMock(scriptMock) | ||
|
||
@After | ||
void tearDown() throws Exception { | ||
// always reset metaClass after messing with it to prevent changes from leaking to other tests | ||
Gradle.metaClass = null | ||
} | ||
|
||
@Test | ||
void testCall() throws Exception { | ||
def result = gradle "test" | ||
assertEquals("test", result) | ||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
test/com/cloudogu/ces/cesbuildlib/GradleWrapperInDockerTest.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package com.cloudogu.ces.cesbuildlib | ||
|
||
import org.junit.Test | ||
import static org.junit.Assert.assertEquals | ||
|
||
import static org.mockito.Mockito.verify | ||
|
||
class GradleWrapperInDockerTest { | ||
def scriptMock = new ScriptMock() | ||
|
||
@Test | ||
void gradleInDocker() { | ||
def gradle = new GradleWrapperInDocker(scriptMock, 'adoptopenjdk/openjdk11:jdk-11.0.1.13-alpine') | ||
Docker docker = GradleMock.setupDockerMock(gradle) | ||
gradle 'clean install' | ||
|
||
assert scriptMock.actualShStringArgs[0].trim().contains('clean install') | ||
verify(docker).image('adoptopenjdk/openjdk11:jdk-11.0.1.13-alpine') | ||
} | ||
} |