简介
我们用自动化新建任务之后, 要想接着对这个新建任务操作, 那就需要用参数关联了, 新建任务之后会有一个任务的 Jenkins-Crumb, 获取到这个 Jenkins-Crumb, 就可以通过传这个任务 Jenkins-Crumb 继续操作这个新建的任务.
大致流程步骤: 登录 -> 新建任务 ->web 界面操作删除 -> 抓取删除操作请求 -> 提取参数 -> 传参 -> 代码实现.
一, 删除新建任务
1, 我们前面讲过登录后新建任务后, 那可以继续接着操作: 删除刚才新建的任务
2, 用 fiddler 抓包, 抓到删除新建任务的请求, 从抓包结果可以看出, 传的 data 参数是 Jenkins-Crumb
3. 这个 Jenkins-Crumb 哪里来的呢? 可以看上个请求的 body
4, 也就是说在新建任务的时候, 系统随机生成一个 Jenkins-Crumb 参数的值, body 里面带有 Jenkins-Crumb 这个参数. 那接下来我们提取出来就可以了
二, 提取参数
1, 我们需要的参数 Jenkins-Crumb 是在新建任务是 body 里 Jenkins-Crumb 的值, 这时候从 body 里提出对应的参数值就行了 (注意: 每次保存需要修改内容, 不能重复)
三, 传参
1, 删除新建任务的 data 参数传上面取到的参数:{"Jenkins-Crumb": Jenkins_Crumb}
2,data 数据类型 post 里面填 data 就行
3, 接着前面的新建任务操作, 就可以删除成功了
注意: 如果想看清楚, 可以在删除新建任务出打断点, 看到新建的任务后, 再次执行下边的代码 看看是不是可以删掉新建任务
4,302 重定向
5,content 内容复制到记事本, 修改后缀以后, 浏览器查看有 "欢迎来到 Jenkins"
四, 参考代码
- # coding:utf-8
- import requests
- # 先打开登录首页, 获取部分 session
- url = "http://localhost:8080/jenkins/j_acegi_security_check"
- headers = {
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
- } # get 方法其它加个 ser-Agent 就可以了
- d = {"j_username": "admin",
- "j_password": "111111",
- "from": "",
- "Submit": u"登录",
- "remember_me": "on"
- }
- s = requests.session()
- r = s.post(url, headers=headers, data=d)
- #print (r.content.decode('utf-8'))
- # 正则表达式提取账号和登录按钮
- import re
- t = re.findall(r'<b>(.+?)</b>', r.content.decode('utf-8')) # 用 python3 的这里 r.content 需要解码
- print (t[0])
- print (t[1])
- #新建任务
- url1 = "http://localhost:8080/jenkins/createItem"
- body = {"name":"6666",
- "mode": "hudson.model.FreeStyleProject",
- "Jenkins-Crumb":"51a97fc7fbf3792823230d9bdd7ec906",
- "json":{"name":"6666",
- "mode": "hudson.model.FreeStyleProject",
- "Jenkins-Crumb":"51a97fc7fbf3792823230d9bdd7ec906"
- }
- }
- print(type (body))
- import urllib
- import sys
- #获取 name 的值
- name = body['name']
- print('name:'+name)
- #获取 body 的值
- Jenkins_Crumb = body['Jenkins-Crumb']
- print('body 的值是:',body['Jenkins-Crumb'])
- r2 = s.post(url1, data=body, verify=False)
- #print (r2.content.decode('utf-8'))
- #删除新建任务
- url2 = "http://localhost:8080/jenkins/job/"+name+"/doDelete"
- body1 = {
- "Jenkins-Crumb": Jenkins_Crumb
- }
- r3 = s.post(url2, data=body1, verify=False)
- print (r3.content.decode('utf-8'))
- #删除成功重定向到主界面 (由于抓包没有看到 response 的结果, 只知道重定向主界面)
- print(r3.url)
五, 小结
1, 细心地, 认真的小伙伴一定会发现我代码请求的 name 的值是 6666, 或者英文, 而不是 "北京 - 宏哥" 的中文, 原因是中文出现的 url 中有时候会报错. 解决办法:
- from urllib.parse import quote
- import urllib.request
- name = quote(name)
- url2 = "http://localhost:8080/jenkins/job/"+name+"/doDelete"
2, 给小伙伴们演示一下, 打断点
(1) 在删除新建任务出打上断点, 双击前边即可出现一个红色的大圆点
(2) 查看 jenkins 主界面, 没有新建任务
(3) 点击右上方的昆虫图标
(4) 进入 debug 模式, 代码运行到断点处停止运行
(5) 刷新主界面, 再次查看 jenkins 主界面, 有新建任务 - 北京 - 宏哥
(6) 点击右边的绿色图标一次性执行完后边的代码, 或者是上边拐弯蓝色图标, 一步一步执行完后边的代码
(7) 刷新主界面, 再次查看 jenkins 主界面, 你会看到: 新建任务 - 北京 - 宏哥 神奇的消失了, 他就这样被你神不知鬼不觉的干掉了
来源: https://www.cnblogs.com/du-hong/p/10676559.html