Skip to content

Commit 2813837

Browse files
authored
Merge pull request #45 from eficode/2.3.24
2.3.24
2 parents 9690768 + 3fa7c05 commit 2813837

File tree

4 files changed

+87
-35
lines changed

4 files changed

+87
-35
lines changed

.idea/jarRepositories.xml

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pom.xml

+6-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.23</version>
9+
<version>2.3.24</version>
1010
<packaging>jar</packaging>
1111

1212
<name>DevStack</name>
@@ -23,7 +23,7 @@
2323
<spock-core.version>2.3-groovy-${groovy.major.version}</spock-core.version>
2424
<jiraShortcuts.version>2.0.3-SNAPSHOT-groovy-3.0</jiraShortcuts.version>
2525
<bitbucketinstancemanager.version>0.0.3-SNAPSHOT-groovy-3.0</bitbucketinstancemanager.version>
26-
<jirainstancemanager.version>2.1.9</jirainstancemanager.version>
26+
<jirainstancemanager.version>2.1.10</jirainstancemanager.version>
2727
</properties>
2828

2929

@@ -135,6 +135,10 @@
135135
<id>eficode-github-jiraManagerRest</id>
136136
<url>https://github.com/eficode/JiraInstanceManagerRest/raw/packages/repository/</url>
137137
</repository>
138+
<repository>
139+
<id>eficode-github-remoteSpock</id>
140+
<url>https://github.com/eficode/remoteSpock/raw/packages/repository/</url>
141+
</repository>
138142
<repository>
139143
<id>eficode-github-BitbucketInstanceManagerRest</id>
140144
<url>https://github.com/eficode/BitbucketInstanceManagerRest/raw/packages/repository/</url>

src/main/groovy/com/eficode/devstack/deployment/impl/JsmDevDeployment.groovy

+38-23
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ class JsmDevDeployment implements Deployment {
2727
Volume allureReportVolume
2828
DirectorySyncer reportSyncer
2929

30+
private Builder builder
31+
3032
DockerClientDS dockerClient
3133

3234
//Used when naming various Docker components
@@ -35,36 +37,23 @@ class JsmDevDeployment implements Deployment {
3537
JsmDevDeployment(String jiraBaseUrl, String dockerHost, String dockerCertPath, ArrayList<String> srcCodePaths) {
3638

3739
componentsPrefix = AllureContainer.extractDomainFromUrl(jiraBaseUrl)
40+
subDeployments.add(new JsmH2Deployment(jiraBaseUrl, dockerHost, dockerCertPath))
41+
3842

3943
allureContainer = new AllureContainer(dockerHost, dockerCertPath)
4044
allureContainer.containerName = componentsPrefix + "-reporter"
4145
dockerClient = allureContainer.dockerClient
4246

43-
44-
allureReportVolume = dockerClient.getOrCreateVolume(componentsPrefix + "-allureReports")
45-
jiraReportVolume = dockerClient.getOrCreateVolume(componentsPrefix + "-jiraReports")
46-
allureContainer.prepareCustomEnvVar(["CHECK_RESULTS_EVERY_SECONDS=3", "KEEP_HISTORY=1", "KEEP_HISTORY_LATEST=30"])
47-
allureContainer.setResultsVolume(allureReportVolume.name)
48-
49-
50-
srcCodeVolume = dockerClient.getOrCreateVolume(componentsPrefix + "-code")
5147
srcSyncer = DirectorySyncer.getDuplicateContainer(dockerClient, "SrcSyncer")
52-
this.srcCodePaths = srcCodePaths
48+
reportSyncer = DirectorySyncer.getDuplicateContainer(dockerClient, "ReportSyncer")
5349

54-
if (srcSyncer?.created) {
55-
log.warn("Old SrcSyncer container exists, removing it before proceeding")
56-
srcSyncer.stopAndRemoveContainer()
57-
srcSyncer = null
58-
}
5950

6051

61-
subDeployments.add(new JsmH2Deployment(jiraBaseUrl, dockerHost, dockerCertPath))
62-
jsmDeployment.jsmContainer.prepareVolumeMount(srcCodeVolume.name, "/var/atlassian/application-data/jira/scripts/", false)
63-
jsmDeployment.jsmContainer.prepareVolumeMount(jiraReportVolume.name, "/var/atlassian/application-data/jira/allure-results/", false)
64-
52+
this.srcCodePaths = srcCodePaths
6553

6654
}
6755

56+
6857
JsmH2Deployment getJsmDeployment() {
6958
return subDeployments.find { it instanceof JsmH2Deployment } as JsmH2Deployment
7059
}
@@ -91,7 +80,8 @@ class JsmDevDeployment implements Deployment {
9180

9281
try {
9382
jsmSnapshotVolume = jsmContainer.getSnapshotVolume()
94-
}catch (ignored){}
83+
} catch (ignored) {
84+
}
9585

9686

9787
Boolean success = Deployment.super.stopAndRemoveDeployment()
@@ -118,22 +108,35 @@ class JsmDevDeployment implements Deployment {
118108
boolean setupDeployment() {
119109

120110

121-
srcSyncer = DirectorySyncer.createSyncToVolume(srcCodePaths, srcCodeVolume.name, "SrcSyncer", "-avh --chown=2001:2001")
122111

112+
srcCodeVolume = dockerClient.getOrCreateVolume(componentsPrefix + "-code")
113+
allureReportVolume = dockerClient.getOrCreateVolume(componentsPrefix + "-allureReports")
114+
jiraReportVolume = dockerClient.getOrCreateVolume(componentsPrefix + "-jiraReports")
123115

116+
117+
srcSyncer = DirectorySyncer.createSyncToVolume(srcCodePaths, srcCodeVolume.name, "SrcSyncer", "-avh --chown=2001:2001")
124118
reportSyncer = DirectorySyncer.syncBetweenVolumesAndUsers(jiraReportVolume.name, allureReportVolume.name, "1000:1000", "ReportSyncer")
125119

126120

121+
allureContainer.prepareCustomEnvVar(["CHECK_RESULTS_EVERY_SECONDS=3", "KEEP_HISTORY=1", "KEEP_HISTORY_LATEST=30"])
122+
allureContainer.setResultsVolume(allureReportVolume.name)
123+
124+
127125
allureContainer.created ?: allureContainer.createContainer()
128126
allureContainer.startContainer()
129127

128+
if (!jsmDeployment.jsmContainer.created) {
129+
jsmDeployment.jsmContainer.prepareVolumeMount(srcCodeVolume.name, "/var/atlassian/application-data/jira/scripts/", false)
130+
jsmDeployment.jsmContainer.prepareVolumeMount(jiraReportVolume.name, "/var/atlassian/application-data/jira/allure-results/", false)
130131

131-
jsmDeployment.setupDeployment(true, true)
132+
}
133+
134+
jsmDeployment.setupDeployment(builder.useSnapshotIfAvailable, builder.snapshotAfterCreation)
132135
//Change owner of the mounted volume
133136
jsmContainer.runBashCommandInContainer("chown -R jira:jira /var/atlassian/application-data/jira/allure-results", 10, "root")
134137

135138
if (jsmDeployment.jiraRest.scriptRunnerIsInstalled()) {
136-
jsmDeployment.jiraRest.deploySpockEndpoint(['com.riadalabs.jira.plugins.insight' ])
139+
jsmDeployment.jiraRest.deploySpockEndpoint(['com.riadalabs.jira.plugins.insight'])
137140
}
138141

139142
}
@@ -145,6 +148,8 @@ class JsmDevDeployment implements Deployment {
145148
private String jsmVersion = "latest"
146149
private String jsmJvmDebugPort = "5005"
147150
private Boolean enableJsmDooD = false
151+
private Boolean useSnapshotIfAvailable = false
152+
private Boolean snapshotAfterCreation = false
148153

149154
private Map<String, String> appsToInstall = [:]
150155

@@ -194,6 +199,16 @@ class JsmDevDeployment implements Deployment {
194199
return this
195200
}
196201

202+
Builder useSnapshotIfAvailable() {
203+
this.useSnapshotIfAvailable = true
204+
return this
205+
}
206+
207+
Builder snapshotAfterCreation() {
208+
this.snapshotAfterCreation = true
209+
return this
210+
}
211+
197212

198213
JsmDevDeployment build() {
199214

@@ -207,7 +222,7 @@ class JsmDevDeployment implements Deployment {
207222
devDeployment.jsmDeployment.jsmContainer.prepareBindMount("/var/run/docker.sock", "/var/run/docker.sock", false)
208223
}
209224
devDeployment.jsmDeployment.appsToInstall = this.appsToInstall
210-
225+
devDeployment.builder = this
211226

212227
return devDeployment
213228

src/test/groovy/com/eficode/devstack/deployment/impl/JsmDevDeploymentSpec.groovy

+38-10
Original file line numberDiff line numberDiff line change
@@ -85,30 +85,45 @@ class JsmDevDeploymentSpec extends DevStackSpec {
8585
JiraInstanceManagerRest jim = new JiraInstanceManagerRest(baseUrl)
8686

8787

88-
when:
88+
when: "When seting up the builder and running stopAndRemove"
8989
JsmDevDeployment jsmDevDep = new JsmDevDeployment.Builder(baseUrl, jsmLicenseFile.text, [localSrcDir.canonicalPath])
9090
.setJsmJvmDebugPort("5005")
9191
.setJsmVersion("latest")
9292
.enableJsmDood()
9393
.addAppToInstall(MarketplaceApp.getScriptRunnerVersion().downloadUrl, srLicenseFile.text)
94+
.snapshotAfterCreation()
95+
.useSnapshotIfAvailable()
9496
.build()
9597

9698

99+
jsmDevDep.stopAndRemoveDeployment()
100+
101+
then: "None of the parts should exist"
102+
!jsmDevDep.jsmContainer?.created
103+
!jsmDevDep.allureContainer?.created
104+
!jsmDevDep.reportSyncer?.created
105+
!jsmDevDep.srcSyncer?.created
106+
!jsmDevDep.allureReportVolume?.usageData?.propertySize
107+
!jsmDevDep.srcCodeVolume?.usageData?.propertySize
97108

109+
110+
when:
111+
Long initialSetupDuration = System.currentTimeMillis()
98112
jsmDevDep.setupDeployment()
113+
initialSetupDuration = System.currentTimeMillis() - initialSetupDuration
99114
ArrayList<ContainerSummary> containersAfter = getContainers()
100115

101116

102117
then:
103-
containersAfter.find {it.names.toString().contains("spockdev.localhost")}
104-
containersAfter.find {it.names.toString().contains("spockdev.localhost-reporter")}
105-
containersAfter.find {it.names.toString().contains("ReportSyncer")}
106-
containersAfter.find {it.names.toString().contains("SrcSyncer")}
118+
containersAfter.find { it.names.toString().contains("spockdev.localhost") }
119+
containersAfter.find { it.names.toString().contains("spockdev.localhost-reporter") }
120+
containersAfter.find { it.names.toString().contains("ReportSyncer") }
121+
containersAfter.find { it.names.toString().contains("SrcSyncer") }
107122

108123

109124
when: "Creating a file in the local synced dir"
110125

111-
File localTestFile = new File(localSrcDir, "com/eficode/atlassian/jira/jiraLocalScripts/JiraLocalSpockTest.groovy")
126+
File localTestFile = new File(localSrcDir, "com/eficode/atlassian/jira/jiraLocalScripts/JiraLocalSpockTest.groovy")
112127
localTestFile.createParentDirectories()
113128
localTestFile.text = getSuccessfulSpockBody()
114129
sleep(2000)
@@ -119,22 +134,35 @@ class JsmDevDeploymentSpec extends DevStackSpec {
119134
expect:
120135
jsmDevDep.jsmContainer.appAppUploadEnabled
121136
jsmDevDep.jsmContainer.enableJvmDebug() == null
122-
assert jim.isSpockEndpointDeployed(true) : "Spock endpoint was not deployed"
137+
assert jim.isSpockEndpointDeployed(true): "Spock endpoint was not deployed"
123138

124-
when:"Running spocktest"
139+
when: "Running spocktest"
125140
jim.runSpockTest("com.eficode.atlassian.jira.jiraLocalScripts.JiraLocalSpockTest", "", SpockOutputType.AllureReport, "allure-results/")
126141
sleep(2000)
127142
then:
128143
jsmDevDep.allureContainer.runBashCommandInContainer("ls -l /app/allure-results/")
129144
assert jsmDevDep.jsmContainer.runBashCommandInContainer("ls allure-results").first().split("\n").every { reportName ->
130145
jsmDevDep.allureContainer.runBashCommandInContainer("ls /app/allure-results/$reportName && echo Status: \$?").toString().contains("Status: 0")
131-
} : "All Reports in JIRA container haven't been synced to Allure container"
146+
}: "All Reports in JIRA container haven't been synced to Allure container"
132147

133148

149+
when:"When triggering another setup of the same deployment"
150+
String jsmCreatedTimestamp = jsmDevDep.jsmContainer.inspectContainer().created
151+
String reportSyncerCreatedTimestamp = jsmDevDep.reportSyncer.inspectContainer().created
152+
String srcSyncerCreatedTimestamp = jsmDevDep.srcSyncer.inspectContainer().created
153+
Long snapshotSetupDuration = System.currentTimeMillis()
154+
jsmDevDep.setupDeployment()
155+
snapshotSetupDuration = System.currentTimeMillis() - snapshotSetupDuration
156+
157+
then: "Snapshot should be restored and containers remain the same"
158+
jsmCreatedTimestamp == jsmDevDep.jsmContainer.inspectContainer().created
159+
reportSyncerCreatedTimestamp == jsmDevDep.reportSyncer.inspectContainer().created
160+
srcSyncerCreatedTimestamp == jsmDevDep.srcSyncer.inspectContainer().created
161+
(snapshotSetupDuration * 2) < initialSetupDuration
162+
134163
cleanup:
135164
jsmDevDep.stopAndRemoveDeployment()
136165

137166

138-
139167
}
140168
}

0 commit comments

Comments
 (0)