scripts/app/jenkins_update_plugins

61 lines
2.3 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# This script do the following:
# Use jenkins-cli.jar
# Verify if an update is available for any Jenkins plugins.
# Update the plugins.
# Restart Jenkins.
#
# How-to use it?
# Run it with `jenkins_update_plugins
JENKINS_HOME="/var/lib/jenkins"
JENKINS_CLI_JAR="${JENKINS_HOME}/war/WEB-INF/jenkins-cli.jar"
JENKINS_AUTH_FILE="/root/.jenkins.auth"
JENKINS_PLUGIN_LIST_FILE="${JENKINS_HOME}/updates/.plugin_list.$(date +%Y%m%d)"
JENKINS_PLUGIN_UPDATE_LOG="${JENKINS_HOME}/.update_plugin"
if [ ! -f "${JENKINS_CLI_JAR}" ]; then
printf '%b\n' "Jenkins-cli (${JENKINS_CLI_JAR}) does not seem to be available."
exit 1
fi
if [ ! -f "${JENKINS_AUTH_FILE}" ]; then
printf '%b\n' "Jenkins authentication file (${JENKINS_AUTH_FILE}) does not seem to be available."
exit 1
fi
if [ -f "${JENKINS_PLUGIN_LIST_FILE}" ]; then
rm --force -- "${JENKINS_PLUGIN_LIST_FILE}"
fi
# Move to the directory where authentication file is stored
cd "$(dirname ${JENKINS_AUTH_FILE})" || exit
# Verify if updates are available for plugins
if java -jar "${JENKINS_CLI_JAR}" -s http://127.0.0.1:8080 -auth @.jenkins.auth list-plugins | grep --ignore-case --quiet -- "(.*)$"
then
# Store the list of plugins to upgrade in a file, one by line
java -jar "${JENKINS_CLI_JAR}" -s http://127.0.0.1:8080 -auth @.jenkins.auth list-plugins | grep --ignore-case -- "(.*)$" | cut --delimiter=" " --fields=1 > "${JENKINS_PLUGIN_LIST_FILE}"
# Upgrade plugins one by one
while IFS= read -r plugin; do
#printf '%b\n' "Upgrading: ${plugin}"
java -jar "${JENKINS_CLI_JAR}" -s http://127.0.0.1:8080 -auth @.jenkins.auth install-plugin "${plugin}" > /dev/null &
# Wait for the end of the upgrade
while ps axg | grep --invert-match --word-regexp grep | grep --word-regexp "install-plugin ${plugin}" > /dev/null; do sleep 1; done
# With pgrep, it still runs 4~5 java commands at the same time
#while pgrep -f "install-plugin ${plugin}" > /dev/null; do sleep 1; done
done < "${JENKINS_PLUGIN_LIST_FILE}"
# Restart Jenkins
java -jar "${JENKINS_CLI_JAR}" -s http://127.0.0.1:8080 -auth @.jenkins.auth restart
#else
#printf '%b\n' "Nothing to do."
fi
cd - > /dev/null || exit
# Purge "log" files older than 30 days
find "${JENKINS_HOME}/updates" -iname ".plugin_list*" -mtime +30 -delete
rm --force -- "${JENKINS_PLUGIN_UPDATE_LOG}"
exit 0