Add plugin and its dependencies version pinning

Version pinning will help to always have reproducable docker image
and avoid broken latest versions of plugins.

Change-Id: Idb49c995222c62f262021c6feca19adc60dee675
Related-bug: PROD-24701
diff --git a/install-plugins.sh b/install-plugins.sh
index 233b739..12aa7b4 100755
--- a/install-plugins.sh
+++ b/install-plugins.sh
@@ -8,6 +8,7 @@
 set -o pipefail
 
 REF_DIR=${REF:-/usr/share/jenkins/ref/plugins}
+DEPS_PINNING_FILE=${DEPS_PINNING_FILE:-/usr/share/jenkins/ref/jenkins-plugins-deps}
 FAILED="$REF_DIR/failed-plugins.txt"
 
 . /usr/local/bin/jenkins-support
@@ -80,6 +81,16 @@
     return $?
 }
 
+getPluginDepsPinnedVersion() {
+    local plugin
+    plugin="$1"
+    pinnedPlugin=$(cat $DEPS_PINNING_FILE | grep "^${plugin}:")
+    if [ -n "$pinnedPlugin" ]; then
+        pinnedPluginVersion="$(echo "$pinnedPlugin" | cut -d':' -f2 | tr -d ' ')"
+        printf '%s' "$pinnedPluginVersion"
+    fi
+}
+
 resolveDependencies() {
     local plugin jpi dependencies
     plugin="$1"
@@ -103,18 +114,22 @@
             echo "Skipping optional dependency $plugin"
         else
             local pluginInstalled
+            local pluginVersion; pluginVersion=$(getPluginDepsPinnedVersion "${plugin}")
             if pluginInstalled="$(echo "${bundledPlugins}" | grep "^${plugin}:")"; then
                 pluginInstalled="${pluginInstalled//[$'\r']}"
                 local versionInstalled; versionInstalled=$(versionFromPlugin "${pluginInstalled}")
-                local minVersion; minVersion=$(versionFromPlugin "${d}")
+                local minVersion="$pluginVersion"
+                if [ -z "$minVersion" ]; then
+                    minVersion=$(versionFromPlugin "${d}")
+                fi
                 if versionLT "${versionInstalled}" "${minVersion}"; then
                     echo "Upgrading bundled dependency $d ($minVersion > $versionInstalled)"
-                    download "$plugin" &
+                    download "$plugin" "$pluginVersion" &
                 else
                     echo "Skipping already bundled dependency $d ($minVersion <= $versionInstalled)"
                 fi
             else
-                download "$plugin" &
+                download "$plugin" "$pluginVersion" &
             fi
         fi
     done