# gojenkins
**Repository Path**: libac/gojenkins
## Basic Information
- **Project Name**: gojenkins
- **Description**: Jenkins API Client in Go
- **Primary Language**: Go
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-09-06
- **Last Updated**: 2020-12-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Jenkins API Client for Go
[](https://godoc.org/github.com/bndr/gojenkins)
[](https://goreportcard.com/report/github.com/bndr/gojenkins)
[](https://travis-ci.org/bndr/gojenkins)
## About
Jenkins is the most popular Open Source Continuous Integration system. This Library will help you interact with Jenkins in a more developer-friendly way.
These are some of the features that are currently implemented:
* Get information on test-results of completed/failed build
* Ability to query Nodes, and manipulate them. Start, Stop, set Offline.
* Ability to query Jobs, and manipulate them.
* Get Plugins, Builds, Artifacts, Fingerprints
* Validate Fingerprints of Artifacts
* Get Current Queue, Cancel Tasks
* etc. For all methods go to GoDoc Reference.
## Installation
go get github.com/bndr/gojenkins
## Usage
```go
import "github.com/bndr/gojenkins"
jenkins := gojenkins.CreateJenkins(nil, "http://localhost:8080/", "admin", "admin")
// Provide CA certificate if server is using self-signed certificate
// caCert, _ := ioutil.ReadFile("/tmp/ca.crt")
// jenkins.Requester.CACert = caCert
_, err := jenkins.Init()
if err != nil {
panic("Something Went Wrong")
}
build, err := jenkins.GetJob("job_name")
if err != nil {
panic("Job Does Not Exist")
}
lastSuccessBuild, err := build.GetLastSuccessfulBuild()
if err != nil {
panic("Last SuccessBuild does not exist")
}
duration := lastSuccessBuild.GetDuration()
job, err := jenkins.GetJob("jobname")
if err != nil {
panic("Job does not exist")
}
job.Rename("SomeotherJobName")
configString := `
false
true
false
false
false
false
`
j.CreateJob(configString, "someNewJobsName")
```
API Reference: https://godoc.org/github.com/bndr/gojenkins
## Examples
For all of the examples below first create a jenkins object
```go
import "github.com/bndr/gojenkins"
jenkins, _ := gojenkins.CreateJenkins(nil, "http://localhost:8080/", "admin", "admin").Init()
```
or if you don't need authentication:
```go
jenkins, _ := gojenkins.CreateJenkins(nil, "http://localhost:8080/").Init()
```
you can also specify your own `http.Client` (for instance, providing your own SSL configurations):
```go
client := &http.Client{ ... }
jenkins, := gojenkins.CreateJenkins(client, "http://localhost:8080/").Init()
```
By default, `gojenkins` will use the `http.DefaultClient` if none is passed into the `CreateJenkins()`
function.
### Check Status of all nodes
```go
nodes := jenkins.GetAllNodes()
for _, node := range nodes {
// Fetch Node Data
node.Poll()
if node.IsOnline() {
fmt.Println("Node is Online")
}
}
```
### Get all Builds for specific Job, and check their status
```go
jobName := "someJob"
builds, err := jenkins.GetAllBuildIds(jobName)
if err != nil {
panic(err)
}
for _, build := range builds {
buildId := build.Number
data, err := jenkins.GetBuild(jobName, buildId)
if err != nil {
panic(err)
}
if "SUCCESS" == data.GetResult() {
fmt.Println("This build succeeded")
}
}
// Get Last Successful/Failed/Stable Build for a Job
job, err := jenkins.GetJob("someJob")
if err != nil {
panic(err)
}
job.GetLastSuccessfulBuild()
job.GetLastStableBuild()
```
### Get Current Tasks in Queue, and the reason why they're in the queue
```go
tasks := jenkins.GetQueue()
for _, task := range tasks {
fmt.Println(task.GetWhy())
}
```
### Create View and add Jobs to it
```go
view, err := jenkins.CreateView("test_view", gojenkins.LIST_VIEW)
if err != nil {
panic(err)
}
status, err := view.AddJob("jobName")
if status != nil {
fmt.Println("Job has been added to view")
}
```
### Create nested Folders and create Jobs in them
```go
// Create parent folder
pFolder, err := jenkins.CreateFolder("parentFolder")
if err != nil {
panic(err)
}
// Create child folder in parent folder
cFolder, err := jenkins.CreateFolder("childFolder", pFolder.GetName())
if err != nil {
panic(err)
}
// Create job in child folder
configString := `
false
true
false
false
false
false
`
job, err := jenkins.CreateJobInFolder(configString, "jobInFolder", pFolder.GetName(), cFolder.GetName())
if err != nil {
panic(err)
}
if job != nil {
fmt.Println("Job has been created in child folder")
}
```
### Get All Artifacts for a Build and Save them to a folder
```go
job, _ := jenkins.GetJob("job")
build, _ := job.GetBuild(1)
artifacts := build.GetArtifacts()
for _, a := range artifacts {
a.SaveToDir("/tmp")
}
```
### To always get fresh data use the .Poll() method
```go
job, _ := jenkins.GetJob("job")
job.Poll()
build, _ := job.getBuild(1)
build.Poll()
```
## Testing
go test
## Contribute
All Contributions are welcome. The todo list is on the bottom of this README. Feel free to send a pull request.
## TODO
Although the basic features are implemented there are many optional features that are on the todo list.
* Kerberos Authentication
* CLI Tool
* Rewrite some (all?) iterators with channels
## LICENSE
Apache License 2.0