专栏首页Android开发实战jenkins 凭证(Credentials)修改

jenkins 凭证(Credentials)修改

Jenkins是一个开源软件项目,是基于Java开发的一种[持续集成]工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能

Java api常用的有 : https://github.com/jenkinsci/java-client-api python api 常用的有以下两种: https://pypi.org/project/python-jenkins/ https://pypi.org/project/jenkinsapi/

本片文章主要针对目前所存在API中对Jenkins的Credentials的操作的空的空缺,实现对Jenkins的Credentials通过API的方式进行简单的操作.

操作jenkins Credentials的一般步骤在界面上为 凭据>系统>全局凭据>添加凭据 输入对应的内容即可,如图所示

界面操作中需要填写如下内容

  • 用户名(凭据的账号)
  • 密码(凭据的密码)
  • ID(凭据的唯一ID,若不填写则自动生成,用于维护job的唯一标识)
  • 描述(凭据的描述信息,用于在job配置页面进行展示)

确认之后会生成一条新的凭证,可以在job页面使用

当新增一条凭据信息时可以通过浏览器的网络监控看到他的请求内容

以上截图为chrom调试

从上图可以看到 请求的path为

/credentials/store/system/domain/_/createCredentials

请求凭证的内容较多,如下图:

可以看到操作凭证的请求地址、请求参数列表,这里的参数列表的参数非常的多,但实际上在源码(https://github.com/jenkinsci/jenkins)中读取的只有红框中的json的这一段。用postman来模拟调用一下

请求结果是:结果生成页面的html内容,若请求错误会报错 http://localhost:8080/jenkins/credentials/store/system/domain/_/ 可以到上述url查看生成效果: 基于以上,我们封装简单的增删改查方法:

java jenkins-client(0.3.8以上版本):

通过jenkins-client发送请求。

Java中通过JenkinsServer获取JenkinsHttpClient对象,使用postFromWithResult方法发送请求报文即可,但这里判断返回值的时候不能使用200判断结果,因为返回结果是一个重定向请求(302)。

HttpResponse httpResponse = staticJenkinsHttpClient.post_form_with_result("/credentials/store/system/domain/_/createCredentials", data, crumbFlag);

python-jenkins(基于python3.7)

封装代码如下

# !/usr/bin/python# -*- coding: UTF-8 -*-import requests# 注:host请直接传入机器ip, 域名由于dns解析等可能会导致Jenkins解析败class jenkins_credentials:
    # 传入值请使用双引号
    def createEOSCredentials(self, host, userName, passworld, id, des, jenkinsUserName, jenkinsPassworld):
        url = host + "/credentials/store/system/domain/_/createCredentials"
        json = {"": "0", "credentials": {"scope": "GLOBAL", "username": userName, "password": passworld,
                                         "$redact": "password", "id": id,
                                         "description": des,
                                         "stapler-class": "com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl",
                                         "$class": "com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl"}}
        data = {}
        data["json"] = str(json)
        result = requests.post(url, data=data, auth=(jenkinsUserName, jenkinsPassworld))
        print(result.text)

    # 传入值请使用双引号
    def deleteEOSCredentials(self, host, id, jenkinsUserName, jenkinsPassworld):
        url = host + "/credentials/store/system/domain/_/credential/" + id + "/doDelete"
        requests.post(url, auth=(jenkinsUserName, jenkinsPassworld))

    # 传入值请使用双引号
    def updateEOSCredentials(self, host, userName, passworld, id, des, jenkinsUserName, jenkinsPassworld):
        url = host + "/credentials/store/system/domain/_/credential/" + id + "/updateSubmit"
        json = {"stapler-class": "com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl",
                "scope": "GLOBAL", "username": userName, "password": passworld, "$redact": "password",
                "id": id, "description": des}
        data = {}
        data["json"] = str(json)
        result = requests.post(url, data=data, auth=(jenkinsUserName, jenkinsPassworld))
        print(result.text)

    def searchEOSCredentials(self, host, id, jenkinsUserName, jenkinsPassworld):
        url = host + "/credentials/store/system/domain/_/credential/" + id + "/"
        result = requests.post(url, auth=(jenkinsUserName, jenkinsPassworld))
        error_top = "The requested resource is not available."
        if error_top in result.text:
            return False
        else:
            return True

上述python代码中 增删改都可以直接复用,searchEOSCredentials方法请求当前id的credential是否存在,匹配返回错误的字符串即可.在不同环境上可能需要稍加改善

本文分享自微信公众号 - 编码恒字诀(gh_db8538619cdd),作者:Anymarvel

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 堆与栈区别

    堆(Heap)与栈(Stack)是开发人员必须面对的两个概念,在理解这两个概念时,需要放到具体的场景下,因为不同场景下,堆与栈代表不同的含义。一般情况下,有两层...

    Anymarvel
  • android Ndk JNI 入门

    相信很多人对于NDK 开发都是懵逼的,比如都知道把加密的逻辑以及密钥放在so文件中,但是你知道怎么生成so文件吗?你知道开发jni吗?你熟悉jni语法吗?怎么配...

    Anymarvel
  • Java基础数据类型和引用类型的区别

    基本数据类型只有8种,可按照如下分类 ①整数类型:long、int、short、byte ②浮点类型:float、double ③字符类型:char ④布尔类型...

    Anymarvel
  • Second python spider pro

    写完第二个爬虫之后,写了好几个,但是总归是因为技术原因,达不到自己想要的效果,在重写第二个爬虫时这种感觉尤为强烈,所以写完这个之后,回去继续看剩下的网课,充实自...

    BORBER
  • sun.net.www.protocol.http.HttpURLConnection cannot be cast to javax.net.ssl.HttpsURLConnection 异常的处理

    sun.net.www.protocol.http.HttpURLConnection cannot be cast to javax.net.ssl.Http...

    凯哥Java
  • Tensorflow的C语言接口部署DeeplabV3+语义分割模型

    tensorflow框架一般都是基于Python调用,但是有些时候跟应用场景,我们希望调用tensorflow C语言的接口,在C++的应用开发中使用它。要这么...

    OpenCV学堂
  • 外卖系统产品思考

      外卖产品下单到收货参与到的角色有用户、商家、骑手、以及平台系统;这四个角色和角色各个对应的场景活动构成了外卖产品的业务流程。

    用户2108620
  • C#中Image , Bitmap 和 BitmapData

    先说Image,Image 就是个图像,不能实例化,提供了位图和源文件操作的函数。本篇文章他就是来打酱油的,这里提供一个Bitmap转成BitmapSource...

    叁金
  • Jmeter系列之数据库操作

    点击上方蓝字“ITester软件测试小栈“关注我,每周一、三、五早上 07:30准时推送。

    ITester软件测试小栈
  • 二分查找与二分答案(1)

    mathor

扫码关注云+社区

领取腾讯云代金券