選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
3 分鐘閱讀時間 (532 個字)

在 Mirror Sites 可能被鎖狀態下,批次更新 Jenkins 的 Plugins

Untitled

很久以前就有一篇知名部落客分享了類似的議題, 我也是有樣學樣。不過以使用 LTS 並且安全第一的前提下,每兩三個月還是要停機更新 Jenkins 本身,當然最好也趁此機會一併將 Plugins 更至最新版,大概會有一百個左右吧?從最早在管理介面上全勾了就好,到後來防火牆阻隔,要一一取得各 Plugin 的更新網址,再套用上述做法,真的還蠻花時間的,因此再改善以下的步驟:

  • 抓下管理介面的「待更新 Plugins 網頁」
  • 將格式相對鬆散的網頁修正為 Well-formed 的 XML
  • 藉由 XPath 萃取出待更新 Plugins 網址清單
  • 迴圈逐一更新

 抓下管理介面的「待更新 Plugins 網頁」

首先,管理者請取得一個 API Token,然後下指令

curl -u <adminAccount>:<token> https://<jenkinsUrl>/manage/pluginManager/ > a.html

其中用 < > 括起來的部份請都自行代換,就可以得到原本是給人看的「待更新 Plugins 網頁」原始碼。

 將格式相對鬆散的網頁修正為 Well-formed 的 XML

這裡要借助一個工具Tidy,版本應有盡有,不論是作業系統還是依附於程式語言。下載安裝後的指令是

tidy -asxml a.html > b.xml

 藉由 XPath 萃取出待更新 Plugins 網址清單

這步比較麻煩,由於 Jenkins 待更新 Plugins 網頁裡面有許多 XML Namespace,XPath 也要對得上才抓得到內容。我們要借助另一個也是跨平台的工具XmlStarlet,下載安裝後的指令是

xmlstarlet select --template --match "//_:table[@id='plugins']/_:tr/_:td[@data-id]/_:div[1]/_:a/@href" --value-of . --nl b.xml > c.txt

隨之就可以利用 c.txt 逐行內容進入迴圈,一一更新

cat c.txt | while read line; do #Do something with $line; done
改善程式碼品質從 SonarQube 開始!
我讀「軟體測試實務第二冊第五章」—第三方服務整合規劃、測試與維運實踐
 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2025/06/09, 週一

Captcha 圖像