Сценарий оболочки не завершается ошибкой при вызове подпрограммы, которая не установлена - PullRequest
0 голосов
/ 06 мая 2019

У меня есть простой сценарий оболочки для установки плагинов Jenkins:

installPlugin() {
    {...}
}

  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" | tr '\n' ' ' )
    for plugin in $deps; do
      installPlugin "$plugin" 1 && changed=1
    done
  done

Я вызываю этот сценарий из файла Docker следующим образом:

RUN JENKINS_HOME=$JENKINS_HOME \
    http_proxy=$http_proxy \
    https_proxy=$https_proxy \
    $JENKINS_HOME/install_plugin.sh \
    ace-editor:1.1 \

Несмотря на то, что Процедура unzip не установлена ​​в Dockerfile, когда я запускаю docker build, вывод все еще УСПЕШНЫЙ, даже если unzip отсутствует.Я хотел бы завершить сборку, если следующий шаг завершится неудачей:

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" | tr '\n' ' ' )

Любая помощь очень ценится!

LE

Скрипт выдает следующее:

/var/jenkins/install_plugin.sh: line 62: unzip: command not found

 deps=

Тем не менее, сборка докера не завершится неудачей, даже если этот скрипт завершится неудачей:

Successfully built 54f5a5ec567d

1 Ответ

0 голосов
/ 08 мая 2019

Я закончил делать пустую проверку следующим образом:

 for f in ${plugin_dir}/*.hpi ; do

    manifestMf=$(unzip -p ${f} META-INF/MANIFEST.MF | tr -d '\r')
    if [ $manifestMf=="" ]; then
        echo "Invalid META-INF/MANIFEST inside $f"
        exit 1
    fi;

    #without optionals
    deps=$(echo $manifestMf | sed -e ':a;N;$!ba;s/\n //g' | grep -e "^Plugin-Dependencies: " | awk '{ print $2 }' | tr ',' '\n' | grep -v "resolution:=optional" | 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' | tr '\n' ' ' )
    for plugin in $deps; do
      installPlugin "$plugin" 1 && changed=1
    done
  done
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...