Skip to content

案例分析

创建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)