【实战】jenkins api 接口

这篇具有很好参考价值的文章主要介绍了【实战】jenkins api 接口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Jenkins Api简介

Jenkins 对外暴露的动作交付入口
为外部程序提供入口,可以控制Jenkins
支持协议 - Http
Api 接口支持用户名、密码认证
Jenkins Api支持的典型功能:运行Job、查看任务状态、返回任务编号…等

二、Jenkins Api 环境准备

创建一个有任务运行和查询权限的用户
较老版本的Jenkins操作关闭跨站脚本伪造请求保护,新版本的Jenkins无此选项了

1、获取所有job接口

curl -u USERNAME:PASSWORD “JENKINSURL:PORT/api/json?pretty=true”

[root@mylinux1 ~]# curl -u admin:admin "http://192.168.22.3:8080/api/json?pretty=true"

【实战】jenkins api 接口

2、获取所有job名字接口

[root@mylinux1 ~]# curl -u admin:admin -g "http://192.168.22.3:8080/api/json?pretty=true&tree=jobs[name]"

{
  "_class" : "hudson.model.Hudson",
  "jobs" : [
    {
      "_class" : "hudson.model.FreeStyleProject",
      "name" : "build_no_params"
    },
    {
      "_class" : "hudson.model.FreeStyleProject",
      "name" : "build_with_params"
    },
    {
      "_class" : "hudson.model.FreeStyleProject",
      "name" : "father_job"
    },
    {
      "_class" : "hudson.model.FreeStyleProject",
      "name" : "first_job"
    },
    {
      "_class" : "hudson.model.FreeStyleProject",
      "name" : "git_demo"

3、获取所有job名字和url接口

[root@mylinux1 ~]# curl -u admin:admin -g "http://192.168.22.3:8080/api/json?pretty=true&tree=jobs[name,url]"

{
  "_class" : "hudson.model.Hudson",
  "jobs" : [
    {
      "_class" : "hudson.model.FreeStyleProject",
      "name" : "build_no_params",
      "url" : "http://192.168.22.3:8080/job/build_no_params/"
    },
    {
      "_class" : "hudson.model.FreeStyleProject",
      "name" : "build_with_params",
      "url" : "http://192.168.22.3:8080/job/build_with_params/"
    },
    {
      "_class" : "hudson.model.FreeStyleProject",
      "name" : "father_job",
      "url" : "http://192.168.22.3:8080/job/father_job/"
    },

三、使用curl调用 获取所有构建队列

curl -u USERNAME:PASSWORD JENKINSURL:PORT/queue/api/json?pretty=true

[root@mylinux1 ~]# curl -u admin:admin "http://192.168.22.3:8080/queue/api/json?pretty=true"
{
  "_class" : "hudson.model.Queue",
  "discoverableItems" : [
    
  ],
  "items" : [
    
  ]

四、使用curl调用 获取Job信息

获取任务所有信息
curl -u USERNAME:PASSWORD JENKINSURL:PORT/job/JOBNAME/api/json?pretty=true

[root@mylinux1 ~]# curl -u admin:admin "http://192.168.22.3:8080/job/build_with_params/api/json?pretty=true" 

获取最后一次构建信息
curl -u USERNAME:PASSWORD JENKINSURL:PORT/job/JOBNAME/lastBuild/api/json?pretty=true

[root@mylinux1 ~]# curl -u admin:admin "http://192.168.22.3:8080/job/build_with_params/lastBuild/api/json?pretty=true"

获取最后稳定构建信息
curl -u USERNAME:PASSWORD JENKINSURL:PORT/job/JOBNAME/lastStableBuild/api/json?pretty=true

[root@mylinux1 ~]# curl -u admin:admin "http://192.168.22.3:8080/job/build_with_params/lastStableBuild/api/json?pretty=true"

获取最后成功的构建
curl -u USERNAME:PASSWORD JENKINSURL:PORT/job/JOBNAME/lastSuccessfulBuild/api/json?pretty=true

[root@mylinux1 ~]# curl -u admin:admin "http://192.168.22.3:8080/job/build_with_params/lastSuccessfulBuild/api/json?pretty=true"

获取最后完成的构建
curl -u USERNAME:PASSWORD JENKINSURL:PORT/job/JOBNAME/lastCompletedBuild/api/json?pretty=true

[root@mylinux1 ~]# curl -u admin:admin "http://192.168.22.3:8080/job/build_with_params/lastCompletedBuild/api/json?pretty=true"

最近失败的构建
curl -u USERNAME:PASSWORD JENKINSURL:PORT/job/JOBNAME/lastFailedBuild/api/json?pretty=true

[root@mylinux1 ~]# curl -u admin:admin "http://192.168.22.3:8080/job/maven_demo/lastFailedBuild/api/json?pretty=true"

五、使用curl调用操作Job

1、操作Job需要验证crumb

a、使用token发起接口(不推荐)

【实战】jenkins api 接口

b、获取crumb使用

[root@mylinux1 ~]# username_password="admin:admin"
[root@mylinux1 ~]# jenkins_url="http://192.168.22.3:8080"
[root@mylinux1 ~]# cookie_file="$(mktemp)"
[root@mylinux1 ~]# jenkins_crumb=$(curl -s -f -u "${username_password}" --cookie-jar "${cookie_file}" -s "${jenkins_url}/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,%22:%22,//crumb)")
[root@mylinux1 ~]# echo $jenkins_crumb
Jenkins-Crumb:bcc9f0c335fbcffe6e12f5aa4398ec2bdc74749b72b3389003bdc3f321d9b164

c、上面命令操作完成后会生成config.xml文件

[root@mylinux1 ~]# ls config.xml
config.xml
vim config.xml

<?xml version='1.1' encoding='UTF-8'?>
<project>
  <description></description>
  <keepDependencies>false</keepDependencies>
  <properties/>
  <scm class="hudson.scm.NullSCM"/>
  <canRoam>true</canRoam>
  <disabled>false</disabled>
  <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
  <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
  <triggers/>
  <concurrentBuild>false</concurrentBuild>
  <builders>
    <hudson.tasks.Shell>
      <command>echo &quot;good&quot;</command>
      <configuredLocalRules/>
    </hudson.tasks.Shell>
  </builders>
  <publishers/>
  <buildWrappers/>
</project>

2、创建job

[root@mylinux1 ~]# curl -u "${username_password}" "${jenkins_url}/createItem?name=create_job2" --cookie "${cookie_file}" -X POST -H "${jenkins_crumb}" -H 'Content-Type:text/xml' --data-binary "@./config.xml"
[root@mylinux1 ~]# 

【实战】jenkins api 接口

3、复制job

[root@mylinux1 ~]# curl -u "${username_password}" "${jenkins_url}/createItem?name=create_job3&mode=copy&from=create_job1" --cookie "${cookie_file}" -X POST -H "${jenkins_crumb}"
[root@mylinux1 ~]# 

【实战】jenkins api 接口

4、修改job

【实战】jenkins api 接口

[root@mylinux1 ~]# curl -u "${username_password}" "${jenkins_url}/job/create_job2/config.xml" --cookie "${cookie_file}" -X POST -H "${jenkins_crumb}" -H 'Content-Type:text/xml' --data-binary "@./config.xml"
[root@mylinux1 ~]# 

【实战】jenkins api 接口

5、无参构建

[root@mylinux1 ~]# curl -u "${username_password}" "${jenkins_url}/job/build_no_params/build" --cookie "${cookie_file}" -X POST -H "${jenkins_crumb}"
[root@mylinux1 ~]# 

【实战】jenkins api 接口

6、有参构建

[root@mylinux1 ~]# curl -u "${username_password}" "${jenkins_url}/job/build_with_params/buildWithParameters" --cookie "${cookie_file}" -X POST -H "${jenkins_crumb}" --data-urlencode json='{"env":"dev"}'

【实战】jenkins api 接口

7、删除job

[root@mylinux1 ~]# curl -u "${username_password}" "${jenkins_url}/job/create_job2/doDelete" --cookie "${cookie_file}" -X POST -H "${jenkins_crumb}"

六、使用curl调用 操作指定构建的Job

查看最新构建任务编号
curl -u USERNAME:PASSWORD “JENKINSURL:PORT/job/son_demo/lastBuild/buildNumber”

查看某次构建控制台日志
curl -u USERNAME:PASSWORD “JENKINSURL:PORT/job/JOBNAME/ID/logText/progressiveText”

删除某次构建
curl -u USERNAME:PASSWORD "JENKINSURL:PORT/job/JOBNAME/ID/doDelete" -X POST --cookie "${cookie_file}" -H "${jenkins_crumb}"

1、查看最新构建任务编号

[root@mylinux1 ~]# curl -u "${username_password}" "${jenkins_url}/job/build_with_params/lastBuild/buildNumber"
5[root@mylinux1 ~]# 

【实战】jenkins api 接口
【实战】jenkins api 接口

2、查看某次构建控制台日志

[root@mylinux1 ~]# curl -u "${username_password}" "${jenkins_url}/job/build_with_params/6/logText/progressiveText"Started by user admin
Running as SYSTEM
Building on the built-in node in workspace /var/jenkins_home/workspace/build_with_params
[build_with_params] $ /bin/sh -xe /tmp/jenkins11717514708564825855.sh
+ [ online = dev ]
+ [ online = test ]
+ [ online = online ]
+ echo online runtime
online runtime
Finished: SUCCESS
[root@mylinux1 ~]# 

【实战】jenkins api 接口
【实战】jenkins api 接口

3、删除某次构建

【实战】jenkins api 接口
【实战】jenkins api 接口

七、Python Jenkins Api常用接口操作

1、安装 pip install jenkinsapi

2、jenkinsapi 连接Jenkins服务

from jenkinsapi import jenkins

class JenkinsApiStudy:

    def __init__(self):
        """
        实现对jenkins的连接
        """
        jenkins_url="http://192.168.22.3:8080"
        #username="admin"
        #password="admin"
        用户名="admin"
        密码="admin"
        self.my_jenkins = jenkins.Jenkins(jenkins_url, username, password, use_crumb=True)

3、jenkinsapi 获取所有jobs

    def get_all_jobs(self):
        """
        jenkinsapi 获取所有jobs
        :return:
        """
        jobs=[]
        # 需要注意,如果请求的url与Jenkins Location配置的Jenkins URL不一致时,获取到的key会拼接上一截地址
        #jobs=self.my_jenkins.keys()  # 获取所有的job名称
        for info in self.my_jenkins.get_jobs_info():
            jobs.append(info) # 获取job的url与名称  比较卡
        return jobs

4、jenkinsapi 获取构建队列

    def get_queue(self):
        """
        获取队列信息
        :return:
        """
        return self.my_jenkins.get_queue().keys()

5、jenkinsapi 获取Job信息

    def get_job_info(self,job_name):
        """
        jenkinsapi 获取Job信息
        :return:
        """
        # 获取job对象
        my_job=self.my_jenkins.get_job(job_name)
        # 获取最后一次构建对象
        print(my_job.get_last_build())
        # 获取最后一次完成的构建对象
        print(my_job.get_last_completed_build())
        # 获取最后一次成功的构建对象
        print(my_job.get_last_good_build())
        # 获取最后一次失败的构建编号
        print(my_job.get_last_failed_buildnumber())

6、jenkinsapi 操作Job信息

        def deal_job(self,job_name):
        """
        jenkinsapi 操作Job信息
        :param job_name: job名称
        :return:
        """
        #my_job = self.my_jenkins.get_job(job_name)
        # 获取job的config
        #print(my_job.get_config())
        # 创建job
        # 先获取到job的config
        with open(f"{job_name}_config.xml", "w", encoding="utf-8") as f:
            my = self.my_jenkins.get_job(job_name).get_config()
            f.write(my)
        self.my_jenkins.create_job("create_python_job", open("./build_no_params_config.xml", encoding="utf-8").read())
        # 复制job
        self.my_jenkins.copy_job(job_name, "build_no_params_job1")
        #todo 禁用job:当创建job或者复制job时,会出现job没有构建功能;操作:禁用后再操作启用
        #my_job.disable()
        # 启用job
        #my_job.enable()
        # 重命名job
        self.my_jenkins.rename_job(job_name, f"{job_name}_new")
        # 无参构建
        self.my_jenkins.build_job(job_name)
        # 有参构建
        self.my_jenkins.build_job(job_name, params={"env": "test"})
        # 删除job
        #self.my_jenkins.delete_job(job_name)

a、查看my_job.get_config()信息

【实战】jenkins api 接口

b、查看生成的config.xml文件

 def deal_job(self,job_name):
        """
        jenkinsapi 操作Job信息
        :param job_name: job名称
        :return:
        """
        #my_job = self.my_jenkins.get_job(job_name)
        # 获取job的config
        #print(my_job.get_config())
        # 创建job
        # 先获取到job的config
        with open(f"{job_name}_config.xml", "w", encoding="utf-8") as f:
            my = self.my_jenkins.get_job(job_name).get_config()
            f.write(my)
        self.my_jenkins.create_job("create_python_job", open("./build_no_params_config.xml", encoding="utf-8").read())

【实战】jenkins api 接口

7、jenkinsapi 操作指定构建的Job

    def get_build_info(self,job_name,build_id=None):
        """
        jenkinsapi 操作指定构建的Job 获取build信息
        :param job_name: job名称
        :param build_id: 构建id
        :return:
        """
        my_job = self.my_jenkins.get_job(job_name)
        # 当前job对象是否在队列/构建中
        print(my_job.is_queued_or_running())
        # 获取指定构建ID的对象
        build_object = my_job.get_build(build_id)
        # 获取构建对象的时间戳
        print(build_object.get_timestamp())
        # 获取控制台日志
        print(build_object.get_console())
        # 获取构建参数
        print(build_object.get_params())
        # 获取构建的状态
        print(build_object.get_status())
        # 获取构建的变更日志
        print(build_object.get_changeset_items())
        # 删除指定构建
        #my_job.delete_build(build_id)

输出结果文章来源地址https://www.toymoban.com/news/detail-440353.html

2023-04-16 05:52:26+00:00
Started by user admin
Running as SYSTEM
Building on the built-in node in workspace /var/jenkins_home/workspace/build_with_params
[build_with_params] $ /bin/sh -xe /tmp/jenkins12197874264732667620.sh
+ [ test = dev ]
+ [ test = test ]
+ echo test runtime
test runtime
Finished: SUCCESS

{'env': 'test'}
SUCCESS
[]

8、整合以上代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2023/4/16 21:47
# @Author  : 杜兰特
# @File    : jenkins_api_study.py

from jenkinsapi import jenkins

class JenkinsApiStudy:

    def __init__(self):
        """
        实现对jenkins的连接
        """
        jenkins_url="http://192.168.22.3:8080"
        #username="admin"
        #password="admin"
        用户名="admin"
        密码="admin"
        self.my_jenkins = jenkins.Jenkins(jenkins_url, username, password, use_crumb=True)

    def get_all_jobs(self):
        """
        jenkinsapi 获取所有jobs
        :return:
        """
        jobs=[]
        # 需要注意,如果请求的url与Jenkins Location配置的Jenkins URL不一致时,获取到的key会拼接上一截地址
        #jobs=self.my_jenkins.keys()  # 获取所有的job名称
        for info in self.my_jenkins.get_jobs_info():
            jobs.append(info) # 获取job的url与名称  比较卡
        return jobs

    def get_queue(self):
        """
        获取队列信息
        :return:
        """
        return self.my_jenkins.get_queue().keys()

    def get_job_info(self,job_name):
        """
        jenkinsapi 获取Job信息
        :return:
        """
        # 获取job对象
        my_job=self.my_jenkins.get_job(job_name)
        # 获取最后一次构建对象
        print(my_job.get_last_build())
        # 获取最后一次完成的构建对象
        print(my_job.get_last_completed_build())
        # 获取最后一次成功的构建对象
        print(my_job.get_last_good_build())
        # 获取最后一次失败的构建编号
        print(my_job.get_last_failed_buildnumber())

    def deal_job(self,job_name):
        """
        jenkinsapi 操作Job信息
        :param job_name: job名称
        :return:
        """
        my_job = self.my_jenkins.get_job(job_name)
        # 获取job的config
        print(my_job.get_config())
        # 创建job
        # 先获取到job的config
        # with open(f"{job_name}_config.xml", "w", encoding="utf-8") as f:
        #     my = self.my_jenkins.get_job(job_name).get_config()
        #     f.write(my)
        #self.my_jenkins.create_job("create_python_job", open("./build_no_params_config.xml", encoding="utf-8").read())
        # 复制job
        # self.my_jenkins.copy_job(job_name, "build_no_params_job1")
        #todo 禁用job:当创建job或者复制job时,会出现job没有构建功能;操作:禁用后再操作启用
        #my_job.disable()
        # # 启用job
        #my_job.enable()
        # 重命名job
        # self.my_jenkins.rename_job(job_name, f"{job_name}_new")
        # 无参构建
        # self.my_jenkins.build_job(job_name)
        # 有参构建
        # self.my_jenkins.build_job(job_name, params={"env": "test"})
        # # 删除job
        #self.my_jenkins.delete_job(job_name)


    def get_build_info(self,job_name,build_id=None):
        """
        jenkinsapi 操作指定构建的Job 获取build信息
        :param job_name: job名称
        :param build_id: 构建id
        :return:
        """
        my_job = self.my_jenkins.get_job(job_name)
        # 当前job对象是否在队列/构建中
        print(my_job.is_queued_or_running())
        # 获取指定构建ID的对象
        build_object = my_job.get_build(build_id)
        # 获取构建对象的时间戳
        print(build_object.get_timestamp())
        # 获取控制台日志
        print(build_object.get_console())
        # 获取构建参数
        print(build_object.get_params())
        # 获取构建的状态
        print(build_object.get_status())
        # 获取构建的变更日志
        print(build_object.get_changeset_items())
        # 删除指定构建
        #my_job.delete_build(build_id)



if __name__ == '__main__':
    jk=JenkinsApiStudy()
    #print(jk.get_all_jobs())
    #print(jk.get_queue())
    #jk.get_job_info("python_interface_project")
    #jk.deal_job("build_no_params")
    jk.get_build_info("build_with_params",10)

到了这里,关于【实战】jenkins api 接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【全栈接口测试进阶系列教程】postman接口测试实战cookie,token,session鉴权,Base64,MD5,RSA加密,Sign签名,持续集成postman+Newman+jenkins

    目录 【一:postman简介和安装以及postman的登录和注册】 一、postman下载 二、安装、注册/登陆 三、简单使用 1.postman模拟发送get请求: 2.postman模拟发送post请求:  3.post数据类型说明: 【二:postman发送get请求,post请求实战以及页签详解】 发送GET请求 响应页面 发送POST请求 【三

    2024年02月10日
    浏览(33)
  • Jenkins 系列:Jenkins 安装(Windows、Mac、Centos)和简介

    Jenkins前身是 Hudson,使用 java 语言开发的自动化发布工具。在中大型金融等企业中普遍使用 Jenkins 来作为项目发布工具。 Jenkins 官方提供的插件使 Jenkins 更为强大。Jenkins 是一个自动化服务器,目前发展超过 15 年,比较成熟的 CI 工具(也可以 CD)能够实现自动化集成发布。建

    2024年02月03日
    浏览(26)
  • Jenkins简介

            随着软件开发需求及复杂度的不断提高,团队开发成员之间如何更好地协同工作及确保软件开发的质量已经慢慢称为开发过程中不可回避的问题。Jenkins自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更

    2024年02月05日
    浏览(21)
  • Pytest简介及jenkins集成

    pytest介绍 - unittestnose pytest:基于unittest之上的单元测试框架 自动发现测试模块和测试方法 断言使用assert+表达式即可 可以设置测试会话级、模块级、类级、函数级的fixtures 数据准备 + 清理工作 unittest:setUp、teardown、setUpClass、tearDownClass 共享前置后置 – conftest.py 有丰富的插

    2024年02月14日
    浏览(19)
  • k8s svc通过externalIPs并结合Keepalived对外暴露服务

    Kubemetes 的 Service需要对集群外暴露,可以通过NodePort、Ingress和LoadBalancer,其中 NodePort:需要预先知道k8s集群节点的IP地址,在使用时需指定node的ip(这样配置存在单点故障); Ingress:实现的是HTTP(S)负载均衡器,只能代理七层; LoadBalancer:需要通过云服务商提供的负载均衡器

    2024年02月05日
    浏览(51)
  • 接口测试框架pytest+allure+jenkins之jenkins环境安装配置步骤

    pytest+Allure+jenkins,可以定时跑测试用例,生成测试报告并发送邮箱,关联git,自动更新git最新代码,解放双手。但是对于第一次接触jenkins的测试人员,装jenkins环境和配置job等步骤较繁琐,很容易出错。本文将记录主要的Jenkins安装和配置步骤,以及容易踩坑的地方。 1. 检查是

    2024年02月03日
    浏览(42)
  • Jenkins简介及安装配置详解:开启持续集成之旅

    Jenkins是一个开源的、用Java编写的持续集成和持续交付(CI/CD)工具。它提供了一种简单易用的方式来自动化构建、测试和部署软件。Jenkins的主要目标是帮助开发团队加快软件开发过程,提高软件质量,并通过自动化流程减少手动操作和重复性工作。 Jenkins具有以下特点和优势

    2024年02月08日
    浏览(25)
  • Jenkins实战教程|Jenkins安装与使用大全

    😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想当开发的测试,不是一个好测试✌️。 如果感觉博主的文章还不错的话,还请点赞、收藏哦

    2024年02月09日
    浏览(33)
  • Jenkins实战:docker compose 搭建Jenkins

    进入/home/docker目录,新建docker-compose-jenkins.yml文件,内容如下: 创建/home/docker/data/jenkins/jenkins_home目录,并赋值777权限。 执行 docker-compose -f docker-compose-jenkins.yml up -d 进行安装。 访问:http://ip:8090进入页面,如下图所示

    2024年02月19日
    浏览(27)
  • DevOps-7:Jenkins API介绍

    为什么要使用Jenkins的API? 我在使用Jenkins的过程中,觉得Jenkins的UI还是有不少问题的: UI性能差,尤其是有一些任务在构建中时,UI非常卡顿,等个十来秒都正常,极端时甚至会崩溃; 权限管理功能薄弱,虽然有 Role-based Authorization Strategy 类似的插件提供了角色管理,但是还

    2024年02月14日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包