Skip to content

Commit 3895d98

Browse files
committed
wip
1 parent 626f4a6 commit 3895d98

File tree

4 files changed

+61
-20
lines changed

4 files changed

+61
-20
lines changed

pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.eficode</groupId>
88
<artifactId>devstack</artifactId>
9-
<version>2.3.12-SNAPSHOT</version>
9+
<version>2.3.13-SNAPSHOT</version>
1010
<packaging>jar</packaging>
1111

1212
<name>DevStack</name>
@@ -228,4 +228,4 @@
228228
</plugins>
229229
</build>
230230

231-
</project>
231+
</project>

src/main/groovy/com/eficode/devstack/container/Container.groovy

+1-1
Original file line numberDiff line numberDiff line change
@@ -974,4 +974,4 @@ trait Container {
974974
return callBack.output
975975
}
976976

977-
}
977+
}

src/main/groovy/com/eficode/devstack/container/impl/JsmContainer.groovy

+16-16
Original file line numberDiff line numberDiff line change
@@ -60,25 +60,25 @@ class JsmContainer implements Container {
6060

6161
@Override
6262
ContainerCreateRequest setupContainerCreateRequest() {
63-
64-
String image = containerImage + ":" + containerImageTag
65-
6663
log.debug("Setting up container create request for JSM container")
67-
if (dockerClient.engineArch != "x86_64") {
68-
log.debug("\tDocker engine is not x86, building custom JSM docker image")
69-
70-
ImageBuilder imageBuilder = new ImageBuilder(dockerClient.host, dockerClient.certPath)
71-
String jsmVersion = containerImageTag
72-
if (jsmVersion == "latest") {
73-
log.debug("\tCurrent image tag is set to \"latest\", need to resolve latest version number from Atlassian Marketplace in order to build custom image")
74-
jsmVersion = getLatestJsmVersion()
75-
}
76-
log.debug("\tStarting building of Docker Image for JSM verion $jsmVersion")
77-
ImageSummary newImage = imageBuilder.buildJsm(jsmVersion)
78-
log.debug("\tFinished building custom image:" + newImage.repoTags.join(","))
7964

80-
image = newImage.repoTags.first()
65+
new ImageBuilder(dockerClient.host, dockerClient.certPath)
66+
String jsmVersion = containerImageTag
67+
if (jsmVersion == "latest") {
68+
log.debug("\tCurrent image tag is set to \"latest\", need to resolve latest version number from Atlassian Marketplace in order to build custom image")
69+
jsmVersion = getLatestJsmVersion()
8170
}
71+
log.debug("\tStarting building of Docker Image for JSM verion $jsmVersion")
72+
ImageSummary jsmImage = new ImageBuilder(dockerClient.host, dockerClient.certPath).buildJsm(jsmVersion)
73+
log.debug("\tFinished building custom image:" + jsmImage.repoTags.join(","))
74+
75+
sleep(120 * 1000)
76+
77+
log.debug("\tStarting building of Docker Image for faketime JSM verion $jsmVersion")
78+
ImageSummary faketimeJsmImage = new ImageBuilder(dockerClient.host, dockerClient.certPath).buildFaketimeJsm(jsmVersion)
79+
log.debug("\tFinished building custom image:" + faketimeJsmImage.repoTags.join(","))
80+
81+
String image = faketimeJsmImage.repoTags.first()
8282

8383
ContainerCreateRequest containerCreateRequest = new ContainerCreateRequest().tap { c ->
8484

src/main/groovy/com/eficode/devstack/util/ImageBuilder.groovy

+42-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ class ImageBuilder extends DoodContainer {
4848
* @return
4949
*/
5050
ImageSummary buildJsm(String jsmVersion, boolean force = false){
51-
5251
String imageName = "atlassian/jira-servicemanagement"
5352
String artifactName = "atlassian-servicedesk"
5453
String archType = dockerClient.engineArch
@@ -76,7 +75,49 @@ class ImageBuilder extends DoodContainer {
7675
ImageSummary newImage = images.find {it.repoTags == [imageTag]}
7776
log.debug("\tFinished building image:" + imageTag + ", ID:" + newImage.id[7..17])
7877
return newImage
78+
}
7979

80+
ImageSummary buildFaketimeJsm(String jsmVersion, boolean force = false){
81+
String imageName = "atlassian/jira-servicemanagement"
82+
String artifactName = "atlassian-servicedesk"
83+
String archType = dockerClient.engineArch
84+
String imageTag = "$imageName:$jsmVersion-$archType"
85+
String faketimeDockerFilePath = "/faketimebuild/Dockerfile"
86+
String faketimeImageTag = "$imageName-faketime:$jsmVersion-$archType"
87+
containerName = faketimeImageTag.replaceAll(/[^a-zA-Z0-9_.-]/, "-").take(128-"-imageBuilder".length())
88+
containerName += "-imageBuilder"
89+
90+
log.info("my name is now $containerName")
91+
92+
//Check first if an image with the expected tag already exists
93+
if (!force) {
94+
ArrayList<ImageSummary> existingImages = dockerClient.images().content
95+
ImageSummary existingImage = existingImages.find {it.repoTags == [faketimeImageTag]}
96+
if (existingImage) {
97+
return existingImage
98+
}
99+
}
100+
101+
String faketimeDockerFile = """
102+
FROM $imageTag
103+
WORKDIR /
104+
RUN apt-get update && apt-get install -y wget g++ make
105+
RUN wget https://github.com/odnoklassniki/jvmti-tools/raw/master/faketime/faketime.cpp
106+
RUN g++ -O2 -fPIC -shared -I \$JAVA_HOME/include -I \$JAVA_HOME/include/linux -olibfaketime.so faketime.cpp
107+
108+
ENV JVM_SUPPORT_RECOMMENDED_ARGS="-agentpath:/libfaketime.so=+2592000000"
109+
"""
110+
111+
putBuilderCommand("mkdir -p /faketimebuild", "status:0")
112+
putBuilderCommand("cat > $faketimeDockerFilePath <<- 'EOF'\n" + faketimeDockerFile + "\nEOF", "") // TODO: 2nd argument?
113+
putBuilderCommand("cd /faketimebuild && docker build --tag $faketimeImageTag --build-arg JIRA_VERSION=$jsmVersion --build-arg ARTEFACT_NAME=$artifactName . && echo status:\$?", "status:0")
114+
putBuilderCommand("pkill tail", "")
115+
116+
assert build() : "Error building the image."
117+
118+
ArrayList<ImageSummary> images = dockerClient.images().content
119+
ImageSummary newImage = images.find {it.repoTags == [faketimeImageTag]}
120+
return newImage
80121
}
81122

82123

0 commit comments

Comments
 (0)