簡介
我們用自動化新建任務之后,要想接着對這個新建任務操作,那就需要用參數關聯了,新建任務之后會有一個任務的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”
四、參考代碼
1 # coding:utf-8 2 import requests 3 # 先打開登錄首頁,獲取部分session 4 url = "http://localhost:8080/jenkins/j_acegi_security_check" 5 headers = { 6 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0" 7 } # get方法其它加個ser-Agent就可以了 8 d = {"j_username": "admin", 9 "j_password": "111111", 10 "from": "", 11 "Submit": u"登錄", 12 "remember_me": "on" 13 } 14 15 s = requests.session() 16 r = s.post(url, headers=headers, data=d) 17 #print (r.content.decode('utf-8')) 18 # 正則表達式提取賬號和登錄按鈕 19 import re 20 t = re.findall(r'<b>(.+?)</b>', r.content.decode('utf-8')) # 用python3的這里r.content需要解碼 21 print (t[0]) 22 print (t[1]) 23 #新建任務 24 url1 = "http://localhost:8080/jenkins/createItem" 25 body = {"name":"6666", 26 "mode": "hudson.model.FreeStyleProject", 27 "Jenkins-Crumb":"51a97fc7fbf3792823230d9bdd7ec906", 28 "json":{"name":"6666", 29 "mode": "hudson.model.FreeStyleProject", 30 "Jenkins-Crumb":"51a97fc7fbf3792823230d9bdd7ec906" 31 32 } 33 } 34 print(type (body)) 35 import urllib 36 import sys 37 #獲取name的值 38 name = body['name'] 39 print('name:'+name) 40 #獲取body的值 41 Jenkins_Crumb = body['Jenkins-Crumb'] 42 print('body的值是:',body['Jenkins-Crumb']) 43 r2 = s.post(url1, data=body, verify=False) 44 #print (r2.content.decode('utf-8')) 45 #刪除新建任務 46 url2 = "http://localhost:8080/jenkins/job/"+name+"/doDelete" 47 body1 = { 48 "Jenkins-Crumb": Jenkins_Crumb 49 } 50 51 r3 = s.post(url2, data=body1, verify=False) 52 print (r3.content.decode('utf-8')) 53 #刪除成功重定向到主界面(由於抓包沒有看到response的結果,只知道重定向主界面) 54 print(r3.url)
五、小結
1、細心地、認真的小伙伴一定會發現我代碼請求的name的值是6666,或者英文,而不是“北京-宏哥”的中文,原因是中文出現的url中有時候會報錯。解決辦法:
1 from urllib.parse import quote 2 import urllib.request 3 name = quote(name) 4 url2 = "http://localhost:8080/jenkins/job/"+name+"/doDelete"
2、給小伙伴們演示一下,打斷點
(1)在刪除新建任務出打上斷點,雙擊前邊即可出現一個紅色的大圓點
(2)查看jenkins主界面,沒有新建任務
(3)點擊右上方的昆蟲圖標
(4)進入debug模式,代碼運行到斷點處停止運行
(5)刷新主界面,再次查看jenkins主界面,有新建任務-北京-宏哥
(6)點擊右邊的綠色圖標一次性執行完后邊的代碼,或者是上邊拐彎藍色圖標,一步一步執行完后邊的代碼
(7)刷新主界面,再次查看jenkins主界面,你會看到:新建任務-北京-宏哥 神奇的消失了,他就這樣被你神不知鬼不覺的干掉了