summaryrefslogtreecommitdiff
path: root/crashboxd/src/main/scala/io/crashbox/ci/DockerExecutor.scala
diff options
context:
space:
mode:
authorJakob Odersky <jakob@odersky.com>2017-04-09 16:24:48 -0700
committerJakob Odersky <jakob@odersky.com>2017-04-09 16:24:48 -0700
commit382152098459a5783e3a794161ed2da2a321af37 (patch)
tree40d2f57afcfbeb168d9fb00b2e14b1b6ffab3069 /crashboxd/src/main/scala/io/crashbox/ci/DockerExecutor.scala
parentbea923442ceb7cfaf855a3edb2e685ee843f3943 (diff)
downloadcrashbox-ci-382152098459a5783e3a794161ed2da2a321af37.tar.gz
crashbox-ci-382152098459a5783e3a794161ed2da2a321af37.tar.bz2
crashbox-ci-382152098459a5783e3a794161ed2da2a321af37.zip
less leaky
Diffstat (limited to 'crashboxd/src/main/scala/io/crashbox/ci/DockerExecutor.scala')
-rw-r--r--crashboxd/src/main/scala/io/crashbox/ci/DockerExecutor.scala36
1 files changed, 13 insertions, 23 deletions
diff --git a/crashboxd/src/main/scala/io/crashbox/ci/DockerExecutor.scala b/crashboxd/src/main/scala/io/crashbox/ci/DockerExecutor.scala
index 5abf7ae..1646777 100644
--- a/crashboxd/src/main/scala/io/crashbox/ci/DockerExecutor.scala
+++ b/crashboxd/src/main/scala/io/crashbox/ci/DockerExecutor.scala
@@ -1,6 +1,7 @@
package io.crashbox.ci
import java.io.{File, OutputStream}
+import java.util.UUID
import scala.collection.JavaConverters._
import scala.concurrent.Future
@@ -12,6 +13,7 @@ import com.spotify.docker.client.DockerClient.{
AttachParameter,
ListContainersParam
}
+import scala.util.Random
import com.spotify.docker.client.LogStream
import com.spotify.docker.client.exceptions.ContainerNotFoundException
import com.spotify.docker.client.messages.{ContainerConfig, HostConfig}
@@ -40,22 +42,7 @@ class DockerExecutor(uri: String = "unix:///run/docker.sock")(
c
}
- /*
- def makeImage() = {
- val returnedImageId = dockerClient.build(
- Paths.get("docker directory"), "test", new ProgressHandler() {
- override def progress(message: ProgressMessage) = {
- val imageId = message.buildImageId()
- message.buildImageId()
- if (imageId != null) {
- //imageIdFromMessage.set(imageId);
- }
- }
- })
- //dockerClient.build
- }*/
-
- def label = "build"
+ private val label = "crashbox-executor" -> UUID.randomUUID().toString
def start(
image: String,
@@ -72,7 +59,7 @@ class DockerExecutor(uri: String = "unix:///run/docker.sock")(
val hostConfig = HostConfig.builder().binds(volume).build()
val containerConfig = ContainerConfig
.builder()
- .labels(Map("crashbox" -> label).asJava)
+ .labels(Map(label).asJava)
.hostConfig(hostConfig)
.tty(true) // combine stdout and stderr into stdout
.image(image)
@@ -126,16 +113,19 @@ class DockerExecutor(uri: String = "unix:///run/docker.sock")(
}
}
- def reapDeadBuilds(): Unit = {
+ def clean(): Boolean = {
val stale = dockerClient
.listContainers(
- ListContainersParam.withLabel("crashbox"),
- ListContainersParam.withStatusExited()
+ ListContainersParam.withLabel(label._1, label._2)
)
.asScala
- stale.foreach { container =>
- log.warning(s"Removing stale container ${container.id}")
- dockerClient.removeContainer(container.id)
+ stale.isEmpty || {
+ stale.foreach { container =>
+ log.warning(s"Removing stale container ${container.id}")
+ dockerClient.killContainer(container.id)
+ dockerClient.removeContainer(container.id)
+ }
+ false
}
}