|
1 | | -#! /bin/bash |
| 1 | +#! /bin/bash -e |
2 | 2 |
|
3 | | -set -e |
4 | | - |
5 | | -# compare if version1 < version2 |
6 | | -versionLT() { |
7 | | - [ "$1" = "$2" ] && return 1 || [ "$1" = "`echo -e "$1\n$2" | sort -V | head -n1`" ] |
8 | | -} |
9 | | - |
10 | | -# returns a plugin version from a plugin archive |
11 | | -get_plugin_version() { |
12 | | - local archive; archive=$1 |
13 | | - local version; version=$(unzip -p $archive META-INF/MANIFEST.MF | grep "^Plugin-Version: " | sed -e 's#^Plugin-Version: ##') |
14 | | - version=${version%%[[:space:]]} |
15 | | - echo $version |
16 | | -} |
17 | | - |
18 | | -# Copy files from /usr/share/jenkins/ref into $JENKINS_HOME |
19 | | -# So the initial JENKINS-HOME is set with expected content. |
20 | | -# Don't override, as this is just a reference setup, and use from UI |
21 | | -# can then change this, upgrade plugins, etc. |
22 | | -copy_reference_file() { |
23 | | - f="${1%/}" |
24 | | - b="${f%.override}" |
25 | | - rel="${b:23}" |
26 | | - version_marker="${rel}.version_from_image" |
27 | | - dir=$(dirname "${b}") |
28 | | - local action; |
29 | | - local reason; |
30 | | - local container_version; |
31 | | - local image_version; |
32 | | - local marker_version; |
33 | | - local log; log=false |
34 | | - if [[ ${rel} == plugins/*.jpi ]]; then |
35 | | - container_version=$(get_plugin_version $JENKINS_HOME/${rel}) |
36 | | - image_version=$(get_plugin_version ${f}) |
37 | | - if [[ -e $JENKINS_HOME/${version_marker} ]]; then |
38 | | - marker_version=$(cat $JENKINS_HOME/${version_marker}) |
39 | | - if versionLT $marker_version $container_version; then |
40 | | - action="SKIPPED" |
41 | | - reason="Installed version ($container_version) has been manually upgraded from initial version ($marker_version)" |
42 | | - log=true |
43 | | - else |
44 | | - if [[ "$image_version" == "$container_version" ]]; then |
45 | | - action="SKIPPED" |
46 | | - reason="Version from image is the same as the installed version $image_version" |
47 | | - else |
48 | | - if versionLT $image_version $container_version; then |
49 | | - action="SKIPPED" |
50 | | - log=true |
51 | | - reason="Image version ($image_version) is older than installed version ($container_version)" |
52 | | - else |
53 | | - action="UPGRADED" |
54 | | - log=true |
55 | | - reason="Image version ($image_version) is newer than installed version ($container_version)" |
56 | | - fi |
57 | | - fi |
58 | | - fi |
59 | | - else |
60 | | - if [[ -n "$TRY_UPGRADE_IF_NO_MARKER" ]]; then |
61 | | - if [[ "$image_version" == "$container_version" ]]; then |
62 | | - action="SKIPPED" |
63 | | - reason="Version from image is the same as the installed version $image_version (no marker found)" |
64 | | - # Add marker for next time |
65 | | - echo $image_version > $JENKINS_HOME/${version_marker} |
66 | | - else |
67 | | - if versionLT $image_version $container_version; then |
68 | | - action="SKIPPED" |
69 | | - log=true |
70 | | - reason="Image version ($image_version) is older than installed version ($container_version) (no marker found)" |
71 | | - else |
72 | | - action="UPGRADED" |
73 | | - log=true |
74 | | - reason="Image version ($image_version) is newer than installed version ($container_version) (no marker found)" |
75 | | - fi |
76 | | - fi |
77 | | - fi |
78 | | - fi |
79 | | - if [[ ! -e $JENKINS_HOME/${rel} || "$action" == "UPGRADED" || $f = *.override ]]; then |
80 | | - action=${action:-"INSTALLED"} |
81 | | - log=true |
82 | | - mkdir -p "$JENKINS_HOME/${dir:23}" |
83 | | - cp -r "${f}" "$JENKINS_HOME/${rel}"; |
84 | | - # pin plugins on initial copy |
85 | | - touch "$JENKINS_HOME/${rel}.pinned" |
86 | | - echo $image_version > $JENKINS_HOME/${version_marker} |
87 | | - reason=${reason:-$image_version} |
88 | | - else |
89 | | - action=${action:-"SKIPPED"} |
90 | | - fi |
91 | | - else |
92 | | - if [[ ! -e $JENKINS_HOME/${rel} || $f = *.override ]] |
93 | | - then |
94 | | - action="INSTALLED" |
95 | | - log=true |
96 | | - mkdir -p "$JENKINS_HOME/${dir:23}" |
97 | | - cp -r "${f}" "$JENKINS_HOME/${rel}"; |
98 | | - else |
99 | | - action="SKIPPED" |
100 | | - fi |
101 | | - fi |
102 | | - if [[ -n "$VERBOSE" || "$log" == "true" ]]; then |
103 | | - if [ -z "$reason" ]; then |
104 | | - echo "$action $rel" >> "$COPY_REFERENCE_FILE_LOG" |
105 | | - else |
106 | | - echo "$action $rel : $reason" >> "$COPY_REFERENCE_FILE_LOG" |
107 | | - fi |
108 | | - fi |
109 | | -} |
110 | 3 | : ${JENKINS_HOME:="/var/jenkins_home"} |
111 | | -export -f versionLT |
112 | | -export -f get_plugin_version |
113 | | -export -f copy_reference_file |
114 | 4 | touch "${COPY_REFERENCE_FILE_LOG}" || (echo "Can not write to ${COPY_REFERENCE_FILE_LOG}. Wrong volume permissions?" && exit 1) |
115 | 5 | echo "--- Copying files at $(date)" >> "$COPY_REFERENCE_FILE_LOG" |
116 | | -find /usr/share/jenkins/ref/ -type f -exec bash -c "copy_reference_file '{}'" \; |
| 6 | +find /usr/share/jenkins/ref/ -type f -exec bash -c ". /usr/local/bin/jenkins-support; copy_reference_file '{}'" \; |
117 | 7 |
|
118 | 8 | # if `docker run` first argument start with `--` the user is passing jenkins launcher arguments |
119 | 9 | if [[ $# -lt 1 ]] || [[ "$1" == "--"* ]]; then |
|
0 commit comments