From 24f7bbf4e28185f2421e08087e3f7615c7ba551d Mon Sep 17 00:00:00 2001 From: Nathan LaFreniere Date: Wed, 23 Dec 2015 16:40:30 -0800 Subject: [PATCH] add support for build-args --- DOCS.md | 14 ++++++++++++++ main.go | 41 +++++++++++++++++++++++------------------ 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/DOCS.md b/DOCS.md index 912d9bb..94f5aa0 100644 --- a/DOCS.md +++ b/DOCS.md @@ -16,6 +16,7 @@ The following parameters are used to configure this plugin: * `destination` - absolute / relative destination path * `tag` - cherry-pick tags to save (optional) * `load` - restore image layers from the specified tar file +* `build_args` - [build arguments](https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables-build-arg) to pass to `docker build` The following is a sample Docker configuration in your .drone.yml file: @@ -59,6 +60,19 @@ publish: ``` Note that in the above example we quote the version numbers. If the yaml parser interprets the value as a number it will cause a parsing error. + +It's also possible to pass build arguments to docker: + +```yaml +publish: + docker: + username: kevinbacon + password: pa55word + email: kevin.bacon@mail.com + repo: foo/bar + build_args: + - HTTP_PROXY=http://yourproxy.com +``` ## Layer Caching diff --git a/main.go b/main.go index d69c3d8..32fea19 100644 --- a/main.go +++ b/main.go @@ -20,23 +20,24 @@ type Save struct { } type Docker struct { - Storage string `json:"storage_driver"` - Registry string `json:"registry"` - Mirror string `json:"mirror"` - Insecure bool `json:"insecure"` - Username string `json:"username"` - Password string `json:"password"` - Email string `json:"email"` - Auth string `json:"auth"` - Repo string `json:"repo"` - ForceTag bool `json:"force_tag"` - Tag StrSlice `json:"tag"` - File string `json:"file"` - Context string `json:"context"` - Bip string `json:"bip"` - Dns []string `json:"dns"` - Load string `json:"load"` - Save Save `json:"save"` + Storage string `json:"storage_driver"` + Registry string `json:"registry"` + Mirror string `json:"mirror"` + Insecure bool `json:"insecure"` + Username string `json:"username"` + Password string `json:"password"` + Email string `json:"email"` + Auth string `json:"auth"` + Repo string `json:"repo"` + ForceTag bool `json:"force_tag"` + Tag StrSlice `json:"tag"` + File string `json:"file"` + Context string `json:"context"` + Bip string `json:"bip"` + Dns []string `json:"dns"` + Load string `json:"load"` + Save Save `json:"save"` + BuildArgs []string `json:"build_args"` } func main() { @@ -175,7 +176,11 @@ func main() { // Build the container name := fmt.Sprintf("%s:%s", vargs.Repo, vargs.Tag.Slice()[0]) - cmd = exec.Command("/usr/bin/docker", "build", "--pull=true", "--rm=true", "-f", vargs.File, "-t", name, vargs.Context) + cmd = exec.Command("/usr/bin/docker", "build", "--pull=true", "--rm=true", "-f", vargs.File, "-t", name) + for _, value := range vargs.BuildArgs { + cmd.Args = append(cmd.Args, "--build-arg", value) + } + cmd.Args = append(cmd.Args, vargs.Context) cmd.Dir = workspace.Path cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr