Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -169,18 +169,24 @@ for _, task := range tasks {

```go

view, err := jenkins.CreateView(ctx, "test_view", gojenkins.LIST_VIEW)
view1, err := jenkins.CreateView(ctx, "test_view", gojenkins.LIST_VIEW)

if err != nil {
panic(err)
}

status, err := view.AddJob(ctx, "jobName")
status, err := view1.AddJob(ctx, "jobName")

if status != nil {
fmt.Println("Job has been added to view")
}

view2, err := jenkins.CreateViewInFolder(ctx, "test_view", gojenkins.LIST_VIEW, "parentFolder", "childFolder")

if err != nil {
panic(err)
}

```

### Create nested Folders and create Jobs in them
Expand Down
32 changes: 14 additions & 18 deletions jenkins.go
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,17 @@ func (j *Jenkins) CreateFolder(ctx context.Context, name string, parents ...stri
return folder, nil
}

// Create a new view in the folder
// Example: jenkins.CreateViewInFolder("newViewName", gojenkins.LIST_VIEW, "myFolder", "parentFolder")
func (j *Jenkins) CreateViewInFolder(ctx context.Context, viewName string, viewType string, parentIDs ...string) (*View, error) {
viewObj := &View{Jenkins: j, Raw: new(ViewResponse), Base: "/job/" + strings.Join(parentIDs, "/job/")}
view, err := viewObj.Create(ctx, viewName, viewType)
if err != nil {
return nil, err
}
return view, nil
}

// Create a new job in the folder
// Example: jenkins.CreateJobInFolder("<config></config>", "newJobName", "myFolder", "parentFolder")
func (j *Jenkins) CreateJobInFolder(ctx context.Context, config string, jobName string, parentIDs ...string) (*Job, error) {
Expand Down Expand Up @@ -562,27 +573,12 @@ func (j *Jenkins) GetAllViews(ctx context.Context) ([]*View, error) {
// gojenkins.PIPELINE_VIEW
// Example: jenkins.CreateView("newView",gojenkins.LIST_VIEW)
func (j *Jenkins) CreateView(ctx context.Context, name string, viewType string) (*View, error) {
view := &View{Jenkins: j, Raw: new(ViewResponse), Base: "/view/" + name}
endpoint := "/createView"
data := map[string]string{
"name": name,
"mode": viewType,
"Submit": "OK",
"json": makeJson(map[string]string{
"name": name,
"mode": viewType,
}),
}
r, err := j.Requester.Post(ctx, endpoint, nil, view.Raw, data)

viewObj := &View{Jenkins: j, Raw: new(ViewResponse), Base: "/"}
view, err := viewObj.Create(ctx, name, viewType)
if err != nil {
return nil, err
}

if r.StatusCode == 200 {
return j.GetView(ctx, name)
}
return nil, errors.New(strconv.Itoa(r.StatusCode))
return view, nil
}

func (j *Jenkins) Poll(ctx context.Context) (int, error) {
Expand Down
14 changes: 14 additions & 0 deletions jenkins_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -384,3 +384,17 @@ func getFileAsString(path string) string {

return string(buf)
}

func TestCreateViewInFolder(t *testing.T) {
if _, ok := os.LookupEnv(integration_test); !ok {
return
}
ctx := context.Background()
viewName := "view_test"

view1, err := jenkins.CreateViewInFolder(ctx, viewName, LIST_VIEW, "folder1_test")
assert.Nil(t, err)
assert.NotNil(t, view1)
assert.Equal(t, "Some Job Description", view1.GetDescription())
assert.Equal(t, viewName, view1.GetName())
}
27 changes: 27 additions & 0 deletions views.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package gojenkins
import (
"context"
"errors"
"path"
"strconv"
)

Expand All @@ -42,6 +43,32 @@ var (
PIPELINE_VIEW = "au.com.centrumsystems.hudson.plugin.buildpipeline.BuildPipelineView"
)

func (v *View) Create(ctx context.Context, name string, viewType string) (*View, error) {
data := map[string]string{
"name": name,
"mode": viewType,
"Submit": "OK",
"json": makeJson(map[string]string{
"name": name,
"mode": viewType,
}),
}

endpoint := path.Join(v.Base, "/createView")
v.Base = path.Join(v.Base, "/view/", name)

r, err := v.Jenkins.Requester.Post(ctx, endpoint, nil, v.Raw, data)

if err != nil {
return nil, err
}

if r.StatusCode == 200 {
return v, nil
}
return nil, errors.New(strconv.Itoa(r.StatusCode))
}

// Returns True if successfully added Job, otherwise false
func (v *View) AddJob(ctx context.Context, name string) (bool, error) {
url := "/addJobToView"
Expand Down