Skip to content

Commit 6e94d79

Browse files
kimxogusmuuki88
authored andcommitted
[Docker] add dockerEnvVars support (#1137)
* add dockerEnvVars support * add sbt scripted test * fix doc * scalafmt * sbt 0.13.x compat, fix plugins type * add docs * scalafmt
1 parent 435c155 commit 6e94d79

File tree

7 files changed

+43
-4
lines changed

7 files changed

+43
-4
lines changed

src/main/scala/com/typesafe/sbt/packager/docker/DockerPlugin.scala

+12-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ object DockerPlugin extends AutoPlugin {
6161
*/
6262
val UnixSeparatorChar = '/'
6363

64-
override def requires = UniversalPlugin
64+
override def requires: Plugins = UniversalPlugin
6565

6666
override def projectConfigurations: Seq[Configuration] = Seq(Docker)
6767

@@ -71,6 +71,7 @@ object DockerPlugin extends AutoPlugin {
7171
dockerExposedUdpPorts := Seq(),
7272
dockerExposedVolumes := Seq(),
7373
dockerLabels := Map(),
74+
dockerEnvVars := Map(),
7475
dockerRepository := None,
7576
dockerUsername := None,
7677
dockerAlias := DockerAlias(
@@ -104,6 +105,7 @@ object DockerPlugin extends AutoPlugin {
104105
generalCommands ++
105106
Seq(makeWorkdir(dockerBaseDirectory)) ++ makeAdd(dockerVersion.value, dockerBaseDirectory, user, group) ++
106107
dockerLabels.value.map(makeLabel) ++
108+
dockerEnvVars.value.map(makeEnvVar) ++
107109
makeExposePorts(dockerExposedPorts.value, dockerExposedUdpPorts.value) ++
108110
makeVolumes(dockerExposedVolumes.value, user, group) ++
109111
Seq(makeUser(user), makeEntrypoint(dockerEntrypoint.value), makeCmd(dockerCmd.value))
@@ -175,6 +177,15 @@ object DockerPlugin extends AutoPlugin {
175177
Cmd("LABEL", variable + "=\"" + value.toString + "\"")
176178
}
177179

180+
/**
181+
* @param envVar
182+
* @return ENV command
183+
*/
184+
private final def makeEnvVar(envVar: (String, String)): CmdLike = {
185+
val (variable, value) = envVar
186+
Cmd("ENV", variable + "=\"" + value.toString + "\"")
187+
}
188+
178189
/**
179190
* @param dockerBaseDirectory, the installation directory
180191
*/

src/main/scala/com/typesafe/sbt/packager/docker/Keys.scala

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ trait DockerKeys {
3333
val dockerBuildOptions = SettingKey[Seq[String]]("dockerBuildOptions", "Options used for the Docker build")
3434
val dockerBuildCommand = SettingKey[Seq[String]]("dockerBuildCommand", "Command for building the Docker image")
3535
val dockerLabels = SettingKey[Map[String, String]]("dockerLabels", "Labels applied to the Docker image")
36+
val dockerEnvVars =
37+
SettingKey[Map[String, String]]("dockerEnvVars", "Environment Variables applied to the Docker image")
3638
val dockerRmiCommand =
3739
SettingKey[Seq[String]]("dockerRmiCommand", "Command for removing the Docker image from the local registry")
3840

src/main/scala/com/typesafe/sbt/packager/docker/dockerfile.scala

+3-3
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ trait CmdLike {
3636
* }}}
3737
*/
3838
case class ExecCmd(cmd: String, args: String*) extends CmdLike {
39-
def makeContent =
39+
def makeContent: String =
4040
"%s [%s]\n" format (cmd, args.map('"' + _ + '"').mkString(", "))
4141
}
4242

@@ -59,7 +59,7 @@ case class ExecCmd(cmd: String, args: String*) extends CmdLike {
5959
* }}}
6060
*/
6161
case class Cmd(cmd: String, args: String*) extends CmdLike {
62-
def makeContent = "%s %s\n" format (cmd, args.mkString(" "))
62+
def makeContent: String = "%s %s\n" format (cmd, args.mkString(" "))
6363
}
6464

6565
/**
@@ -76,7 +76,7 @@ case class Cmd(cmd: String, args: String*) extends CmdLike {
7676
* }}}
7777
*/
7878
case class CombinedCmd(cmd: String, arg: CmdLike) extends CmdLike {
79-
def makeContent = "%s %s\n" format (cmd, arg.makeContent)
79+
def makeContent: String = "%s %s\n" format (cmd, arg.makeContent)
8080
}
8181

8282
/** Represents dockerfile used by docker when constructing packages. */

src/sbt-test/docker/envVars/build.sbt

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
enablePlugins(DockerPlugin)
2+
3+
name := "simple-test"
4+
5+
version := "0.1.0"
6+
7+
dockerEnvVars := Map("FOO" -> "bar", "FOO_BAR" -> "foo bar", "NUMBER" -> "123")
8+
9+
10+
TaskKey[Unit]("checkDockerfile") := {
11+
val dockerfile = IO.read((stagingDirectory in Docker).value / "Dockerfile")
12+
13+
assert(dockerfile contains """ENV FOO="bar"""", s"does not contain foo=bar\n$dockerfile")
14+
assert(dockerfile contains """ENV FOO_BAR="foo bar"""", s"does not contain foo=bar\n$dockerfile")
15+
assert(dockerfile contains """ENV NUMBER="123"""", s"does not contain foo=bar\n$dockerfile")
16+
17+
streams.value.log.success("Successfully tested Dockerfile")
18+
()
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % sys.props("project.version"))

src/sbt-test/docker/envVars/test

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Stage the distribution and ensure files show up.
2+
> docker:stage
3+
> checkDockerfile

src/sphinx/formats/docker.rst

+3
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ Environment Settings
110110
``dockerLabels``
111111
A map of labels that will be applied to the Docker image.
112112

113+
``dockerEnvVars``
114+
A map of environment variables that will be applied to the Docker image.
115+
113116
``dockerEntrypoint``
114117
Overrides the default entrypoint for docker-specific service discovery tasks before running the application.
115118
Defaults to the bash executable script, available at ``bin/<script name>`` in the current ``WORKDIR`` of ``/opt/docker``.

0 commit comments

Comments
 (0)