grim/convey

Parents fcc5de335fa9
Children 402ef700adef
Add support for setting a custom docker config directory and some other README.md updates. Fixes #87
--- a/ChangeLog Wed Jul 05 22:27:13 2017 -0500
+++ b/ChangeLog Wed Jul 05 22:48:26 2017 -0500
@@ -2,6 +2,7 @@
* Allow labels for the Docker run and build tasks to use environment
variables. (fixed #112)
* Use a custom network for each plan invocation. (fixed #113)
+ * Add support for using custom docker config directories. (fixed #87)
0.7.0: 20170619
* Added support for passing arguments to the Docker build task (--build-arg).
--- a/README.md Wed Jul 05 22:27:13 2017 -0500
+++ b/README.md Wed Jul 05 22:48:26 2017 -0500
@@ -35,14 +35,18 @@
-l, --config-loader=convey Select the configuration loader
-f, --config=CONFIG The config file name to use
-c, --cpu-shares=CPU-SHARES The amount of cpu shares to give to a run task
+ --docker-config=DOCKER-CONFIG
+ Location of docker client config files
-e, --env=ENV ... Set environment variables
-S, --force-sequential Don't run anything concurrently
-g, --graphviz Output a graphviz diagram of the config file
- -P, --list-plans List the plans that are available
+ -L, --list-tasks List the supported tasks
-M, --list-meta-plans List the meta plans that are available
- -L, --list-tasks List the supported tasks
+ -P, --list-plans List the plans that are available
-m, --memory=MEMORY The ammount of memor to give the run task
--ssh-agent Enabled ssh-agent support for tasks
+ --ssh-identity=SSH-IDENTITY ...
+ Enable ssh-agent for the given identities
--timeout=15m The maximum amount of time a task can run in seconds. 0 to disable
-v, --verbose Be more verbose
--- a/docker/build.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/build.go Wed Jul 05 22:48:26 2017 -0500
@@ -25,7 +25,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -39,7 +38,7 @@
Arguments []string `yaml:"arguments"`
}
-const buildTemplate = `docker build
+const buildTemplate = `build
-f {{.dockerfile}}
{{if .tag}} -t {{.tag}}{{end}}
{{range .Labels}} --label '{{.}}'{{end}}
@@ -64,7 +63,7 @@
src, dest := tasks.ParseFilePath(base, environment.Mapper(src, fullEnv))
cleanDest := filepath.Clean(filepath.Join(tmpDir, dest))
- if err = exportFile(name, st.Workspace.Name, src, cleanDest, st.TaskTimeout); err != nil {
+ if err = exportFile(name, st.Workspace.Name, src, cleanDest, st); err != nil {
return err
}
}
@@ -76,7 +75,7 @@
"workspace": st.Workspace.Name,
}
- err = command.Run(name, exportTemplate, params, st.TaskTimeout)
+ err = Docker(name, exportTemplate, params, st)
if err != nil {
return err
}
@@ -90,7 +89,7 @@
"Arguments": b.Arguments,
}
- return command.Run(name, buildTemplate, params, st.TaskTimeout)
+ return Docker(name, buildTemplate, params, st)
}
func (b *Build) New() tasks.Task {
--- a/docker/docker.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/docker.go Wed Jul 05 22:48:26 2017 -0500
@@ -18,6 +18,8 @@
package docker
import (
+ "bitbucket.org/rw_grim/convey/command"
+ "bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
)
@@ -34,4 +36,20 @@
"run": &Run{},
"tag": &Tag{},
}
+
+ dockerTemplate = `docker {{if .DockerConfig}}--config {{.DockerConfig}} {{end}}`
)
+
+func Docker(name, template string, params map[string]interface{}, st *state.State) error {
+ fullTemplate := dockerTemplate + template
+ params["DockerConfig"] = st.DockerConfig
+
+ return command.Run(name, fullTemplate, params, st.TaskTimeout)
+}
+
+func DockerOutput(name, template string, params map[string]interface{}, st *state.State) (string, string, error) {
+ fullTemplate := dockerTemplate + template
+ params["DockerConfig"] = st.DockerConfig
+
+ return command.RunOutput(name, fullTemplate, params, st.TaskTimeout)
+}
--- a/docker/export.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/export.go Wed Jul 05 22:48:26 2017 -0500
@@ -21,13 +21,11 @@
"fmt"
"path/filepath"
"strings"
- "time"
"github.com/aphistic/gomol"
"os"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -37,8 +35,8 @@
Files []string `yaml:"files"`
}
-const exportTemplate = `docker cp {{.workspace}}:/workspace/{{.source}} {{.destination}}`
-const zglobTemplate = `docker run --rm -v {{.workspace}}:/workspace convey/workspace-tools:latest zglob {{.file}}`
+const exportTemplate = `cp {{.workspace}}:/workspace/{{.source}} {{.destination}}`
+const zglobTemplate = `run --rm -v {{.workspace}}:/workspace convey/workspace-tools:latest zglob {{.file}}`
func checkFilePattern(file string) error {
if strings.ContainsRune(file, '*') && strings.ContainsRune(file, ':') {
@@ -48,7 +46,7 @@
return nil
}
-func exportFile(name, workSpace, src, dest string, timeout time.Duration) error {
+func exportFile(name, workSpace, src, dest string, st *state.State) error {
params := map[string]interface{}{
"source": src,
"destination": dest,
@@ -60,16 +58,16 @@
return err
}
- return command.Run(name, exportTemplate, params, timeout)
+ return Docker(name, exportTemplate, params, st)
}
-func exportGlob(name, workSpace, mountPoint, pattern string, timeout time.Duration) error {
+func exportGlob(name, workSpace, mountPoint, pattern string, st *state.State) error {
params := map[string]interface{}{
"file": pattern,
"workspace": mountPoint,
}
- out, _, err := command.RunOutput(fmt.Sprintf("%s-zglob", name), zglobTemplate, params, timeout)
+ out, _, err := DockerOutput(fmt.Sprintf("%s-zglob", name), zglobTemplate, params, st)
if err != nil {
return err
}
@@ -79,7 +77,7 @@
continue
}
- exportFile(name, workSpace, match, tasks.DestFromSrc(match), timeout)
+ exportFile(name, workSpace, match, tasks.DestFromSrc(match), st)
}
return nil
@@ -98,13 +96,13 @@
if strings.ContainsRune(file, '*') {
mountPoint := environment.Mapper(st.Workspace.MountPoint, fullEnv)
- if err := exportGlob(name, st.Workspace.Name, mountPoint, file, st.TaskTimeout); err != nil {
+ if err := exportGlob(name, st.Workspace.Name, mountPoint, file, st); err != nil {
return err
}
} else {
src, dest := tasks.ParseFilePath("", file)
- if err := exportFile(name, st.Workspace.Name, src, dest, st.TaskTimeout); err != nil {
+ if err := exportFile(name, st.Workspace.Name, src, dest, st); err != nil {
return err
}
}
--- a/docker/import.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/import.go Wed Jul 05 22:48:26 2017 -0500
@@ -22,7 +22,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -32,7 +31,7 @@
Files []string `yaml:"files"`
}
-const importTemplate = `docker cp {{.source}} {{.workspaceID}}:/workspace/{{.destination}}`
+const importTemplate = `cp {{.source}} {{.workspaceID}}:/workspace/{{.destination}}`
func (i *Import) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error {
fullEnv := environment.Merge(env, st.Environment)
@@ -46,7 +45,7 @@
"workspaceID": st.Workspace.Name,
}
- err := command.Run(name, importTemplate, params, st.TaskTimeout)
+ err := Docker(name, importTemplate, params, st)
if err != nil {
return err
}
--- a/docker/login.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/login.go Wed Jul 05 22:48:26 2017 -0500
@@ -22,7 +22,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
)
@@ -33,7 +32,7 @@
Server string `yaml:"server"`
}
-const loginTemplate = `docker login -u {{.username}} -p {{.password}}{{if .server}} {{.server}}{{end}}`
+const loginTemplate = `login -u {{.username}} -p {{.password}}{{if .server}} {{.server}}{{end}}`
func (l *Login) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error {
params := map[string]interface{}{
@@ -42,7 +41,7 @@
"server": l.Server,
}
- return command.Run(name, loginTemplate, params, st.TaskTimeout)
+ return Docker(name, loginTemplate, params, st)
}
func (l *Login) New() tasks.Task {
--- a/docker/logout.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/logout.go Wed Jul 05 22:48:26 2017 -0500
@@ -22,7 +22,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
)
@@ -31,14 +30,14 @@
Server string `yaml:"server"`
}
-const logoutTemplate = `docker logout{{if .server}} {{.server}}{{end}}`
+const logoutTemplate = `logout{{if .server}} {{.server}}{{end}}`
func (l *Logout) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error {
params := map[string]interface{}{
"server": l.Server,
}
- return command.Run(name, logoutTemplate, params, st.TaskTimeout)
+ return Docker(name, logoutTemplate, params, st)
}
func (l *Logout) New() tasks.Task {
--- a/docker/pull.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/pull.go Wed Jul 05 22:48:26 2017 -0500
@@ -22,7 +22,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -33,7 +32,7 @@
Images []string `yaml:"images"`
}
-const pullTemplate = `docker pull {{.image}}`
+const pullTemplate = `pull {{.image}}`
func (p *Pull) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error {
fullEnv := environment.Merge(env, st.Environment)
@@ -43,7 +42,7 @@
"image": environment.Mapper(image, fullEnv),
}
- if err := command.Run(name, pullTemplate, params, st.TaskTimeout); err != nil {
+ if err := Docker(name, pullTemplate, params, st); err != nil {
return err
}
}
--- a/docker/push.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/push.go Wed Jul 05 22:48:26 2017 -0500
@@ -22,7 +22,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -33,7 +32,7 @@
Images []string `yaml:"images"`
}
-const pushTemplate = `docker push {{.image}}`
+const pushTemplate = `push {{.image}}`
func (p *Push) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error {
fullEnv := environment.Merge(env, st.Environment)
@@ -43,7 +42,7 @@
"image": environment.Mapper(image, fullEnv),
}
- if err := command.Run(name, pushTemplate, params, st.TaskTimeout); err != nil {
+ if err := Docker(name, pushTemplate, params, st); err != nil {
return err
}
}
--- a/docker/remove.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/remove.go Wed Jul 05 22:48:26 2017 -0500
@@ -22,7 +22,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -33,7 +32,7 @@
Images []string `yaml:"images"`
}
-const removeTemplate = `docker rmi {{.image}}`
+const removeTemplate = `rmi {{.image}}`
func (r *Remove) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error {
fullEnv := environment.Merge(env, st.Environment)
@@ -43,7 +42,7 @@
"image": environment.Mapper(image, fullEnv),
}
- if err := command.Run(name, removeTemplate, params, st.TaskTimeout); err != nil {
+ if err := Docker(name, removeTemplate, params, st); err != nil {
return err
}
}
--- a/docker/run.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/run.go Wed Jul 05 22:48:26 2017 -0500
@@ -27,7 +27,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -58,7 +57,7 @@
return nil
}
-const runTemplate = `docker run --rm
+const runTemplate = `run --rm
{{if .UID}} -e UID={{.UID}}{{end}}
{{if .GID}} -e GID={{.GID}}{{end}}
-v {{.WorkspacePath}}:{{.WorkspaceMount}}
@@ -168,7 +167,7 @@
}
// run the command
- return command.Run(name, runTemplate, params, st.TaskTimeout)
+ return Docker(name, runTemplate, params, st)
}
func (r *Run) New() tasks.Task {
--- a/docker/tag.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/tag.go Wed Jul 05 22:48:26 2017 -0500
@@ -22,7 +22,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -34,7 +33,7 @@
Destinations []string `yaml:"destinations"`
}
-const tagTemplate = `docker tag {{.source}} {{.destination}}`
+const tagTemplate = `tag {{.source}} {{.destination}}`
func (t *Tag) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error {
fullEnv := environment.Merge(env, st.Environment)
@@ -45,7 +44,7 @@
"destination": environment.Mapper(destination, fullEnv),
}
- if err := command.Run(name, tagTemplate, params, st.TaskTimeout); err != nil {
+ if err := Docker(name, tagTemplate, params, st); err != nil {
return err
}
}
--- a/main.go Wed Jul 05 22:27:13 2017 -0500
+++ b/main.go Wed Jul 05 22:48:26 2017 -0500
@@ -45,6 +45,7 @@
configLoader = app.Flag("config-loader", "Select the configuration loader").Short('l').Default("convey").Enum("convey", "bitbucket")
configFile = app.Flag("config", "The config file name to use").Short('f').String()
cpuShares = app.Flag("cpu-shares", "The amount of cpu shares to give to a run task").Short('c').String()
+ dockerConfig = app.Flag("docker-config", "Location of docker client config files").String()
env = app.Flag("env", "Set environment variables").Short('e').Strings()
forceSequential = app.Flag("force-sequential", "Don't run anything concurrently").Short('S').Default("False").Bool()
graphviz = app.Flag("graphviz", "Output a graphviz diagram of the config file").Short('g').Default("False").Bool()
@@ -136,8 +137,9 @@
TaskTimeout: *taskTimeout,
Environment: environment.Merge(defEnv, *env),
- CPUShares: *cpuShares,
- Memory: *memory,
+ DockerConfig: *dockerConfig,
+ CPUShares: *cpuShares,
+ Memory: *memory,
}
if err := st.Valid(); err != nil {
fmt.Printf("%s\n", err)
--- a/state/state.go Wed Jul 05 22:27:13 2017 -0500
+++ b/state/state.go Wed Jul 05 22:48:26 2017 -0500
@@ -36,8 +36,9 @@
TaskTimeout time.Duration
Environment []string
- CPUShares string
- Memory string
+ DockerConfig string
+ CPUShares string
+ Memory string
}
func (st *State) Valid() error {