-
-
Save nx-milos/4c53c22b5ccdf7591bbf9f41dc3c52c4 to your computer and use it in GitHub Desktop.
example of sidecar service in jenkins declarative pipeline
This file contains hidden or 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
| pipeline { | |
| agent { label "docker" } | |
| stages { | |
| stage("test sidecar") { | |
| steps{ | |
| script { | |
| withDockerNetwork { n -> | |
| // we could use Image.withRun() instead of Image.run(), | |
| // and get rid of try/catch/finally blocks | |
| // It's prefferable way, but it doesn't remove volumes after containers | |
| def c = docker.image("mongo:3.4").run("--rm --network=${n} --net-alias=mongo", "mongod --storageEngine ephemeralForTest") | |
| try { | |
| docker.image("python:3.7-slim").inside("--network=${n}") { | |
| sh "python --version" | |
| sh "false" | |
| } | |
| } finally { | |
| try { | |
| c.stop() | |
| } catch (Exception) { | |
| // just ignore the error. | |
| // it has thrown because of --rm flag | |
| // which used to remove volumes after container stop | |
| // container.stop() executes `docker stop container && docker rm container`, | |
| // and thinks that error happens on rm command, | |
| // and error actually happens, but it's OK because container already removed. | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| // from https://issues.jenkins.io/browse/JENKINS-49567?focusedCommentId=363468&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-363468 | |
| def withDockerNetwork(Closure inner) { | |
| try { | |
| networkId = UUID.randomUUID().toString() | |
| sh "docker network create ${networkId}" | |
| inner.call(networkId) | |
| } finally { | |
| sh "docker network rm ${networkId}" | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment