@@ -6,8 +6,6 @@ import com.eficode.devstack.container.impl.JsmContainer
66import com.eficode.devstack.deployment.Deployment
77import com.eficode.devstack.util.DirectorySyncer
88import com.eficode.devstack.util.DockerClientDS
9- import de.gesellix.docker.client.DockerClient
10- import de.gesellix.docker.client.EngineResponseContent
119import de.gesellix.docker.remote.api.Volume
1210import org.slf4j.Logger
1311import org.slf4j.LoggerFactory
@@ -27,7 +25,9 @@ class JsmDevDeployment implements Deployment {
2725 Volume srcCodeVolume
2826
2927 AllureContainer allureContainer
28+ Volume jiraReportVolume
3029 Volume allureReportVolume
30+ DirectorySyncer reportSyncer
3131
3232 DockerClientDS dockerClient
3333
@@ -42,17 +42,27 @@ class JsmDevDeployment implements Deployment {
4242 allureContainer. containerName = componentsPrefix + " -reporter"
4343 dockerClient = allureContainer. dockerClient
4444
45- allureReportVolume = getOrCreateVolume( componentsPrefix+ " -reports" )
45+
46+ allureReportVolume = dockerClient. getOrCreateVolume(componentsPrefix + " -allureReports" )
47+ jiraReportVolume = dockerClient. getOrCreateVolume(componentsPrefix + " -jiraReports" )
4648 allureContainer. prepareCustomEnvVar([" CHECK_RESULTS_EVERY_SECONDS=3" , " KEEP_HISTORY=1" , " KEEP_HISTORY_LATEST=30" ])
47- allureContainer. prepareVolumeMount (allureReportVolume. name, " /app/allure-results " , false )
49+ allureContainer. setResultsVolume (allureReportVolume. name)
4850
4951
50- srcCodeVolume = getOrCreateVolume(componentsPrefix + " -code" )
52+ srcCodeVolume = dockerClient. getOrCreateVolume(componentsPrefix + " -code" )
53+ srcSyncer = DirectorySyncer . getDuplicateContainer(dockerClient, " SrcSyncer" )
5154 this . srcCodePaths = srcCodePaths
5255
56+ if (srcSyncer?. created) {
57+ log. warn(" Old SrcSyncer container exists, removing it before proceeding" )
58+ srcSyncer. stopAndRemoveContainer()
59+ srcSyncer = null
60+ }
61+
62+
5363 subDeployments. add(new JsmH2Deployment (jiraBaseUrl, dockerHost, dockerCertPath))
5464 jsmDeployment. jsmContainer. prepareVolumeMount(srcCodeVolume. name, " /var/atlassian/application-data/jira/scripts/" , false )
55- jsmDeployment. jsmContainer. prepareVolumeMount(allureReportVolume . name, " /var/atlassian/application-data/jira/allure-results/" , false )
65+ jsmDeployment. jsmContainer. prepareVolumeMount(jiraReportVolume . name, " /var/atlassian/application-data/jira/allure-results/" , false )
5666
5767
5868 }
@@ -68,40 +78,65 @@ class JsmDevDeployment implements Deployment {
6878
6979 @Override
7080 ArrayList<Container > getContainers () {
71- return [srcSyncer, allureContainer, jsmContainer]
81+ return [srcSyncer, allureContainer, jsmContainer, reportSyncer ]
7282 }
7383
7484 @Override
7585 void setContainers (ArrayList<Container > containers ) {
7686 throw new InputMismatchException (" Not implemented" )
7787 }
7888
79- Volume getOrCreateVolume (String volumeName ) {
80- Volume volume = dockerClient. getVolumesWithName(volumeName). find { true }
81-
82- if (volume) {
83- log. debug(" \t Found existing volume:" + volume. name)
84- } else {
85- log. debug(" \t Creating new volume $volumeName " )
86- EngineResponseContent<Volume > volumeResponse = dockerClient. createVolume(volumeName)
87- volume = volumeResponse?. content
88- assert volume: " Error creating volume $volumeName , " + volumeResponse?. getStatus()?. text
89- log. debug(" \t\t Created volume:" + volume. name)
89+ @Override
90+ boolean stopAndRemoveDeployment () {
91+
92+ Volume jsmSnapshotVolume
93+
94+ try {
95+ jsmSnapshotVolume = jsmContainer. getSnapshotVolume()
96+ }catch (ignored){}
97+
98+
99+ Boolean success = Deployment . super . stopAndRemoveDeployment()
100+ if (jiraReportVolume) {
101+ dockerClient. rmVolume(jiraReportVolume. name)
102+ }
103+ if (allureReportVolume) {
104+ dockerClient. rmVolume(allureReportVolume. name)
90105 }
91106
92- return volume
107+ if (srcCodeVolume) {
108+ dockerClient. rmVolume(srcCodeVolume. name)
109+ }
110+
111+ if (jsmSnapshotVolume) {
112+ dockerClient. rmVolume(jsmSnapshotVolume. name)
113+ }
114+
115+ return success
116+
93117 }
94118
95119 @Override
96120 boolean setupDeployment () {
97121
98122
99123 srcSyncer = DirectorySyncer . createSyncToVolume(srcCodePaths, srcCodeVolume. name, " SrcSyncer" , " -avh --chown=2001:2001" )
124+
125+
126+ reportSyncer = DirectorySyncer . syncBetweenVolumesAndUsers(jiraReportVolume. name, allureReportVolume. name, " 1000:1000" , " ReportSyncer" )
127+
128+
100129 allureContainer. created ?: allureContainer. createContainer()
101130 allureContainer. startContainer()
102131
103- jsmDeployment. setupDeployment(true , false )
104132
133+ jsmDeployment. setupDeployment(true , true )
134+ // Change owner of the mounted volume
135+ jsmContainer. runBashCommandInContainer(" chown -R jira:jira /var/atlassian/application-data/jira/allure-results" , 10 , " root" )
136+
137+ if (jsmDeployment. jiraRest. scriptRunnerIsInstalled()) {
138+ jsmDeployment. jiraRest. deploySpockEndpoint([' com.riadalabs.jira.plugins.insight' ])
139+ }
105140
106141 }
107142
0 commit comments