Skip to content

Instantly share code, notes, and snippets.

Last active August 11, 2023 06:14
Show Gist options
  • Save micw/e80d739c6099078ce0f3 to your computer and use it in GitHub Desktop.
Save micw/e80d739c6099078ce0f3 to your computer and use it in GitHub Desktop.
Script to install one or more jenkins plugins including dependencies while jenkins is offline
set -e
if [ $# -eq 0 ]; then
echo "USAGE: $0 plugin1 plugin2 ..."
exit 1
mkdir -p /var/lib/jenkins/plugins
installPlugin() {
if [ -f ${plugin_dir}/${1}.hpi -o -f ${plugin_dir}/${1}.jpi ]; then
if [ "$2" == "1" ]; then
return 1
echo "Skipped: $1 (already installed)"
return 0
echo "Installing: $1"
curl -L --silent --output ${plugin_dir}/${1}.hpi${1}.hpi
return 0
for plugin in $*
installPlugin "$plugin"
while [ "$changed" == "1" ]; do
echo "Check for missing dependecies ..."
if [ $maxloops -lt 1 ] ; then
echo "Max loop count reached - probably a bug in this script: $0"
exit 1
for f in ${plugin_dir}/*.hpi ; do
# without optionals
#deps=$( unzip -p ${f} META-INF/MANIFEST.MF | tr -d '\r' | sed -e ':a;N;$!ba;s/\n //g' | grep -e "^Plugin-Dependencies: " | awk '{ print $2 }' | tr ',' '\n' | grep -v "resolution:=optional" | awk -F ':' '{ print $1 }' | tr '\n' ' ' )
# with optionals
deps=$( unzip -p ${f} META-INF/MANIFEST.MF | tr -d '\r' | sed -e ':a;N;$!ba;s/\n //g' | grep -e "^Plugin-Dependencies: " | awk '{ print $2 }' | tr ',' '\n' | awk -F ':' '{ print $1 }' | tr '\n' ' ' )
for plugin in $deps; do
installPlugin "$plugin" 1 && changed=1
echo "fixing permissions"
chown ${file_owner} ${plugin_dir} -R
echo "all done"
Copy link

Genius. +1

Copy link

Hi.. I am a newbie in Devops.. I have installed jenkins after adding alot of proxy settings everywhere.. but when I open web console, after entering the admin password it throws 404, because it is not able to download certain plugins. So now from what I searched I found your script which can download required plugins for jenkins. I have 2 questions here:

  1. How do I exactly know which all plugins needs to be updated?
  2. Can I used your script as-is?


Copy link

Awesome +1

Copy link

pivec commented Apr 30, 2017

@nickcharlton, i tried that, still no luck :/

Copy link

hoesler commented May 11, 2017

Published an improved version, if anyone is interested:

Copy link


I tries using jenkins rst api but getting issues.

Command tried -:

curl -X POST -data "" --header 'Content-Type: text/xml' http://localhost:8080/pluginManager/installNecessaryPlugins


% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (6) Could not resolve host: latest'
100 390 100 387 100 3 24187 187 --:--:-- --:--:-- --:--:-- 24187

<title>Error 403 No valid crumb was included in the request</title>


Problem accessing /pluginManager/installNecessaryPlugins. Reason:

    No valid crumb was included in the request

Powered by Jetty://

Copy link

Eldadc commented Aug 30, 2017

Do you support pulling from an offline folder with the hpi files ?

Copy link

Eldadc commented Sep 5, 2017

Does not operate , It copy files to plugin folder but the plugin was not installed in Jenkins,

Copy link

averri commented Oct 27, 2017

It didn't work. The script downloads, but the plugins are not installed.

Copy link

See the comment on another gist with how to get the crumb,

Copy link

Anyway to know if this script can add bitbucket? If so, kindly advise.

Copy link

vigneshp826 commented Feb 21, 2018

Awesome +1.

I installed few plugins using GUI. Am seeing slack.jpi file and slack directory in JENKINS_HOME/plugins directory. But originally the installation is failed due to dependency.

Is there any way to check whether the .hpi is valid or installed correctly before trying this script?

Copy link

is there any script to check plugins that are installed

Copy link

JKrag commented May 1, 2018

@micw Could you be convinced to specify a license on this script? Maybe just an MIT or similar? Without some form of license, it would be all rights reserved, and even the many existing forks are strictly speaking in violation of your copyright, probably even if those forks that are unmodified. Also, no one would be allowed to actually use your really nice script or any of the forks out there.

If you need inspiration, I often find very useful.

Copy link

wiz4host commented Nov 1, 2018

is there any script to check plugins that are installed

There are multiple ways to list your Jenkins Plugins:

Way 1: Script console(groovy code):
go to http:<Jenkins_URl>/script
Run below command:

  plugin ->
    println ("${plugin.getShortName()}")

Way 2: Command CLI
Download command-CLI jar from : http://<Jenkins_URL>/jnlpJars/jenkins-cli.jar
Run below command:
java -jar jenkins-cli.jar -s http://<JENKINS_URL>/ list-plugins --username "<Jenkins_USERNAME>" --password "<Jenkins_Password>"

Way 3: Jenkins Python API

import jenkins
import json
server = jenkins.Jenkins('<jenkinsurl>', username='<Jenkins_user>', password='<Jenkins_User_password>')
for each_plugin in all_plugins_info:
    print each_plugin['shortName']

Copy link

blontic commented Nov 6, 2018

if you are using a file that contains the name of a plugin on each line you can use this command with the above script
./ $(echo $(cat plugins.txt))

Copy link

FilBot3 commented Dec 27, 2018


For whoever searches for this, make sure you try jenkins rest api first

	curl -X POST \
		--data "<jenkins><install plugin='${name}@latest' /></jenkins>" \
		--header 'Content-Type: text/xml' \

You should update your example to include the Crumb Issuer Header as well.

Copy link

Jenkins' docker build has a script for this:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment