@@ -16,26 +16,36 @@ func init() {
16
16
17
17
type RunJob struct {
18
18
BareJob
19
- Client * docker.Client `json:"-"`
20
- User string `default:"root"`
21
- TTY bool `default:"false"`
22
- Delete bool `default:"true"`
23
- Image string
24
- Network string
19
+ Client * docker.Client `json:"-"`
20
+ User string `default:"root"`
21
+ TTY bool `default:"false"`
22
+ Delete bool `default:"true"`
23
+ Image string
24
+ Network string
25
+ Container string
25
26
}
26
27
27
28
func NewRunJob (c * docker.Client ) * RunJob {
28
29
return & RunJob {Client : c }
29
30
}
30
31
31
32
func (j * RunJob ) Run (ctx * Context ) error {
32
- if err := j .pullImage (); err != nil {
33
- return err
34
- }
33
+ var container * docker.Container
34
+ var err error
35
+ if j .Image != "" && j .Container == "" {
36
+ if err = j .pullImage (); err != nil {
37
+ return err
38
+ }
35
39
36
- container , err := j .buildContainer ()
37
- if err != nil {
38
- return err
40
+ container , err = j .buildContainer ()
41
+ if err != nil {
42
+ return err
43
+ }
44
+ } else {
45
+ container , err = j .getContainer (j .Container )
46
+ if err != nil {
47
+ return err
48
+ }
39
49
}
40
50
41
51
if err := j .startContainer (ctx .Execution , container ); err != nil {
@@ -46,7 +56,10 @@ func (j *RunJob) Run(ctx *Context) error {
46
56
return err
47
57
}
48
58
49
- return j .deleteContainer (container .ID )
59
+ if j .Container == "" {
60
+ return j .deleteContainer (container .ID )
61
+ }
62
+ return nil
50
63
}
51
64
52
65
func (j * RunJob ) pullImage () error {
@@ -98,6 +111,14 @@ func (j *RunJob) startContainer(e *Execution, c *docker.Container) error {
98
111
return j .Client .StartContainer (c .ID , & docker.HostConfig {})
99
112
}
100
113
114
+ func (j * RunJob ) getContainer (id string ) (* docker.Container , error ) {
115
+ container , err := j .Client .InspectContainer (id )
116
+ if err != nil {
117
+ return nil , err
118
+ }
119
+ return container , nil
120
+ }
121
+
101
122
const (
102
123
watchDuration = time .Millisecond * 100
103
124
maxProcessDuration = time .Hour * 24
0 commit comments