Add seedjob agent

This commit is contained in:
Jakub Al-Khalili
2019-08-23 10:43:27 +02:00
parent 76e72702f2
commit ebd44b83fc
6 changed files with 268 additions and 13 deletions
+29 -5
View File
@@ -3,15 +3,18 @@ package client
import (
"bytes"
"fmt"
"net/http"
"os/exec"
"strings"
"github.com/bndr/gojenkins"
"github.com/pkg/errors"
"net/http"
"os/exec"
"regexp"
"strings"
)
var errorNotFound = errors.New("404")
var (
errorNotFound = errors.New("404")
regex = regexp.MustCompile("(<application-desc main-class=\"hudson.remoting.jnlp.Main\"><argument>)(?P<secret>[a-z0-9]*)")
)
// Jenkins defines Jenkins API
type Jenkins interface {
@@ -52,6 +55,7 @@ type Jenkins interface {
CreateView(name string, viewType string) (*gojenkins.View, error)
Poll() (int, error)
ExecuteScript(groovyScript string) (logs string, err error)
GetNodeSecret(name string) (string, error)
}
type jenkins struct {
@@ -136,3 +140,23 @@ func isNotFoundError(err error) bool {
}
return false
}
func (jenkins *jenkins) GetNodeSecret(name string) (string, error) {
var content string
_, err := jenkins.Requester.GetXML(fmt.Sprintf("/computer/%s/slave-agent.jnlp", name), &content, nil)
if err != nil {
return "", err
}
match := regex.FindStringSubmatch(content)
result := make(map[string]string)
for i, name := range regex.SubexpNames() {
if i != 0 && name != "" {
result[name] = match[i]
}
}
return result["secret"], nil
}
+13
View File
@@ -16,6 +16,19 @@ type MockJenkins struct {
recorder *MockJenkinsMockRecorder
}
func (m *MockJenkins) GetNodeSecret(name string) (string, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetNodeSecret", name)
ret0, _ := ret[0].(string)
ret1, _ := ret[1].(error)
return ret0, ret1
}
func (mr *MockJenkinsMockRecorder) GetNodeSecret(name string) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetNodeSecret", reflect.TypeOf((*MockJenkins)(nil).GetNodeSecret), name)
}
// MockJenkinsMockRecorder is the mock recorder for MockJenkins
type MockJenkinsMockRecorder struct {
mock *MockJenkins