我正在嘗試使用 Jenkins CLI 監控我的 Jenkins 實體。最重要的是
我可以使用 CLI 列出我的所有插件和可能的更新:
java -jar ./jenkins-cli.jar <host> -auth <token> list-plugins | grep -E '\([0-9].[0-9].*\)'
這將回傳一個三列串列,例如
| 碼頭工人公地 | Docker Commons 插件 | 1.20 (1.21) |
其中 1.20 告訴我當前安裝的版本, (1.21) 告訴我當前可用的版本。
但我仍然找不到 CLI 呼叫來判斷列出的插件是否存在已知漏洞。此資訊似乎僅在 GUI 中可用?
uj5u.com熱心網友回復:
我在https://community.jenkins.io/t/jenkins-plugins-security-warnings/2266/2上找到了解決方案。
似乎沒有本地呼叫來獲取這些資訊。但是可以從https://updates.jenkins.io/update-center.actual.json獲取最新資訊。
然后你可能需要自己撰寫其余的代碼。您可以在 json 的警告部分找到安全警報。在每個警告中,您都會找到一個“版本”小節,其中lastVersion可能表示受此警告影響的最后一個版本。通過使用(希望保存完好)模式,您可以將使用的版本與latestVersion進行比較。
我目前正在嘗試為此任務構建一個可用的 bash 腳本,并會在我完成腳本后更新我的答案,但由于我不是 bash 腳本撰寫人員,這可能需要一段時間。
編輯:我得到它的作業。也許它對其他人有幫助,但正如我所說,我不是 bash 腳本撰寫者。
#!/bin/bash
DELIMITER=";"
#Getting all information from the Jenkins Update Center
items=$(curl -qLs https://updates.jenkins.io/update-center.actual.json)
#Getting installed plugins from Jenkins
results=$(java -jar jenkins-cli.jar -s <host> -auth <token> list-plugins)
#and writing it to an array.
readarray -t plugins <<<"$results"
for i in "${!plugins[@]}"; do
#keep format (with whitespaces):
#matrix-project Matrix Project Plugin 772.v494f19991984 (785.v06b_7f47b_c631)
formattedLine=$(echo "${plugins[$i]}");
#replace 2 or more whitespaces by the delimiter.
#matrix-project;Matrix Project Plugin;772.v494f19991984 (785.v06b_7f47b_c631)
replacedWhitespaces=$(echo "$formattedLine" | sed "s/ \{2,\}/$DELIMITER/g")
#split result into an array
#[0]matrix-project
#[1]Matrix Project Plugin
#[2]772.v494f19991984 (785.v06b_7f47b_c631)
IFS="$DELIMITER" read -r -a parts <<< "$replacedWhitespaces"
#check whether there is an update available or not
#<=> if there is a () separated by a whitespace or not
if [[ "${parts[2]}" =~ \ |\' ]]
then
IFS=' ' read -r -a subparts <<< "${parts[2]}";
parts[2]=$(echo "${subparts[0]}")
parts[3]=$(echo "${subparts[1]}")
else
parts[3]=""
fi
echo "name: ${parts[0]}"
echo "description: ${parts[1]}"
echo "Used Version: ${parts[2]}"
echo "Latest Version: ${parts[3]}"
echo "Vulnerabilities:"
#find vulnerabilities to this plugin:
vulnerabilities=$(echo "$items" | ./jq-win64 -c -r --arg pluginName "${parts[0]}" '.warnings[] | select(.name==$pluginName)')
#separate vulnerabilities
IFS=$'\n' res=($vulnerabilities)
#get the relevant content from each vulnerability
for r in "${!res[@]}"; do
lastVersion=$(echo "${res[$r]}" | ./jq-win64 -r -c '.versions[0]|.lastVersion')
id=$(echo "${res[$r]}" | ./jq-win64 -r -c '.|.id')
message=$(echo "${res[$r]}" | ./jq-win64 -r -c '.|.message')
url=$(echo "${res[$r]}" | ./jq-win64 -r -c '.|.url')
echo "* <=$lastVersion: $id - $message ($url)";
done;
echo "------------------------------------------------------------"
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/508708.html
