123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #!/bin/bash -eu
- # compare if version1 < version2
- versionLT() {
- local v1; v1=$(echo "$1" | cut -d '-' -f 1 )
- local q1; q1=$(echo "$1" | cut -s -d '-' -f 2- )
- local v2; v2=$(echo "$2" | cut -d '-' -f 1 )
- local q2; q2=$(echo "$2" | cut -s -d '-' -f 2- )
- if [ "$v1" = "$v2" ]; then
- if [ "$q1" = "$q2" ]; then
- return 1
- else
- if [ -z "$q1" ]; then
- return 1
- else
- if [ -z "$q2" ]; then
- return 0
- else
- [ "$q1" = "$(echo -e "$q1\n$q2" | sort -V | head -n1)" ]
- fi
- fi
- fi
- else
- [ "$v1" = "$(echo -e "$v1\n$v2" | sort -V | head -n1)" ]
- fi
- }
- # returns a plugin version from a plugin archive
- get_plugin_version() {
- local archive; archive=$1
- local version; version=$(unzip -p "$archive" META-INF/MANIFEST.MF | grep "^Plugin-Version: " | sed -e 's#^Plugin-Version: ##')
- version=${version%%[[:space:]]}
- echo "$version"
- }
- # Copy files from /usr/share/jenkins/ref into $JENKINS_HOME
- # So the initial JENKINS-HOME is set with expected content.
- # Don't override, as this is just a reference setup, and use from UI
- # can then change this, upgrade plugins, etc.
- copy_reference_file() {
- f="${1%/}"
- b="${f%.override}"
- rel="${b:23}"
- version_marker="${rel}.version_from_image"
- dir=$(dirname "${b}")
- local action;
- local reason;
- local container_version;
- local image_version;
- local marker_version;
- local log; log=false
- if [[ ${rel} == plugins/*.jpi ]]; then
- container_version=$(get_plugin_version "$JENKINS_HOME/${rel}")
- image_version=$(get_plugin_version "${f}")
- if [[ -e $JENKINS_HOME/${version_marker} ]]; then
- marker_version=$(cat "$JENKINS_HOME/${version_marker}")
- if versionLT "$marker_version" "$container_version"; then
- action="SKIPPED"
- reason="Installed version ($container_version) has been manually upgraded from initial version ($marker_version)"
- log=true
- else
- if [[ "$image_version" == "$container_version" ]]; then
- action="SKIPPED"
- reason="Version from image is the same as the installed version $image_version"
- else
- if versionLT "$image_version" "$container_version"; then
- action="SKIPPED"
- log=true
- reason="Image version ($image_version) is older than installed version ($container_version)"
- else
- action="UPGRADED"
- log=true
- reason="Image version ($image_version) is newer than installed version ($container_version)"
- fi
- fi
- fi
- else
- if [[ -n "$TRY_UPGRADE_IF_NO_MARKER" ]]; then
- if [[ "$image_version" == "$container_version" ]]; then
- action="SKIPPED"
- reason="Version from image is the same as the installed version $image_version (no marker found)"
- # Add marker for next time
- echo "$image_version" > "$JENKINS_HOME/${version_marker}"
- else
- if versionLT "$image_version" "$container_version"; then
- action="SKIPPED"
- log=true
- reason="Image version ($image_version) is older than installed version ($container_version) (no marker found)"
- else
- action="UPGRADED"
- log=true
- reason="Image version ($image_version) is newer than installed version ($container_version) (no marker found)"
- fi
- fi
- fi
- fi
- if [[ ! -e $JENKINS_HOME/${rel} || "$action" == "UPGRADED" || $f = *.override ]]; then
- action=${action:-"INSTALLED"}
- log=true
- mkdir -p "$JENKINS_HOME/${dir:23}"
- cp -r "${f}" "$JENKINS_HOME/${rel}";
- # pin plugins on initial copy
- touch "$JENKINS_HOME/${rel}.pinned"
- echo "$image_version" > "$JENKINS_HOME/${version_marker}"
- reason=${reason:-$image_version}
- else
- action=${action:-"SKIPPED"}
- fi
- else
- if [[ ! -e $JENKINS_HOME/${rel} || $f = *.override ]]
- then
- action="INSTALLED"
- log=true
- mkdir -p "$JENKINS_HOME/${dir:23}"
- cp -r "${f}" "$JENKINS_HOME/${rel}";
- else
- action="SKIPPED"
- fi
- fi
- if [[ -n "$VERBOSE" || "$log" == "true" ]]; then
- if [ -z "$reason" ]; then
- echo "$action $rel" >> "$COPY_REFERENCE_FILE_LOG"
- else
- echo "$action $rel : $reason" >> "$COPY_REFERENCE_FILE_LOG"
- fi
- fi
- }
|