File tree Expand file tree Collapse file tree 4 files changed +38
-0
lines changed
main/groovy/com/avast/gradle/dockercompose
test/groovy/com/avast/gradle/dockercompose Expand file tree Collapse file tree 4 files changed +38
-0
lines changed Original file line number Diff line number Diff line change @@ -42,6 +42,7 @@ dockerCompose {
4242 // removeContainers = false
4343 // removeImages = "None" // Other accepted values are: "All" and "Local"
4444 // removeVolumes = false
45+ // environment.put 'BACKEND_ADDRESS', '192.168.1.100' // Pass environment variable to 'docker-compose' for substitution in compose file
4546}
4647
4748test.doFirst {
Original file line number Diff line number Diff line change @@ -26,6 +26,8 @@ class ComposeExtension {
2626 RemoveImages removeImages = RemoveImages.None
2727 boolean removeVolumes = true
2828
29+ Map<String , Object > environment = new HashMap<String , Object > (System . getenv());
30+
2931 ComposeExtension (Project project , ComposeUp upTask , ComposeDown downTask ) {
3032 this . project = project
3133 this . downTask = downTask
Original file line number Diff line number Diff line change @@ -31,10 +31,12 @@ class ComposeUp extends DefaultTask {
3131 void up () {
3232 if (extension. buildBeforeUp) {
3333 project. exec { ExecSpec e ->
34+ e. environment = extension. environment
3435 e. commandLine extension. composeCommand(' build' )
3536 }
3637 }
3738 project. exec { ExecSpec e ->
39+ e. environment = extension. environment
3840 e. commandLine extension. composeCommand(' up' , ' -d' )
3941 }
4042 try {
Original file line number Diff line number Diff line change @@ -275,4 +275,37 @@ class DockerComposePluginTest extends Specification {
275275 projectDir. deleteOnExit()
276276 }
277277 }
278+
279+ def " docker-compose substitutes environment variables" () {
280+ def projectDir = new TmpDirTemporaryFileProvider (). createTemporaryDirectory(" gradle" , " projectDir" )
281+ new File (projectDir, ' docker-compose.yml' ) << '''
282+ web:
283+ image: nginx
284+ ports:
285+ - $MY_WEB_PORT
286+ '''
287+ def project = ProjectBuilder . builder(). withProjectDir(projectDir). build()
288+ project. plugins. apply ' docker-compose'
289+ def extension = (ComposeExtension ) project. extensions. findByName(' dockerCompose' )
290+ project. tasks. create(' integrationTest' ). doLast {
291+ ServiceInfo webInfo = project. dockerCompose. servicesInfos. web
292+ assert webInfo. ports. containsKey(80 )
293+ }
294+ when :
295+ extension. useComposeFiles = [' docker-compose.yml' ]
296+ extension. environment. put ' MY_WEB_PORT' , 80
297+ extension. waitForTcpPorts = false // checked in assert
298+ project. tasks. composeUp. up()
299+ project. tasks. integrationTest. execute()
300+ then :
301+ noExceptionThrown()
302+ cleanup :
303+ project. tasks. composeDown. down()
304+ try {
305+ projectDir. delete()
306+ } catch (ignored) {
307+ projectDir. deleteOnExit()
308+ }
309+ }
310+
278311}
You can’t perform that action at this time.
0 commit comments