github.com/ssube/gitlab-ci-multi-runner@v1.2.1-0.20160607142738-b8d1285632e6/executors/ssh/executor_ssh.go (about) 1 package ssh 2 3 import ( 4 "errors" 5 6 "gitlab.com/gitlab-org/gitlab-ci-multi-runner/common" 7 "gitlab.com/gitlab-org/gitlab-ci-multi-runner/executors" 8 "gitlab.com/gitlab-org/gitlab-ci-multi-runner/helpers/ssh" 9 ) 10 11 type executor struct { 12 executors.AbstractExecutor 13 sshCommand ssh.Client 14 } 15 16 func (s *executor) Prepare(globalConfig *common.Config, config *common.RunnerConfig, build *common.Build) error { 17 err := s.AbstractExecutor.Prepare(globalConfig, config, build) 18 if err != nil { 19 return err 20 } 21 22 s.Println("Using SSH executor...") 23 if s.BuildScript.PassFile { 24 return errors.New("SSH doesn't support shells that require script file") 25 } 26 27 if s.Config.SSH == nil { 28 return errors.New("Missing SSH configuration") 29 } 30 31 s.Debugln("Starting SSH command...") 32 33 // Create SSH command 34 s.sshCommand = ssh.Client{ 35 Config: *s.Config.SSH, 36 Stdout: s.BuildLog, 37 Stderr: s.BuildLog, 38 } 39 40 s.Debugln("Connecting to SSH server...") 41 err = s.sshCommand.Connect() 42 if err != nil { 43 return err 44 } 45 return nil 46 } 47 48 func (s *executor) Run(cmd common.ExecutorCommand) error { 49 return s.sshCommand.Run(ssh.Command{ 50 Environment: s.BuildScript.Environment, 51 Command: s.BuildScript.GetCommandWithArguments(), 52 Stdin: cmd.Script, 53 Abort: cmd.Abort, 54 }) 55 } 56 57 func (s *executor) Cleanup() { 58 s.sshCommand.Cleanup() 59 s.AbstractExecutor.Cleanup() 60 } 61 62 func init() { 63 options := executors.ExecutorOptions{ 64 DefaultBuildsDir: "builds", 65 SharedBuildsDir: true, 66 Shell: common.ShellScriptInfo{ 67 Shell: "bash", 68 Type: common.LoginShell, 69 }, 70 ShowHostname: true, 71 } 72 73 creator := func() common.Executor { 74 return &executor{ 75 AbstractExecutor: executors.AbstractExecutor{ 76 ExecutorOptions: options, 77 }, 78 } 79 } 80 81 featuresUpdater := func(features *common.FeaturesInfo) { 82 features.Variables = true 83 } 84 85 common.RegisterExecutor("ssh", executors.DefaultExecutorProvider{ 86 Creator: creator, 87 FeaturesUpdater: featuresUpdater, 88 }) 89 }