zoukankan      html  css  js  c++  java
  • 持续集成:Jenkins API简单使用

    Jenkins具有丰富的API接口,可以通过调用API接口实现对Job的触发、删除、查看任务状态等操作,支持HTTP协议,支持用户名、密码认证,提供的这些接口可以实现对 Jenkins 的控制。下面介绍Jenkins API的使用实例。

    先创建一个有Job任务运行和状态查询权限的用户,可使用admin用户;新建一个项目(可参考持续集成平台Jenkins介绍

    Jenkins API调用示例

    远程调用 Jenkins API返回最新任务编号

    GET请求
    URL:http://username:password@hostname:port/job/任务名/lastBuild/buildNumber

    import requests
    
    url = "http://admin:admin@192.168.30.8:8080/job/demo/lastBuild/buildNumber"
    ret = requests.get(url)
    print(ret.text)
    

    输出:

    17
    

    远程调用 Jenkins API查询任务状态

    GET请求
    URL:http://username:password@hostname:port/job/任务名/<build number>/api/json

    import json
    import requests
    url = "http://admin:admin@192.168.30.8:8080/job/demo/17/api/json"
    ret = requests.get(url)
    print(json.dumps(ret.json(),indent=2))
    

    返回的日志

    {
      "_class": "hudson.model.FreeStyleBuild",
      "actions": [
        {
          "_class": "hudson.model.CauseAction",
          "causes": [
            {
              "_class": "hudson.model.Cause$UserIdCause",
              "shortDescription": "Started by user anonymous",
              "userId": null,
              "userName": "anonymous"
            }
          ]
        },
        {},
        {
          "_class": "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
        }
      ],
      "artifacts": [],
      "building": false,
      "description": null,
      "displayName": "#17",
      "duration": 109,
      "estimatedDuration": 222,
      "executor": null,
      "fullDisplayName": "demo #17",
      "id": "17",
      "keepLog": false,
      "number": 17,
      "queueId": 3,
      "result": "SUCCESS",
      "timestamp": 1615705287802,
      "url": "http://192.168.30.8:8080/job/demo/17/",
      "builtOn": "",
      "changeSet": {
        "_class": "hudson.scm.EmptyChangeLogSet",
        "items": [],
        "kind": null
      },
      "culprits": []
    }
    

    远程调用 Jenkins API启动任务

    使用POST请求方法:
    URL:http://username:password@hostname:port/job/任务名/build

    import requests
    url = "http://admin:admin@192.168.30.8:8080/job/demo/build"
    ret = requests.post(url)
    print(ret.text)
    

    Jenkins 跨站请求伪造保护采取 Crumb(碎片生成器),可以使用用户的API Token来进行认证:

    import requests
    url = "http://192.168.30.8:8080/job/demo/build"
    username = "admin"
    api_token = "11f8790b23a9983c0a218ba125aa855f61"
    res = requests.post(url, auth=(username, api_token), verify=False)
    

    API Token可以在用户配置中生成。

    Python jenkinsapi库

    jenkinsapi库封装了Jenkins api 的调用方法
    安装:

    $ pip install jenkinsapi
    

    下面代码实现启动job名为demo的任务

    from jenkinsapi.jenkins import Jenkins
    
    jk = Jenkins('http://192.168.30.8:8080', username='admin', password='admin', useCrumb=True)
    # print(jk.keys())
    job_name = 'demo'
    if jk.has_job(job_name):
        my_job = jk.get_job(job_name)
        if not my_job.is_queued_or_running():
            try:
                last_build = my_job.get_last_buildnumber()
            except:
                last_build = 0
            build_num = last_build + 1
    
            # 启动任务
            try:
                jk.build_job(job_name)
            except Exception as e:
                print(str(e))
            while True:
                if not my_job.is_queued_or_running():
                    print("Finished")
                    print(f"build_num:{build_num}")
                    break
    

    输出:

    Finished
    build_num:20
    

    --THE END--

    欢迎关注公众号:「测试开发小记」及时接收最新技术文章!

  • 相关阅读:
    careercup-高等难度 18.1
    面试——网络
    堆和栈的区别(转过无数次的文章)
    Linux用户空间与内核空间(理解高端内存)
    Linux内存管理
    位操作实现加减乘除四则运算
    栈的压入和弹出序列
    DG gap sequence修复一例
    ORACLE 11gR2 DG(Physical Standby)日常维护02
    oracle的特殊权限s bit丢失
  • 原文地址:https://www.cnblogs.com/hiyong/p/14567947.html
Copyright © 2011-2022 走看看