很久以前就有一篇知名部落客分享了類似的議題, 我也是有樣學樣。不過以使用 LTS 並且安全第一的前提下,每兩三個月還是要停機更新 Jenkins 本身,當然最好也趁此機會一併將 Plugins 更至最新版,大概會有一百個左右吧?從最早在管理介面上全勾了就好,到後來防火牆阻隔,要一一取得各 Plugin 的更新網址,再套用上述做法,真的還蠻花時間的,因此再改善以下的步驟:
首先,管理者請取得一個 API Token,然後下指令
curl -u <adminAccount>:<token> https://<jenkinsUrl>/manage/pluginManager/ > a.html
其中用 < > 括起來的部份請都自行代換,就可以得到原本是給人看的「待更新 Plugins 網頁」原始碼。
這裡要借助一個工具Tidy
,版本應有盡有,不論是作業系統還是依附於程式語言。下載安裝後的指令是
tidy -asxml a.html > b.xml
這步比較麻煩,由於 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