案例分析
创建Jenkins对象
对于下面的所有示例,首先创建一个jenkins对象
go
// 创建一个Jenkins对象
ctx := context.Background()
jenkins, _ := gojenkins.CreateJenkins(nil, "http://localhost:8080/", "admin", "admin").Init(ctx)
如果你的jks是无需账号密码的
go
// 创建一个Jenkins对象
ctx := context.Background()
jenkins, _ := gojenkins.CreateJenkins(nil, "http://localhost:8080/").Init(ctx)
你也可以使用你自己的http.Client客户端(提供你自己的拥有SSL配置的实例)
go
ctx := context.Background()
client := &http.Client{ ... }
jenkins, := gojenkins.CreateJenkins(client, "http://localhost:8080/").Init(ctx)
检查所有节点的状态
go
// 获取所有节点
nodes, _ := jenkins.GetAllNodes(ctx)
// 遍历节点
for _, node := range nodes {
// 拉取节点数据
node.Poll(ctx)
// 判断节点状态
if online, _ := node.IsOnline(ctx);online {
fmt.Println("节点在线")
}
}
获取特定Job的所有编译信息,并检查他们的状态
go
jobName := "someJob"
// 根据Job名称获取所有编译实例对象
builds, err := jenkins.GetAllBuildIds(ctx, jobName)
if err != nil {
panic(err)
}
// 遍历编译对象
for _, build := range builds {
// #88
buildId := build.Number
// 获取编译数据
data, err := jenkins.GetBuild(ctx, jobName, buildId)
if err != nil {
panic(err)
}
// 获取编译状态
if "SUCCESS" == data.GetResult() {
fmt.Println("This build succeeded")
}
}
// 获取Job 最终的编译状态
job, err := jenkins.GetJob(ctx, "someJob")
if err != nil {
panic(err)
}
// 获取最后一次成功的日志
job.GetLastSuccessfulBuild(ctx)
// 获取最后一次Stable的日志
job.GetLastStableBuild(ctx)
获取当前队列中的任务,并且获取他们在队列里的原因
go
tasks := jenkins.GetQueue(ctx)
for _, task := range tasks {
fmt.Println(task.GetWhy(ctx))
}
创建视图,并向其中添加Jobs
go
// 创建视图
view, err := jenkins.CreateView(ctx, "test_view", gojenkins.LIST_VIEW)
if err != nil {
panic(err)
}
// 想视图中添加Job
status, err := view.AddJob(ctx, "jobName")
// 添加状态
if status {
fmt.Println("Job has been added to view")
}
创建复杂结构的文件夹 并向其中添加Job
go
// 创建父文件夹
pFolder, err := jenkins.CreateFolder(ctx, "parentFolder")
if err != nil {
panic(err)
}
// 在父文件夹中添加子文件夹
cFolder, err := jenkins.CreateFolder(ctx, "childFolder", pFolder.GetName())
if err != nil {
panic(err)
}
configString := `<?xml version='1.0' encoding='UTF-8'?>
<project>
<actions/>
<description></description>
<keepDependencies>false</keepDependencies>
<properties/>
<scm class="hudson.scm.NullSCM"/>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers class="vector"/>
<concurrentBuild>false</concurrentBuild>
<builders/>
<publishers/>
<buildWrappers/>
</project>`
// 在子文件夹中添加Job
job1, err := jenkins.CreateJobInFolder(ctx, configString, "jobInFolder", pFolder.GetName(), cFolder.GetName())
if err != nil {
panic(err)
}
if job1 != nil {
fmt.Println("Job 已经在子文件夹中创建了")
}
获取所有编译工件,并保存到磁盘某个文件夹
go
// 获取Job
job2, _ := jenkins.GetJob(ctx, "job")
//获取编译信息
build, _ := job2.GetBuild(ctx, 1)
//获取所有工件
artifacts := build.GetArtifacts()
// 遍历工件保存到文件夹
for _, a := range artifacts {
a.SaveToDir(ctx,"/tmp")
}
使用Poll()方法一直获取最新的数据
go
// 获取Job
job3, _ := jenkins.GetJob(ctx, "job")
// 拉取最新数据
job3.Poll(ctx)
build2, _ := job3.GetBuild(ctx, 1)
//拉取最新编译数据
build2.Poll(ctx)