使用Jenkins Pipeline通过HTTP-request-Builder插件

时间:2018-02-23 16:24:26

标签: rest jenkins groovy

提前就问题的长度道歉,但希望事先声明脚本可能会帮助未来的用户和我一样。

我目前在groovy中有一个管道脚本,它可以成功连接到我的bluecat IP地址管理器并获得一个授权令牌,理论上我只需要能够对Bluecat API和GET IP地址进行后续调用或者将新IP地址输入IPAM DB。 到目前为止,我的剧本是:

import groovy.json.JsonSlurperClassic 

def jsonParse(def json) {
    new groovy.json.JsonSlurperClassic().parseText(json)
}

def getPassword = { username ->
    def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
    com.cloudbees.plugins.credentials.common.StandardUsernamePasswordCredentials.class,
    jenkins.model.Jenkins.instance
)
def c = creds.findResult { it.username == username ? it : null }
if ( c ) {
    println "found credential ${c.id} for username ${c.username}"
    def systemCredentialsProvider =     jenkins.model.Jenkins.instance.getExtensionList(
        'com.cloudbees.plugins.credentials.SystemCredentialsProvider'
        ).first()
    def password = systemCredentialsProvider.credentials.first().password
    return password
} else {
    println "could not find credential for ${username}"
}
}


// Gather Credentials
def BLUECAT_USER = 'BLUECAT_USER'
def BLUECAT_PASS = getPassword(BLUECAT_USER)

def BLUECAT_URL = 'http://ipam.main.org/Services/REST/v1/'
def LoginUser = 'login?username='
def LoginUserP = '&password='
def GetSysInfo = 'getSystemInfo' 

// ----- Get Session Token
def response = httpRequest httpMode: 'GET', url: BLUECAT_URL + LoginUser + BLUECAT_USER + LoginUserP + BLUECAT_PASS

if (response.status != 200) {
    error("Response recieved is not valid check your credentials.")
} else {
println "Valid response recieved."
}

//println BLUECAT_USER
//println BLUECAT_PASS
//println('Status: '+response.status)
println('Response: '+response.content)

def ResponseText = response.content
def Response = ResponseText.split(' ')
def Token = Response[3];
println "Your Session Token is : " + Token



def GetSYS = httpRequest acceptType: 'APPLICATION_JSON', contentType: 'APPLICATION_JSON', httpMode: 'GET', customHeaders: [name: 'BAMAuthToken', value: Token], url: BLUECAT_URL + GetSysInfo
def content = jsonParse(GetSYS.content)
println "SystemInfo: " + content["status_text"]

凭据存储在Jenkins的凭据存储中,部分脚本潜入商店以检索与请求的用户帐户关联的密码。 (我不会直接从Stack Overflow中删除脚本中的那部分内容而道歉,它可以解决它为什么要乱用它?)

我遇到的问题是到目前为止的最后3行代码。 阅读HTTP-Request-Builder插件的文档,我无法形成获取IPAM设备系统信息的正确请求。

事件的顺序应如下

使用bluecat凭证集我可以执行get

def response = httpRequest httpMode: 'GET', url: 'http://ipam.main.org/Services/REST/v1/login?username=BLUECAT_USER&password=BLUECAT_PASS'

我用BAMAuthToken回复,然后我可以打电话给

def GetSYS = httpRequest acceptType: 'APPLICATION_JSON', contentType: 'APPLICATION_JSON', httpMode: 'GET', customHeaders: [name: 'BAMAuthToken', value: Token], url: 'http://ipam.main.org/Services/REST/v1/getSystemInfo'

其中令牌是成功登录后获得的授权令牌。

这最后一行是什么给了我一个错误,似乎指向我没有正确形成我的请求。 按照惯例,我花了至少一个星期用谷歌搜索其他人可能做过的事情。

https://github.com/jenkinsci/http-request-plugin

即使在这里,我也看不到如何形成请求,仍然将Auth令牌作为该请求的一部分传递。

我刚刚开始使用groovy和Jenkins,其他人使用Java或PowerShell完成了这个API聊天,我不是一个java Guy和powershell涉及创建一个我可以做的DLL,但后来变得非常狡猾和不完整从其他一些沿着这条路线走下去的人的特征设定条款已经呼出。

如果有人可以提供帮助或提供可能会受到赞赏的指示

1 个答案:

答案 0 :(得分:1)

使用此问题放弃了HTTPBuilder路由。我得到的回复稍微好一点

感谢您抽出宝贵时间来研究这个问题