Jenkins no ejecuta correctamente el script bash

Estoy intentando ejecutar un script de compilation de Jenkins que construya e implemente un website (el script es multipropósito, pero se ejecuta ejecutando bash ./scripts/deploy.sh -ssh ):

 #!/usr/bin/env bash cd .. rm -rf _site/ if [ "$1" = "-ssh" ]; then git clone git@github.com:RIT-EVT/RIT-EVT.github.io.git --branch master --depth 1 _site else git clone https://github.com/RIT-EVT/RIT-EVT.github.io.git --branch master --depth 1 _site fi LIVE_VERSION_BUILD=`cat _site/version` LIVE_VERSION=${LIVE_VERSION_BUILD%.*} LIVE_BUILD=${LIVE_VERSION_BUILD##*.} PACKAGE_VERSION=`sed -nE 's/^\s*"version": "(.*?)",$/\1/p' package.json` if [[ "$LIVE_VERSION" == "$PACKAGE_VERSION" ]]; then ((LIVE_BUILD++)) else LIVE_VERSION=${PACKAGE_VERSION} LIVE_BUILD=0 fi rm -rf _site/* jekyll build echo "$LIVE_VERSION.$LIVE_BUILD" > _site/version cd _site/ git add -A git commit -m "v$LIVE_VERSION.$LIVE_BUILD $(date)" git push cd .. 

El problema que tengo es que bash no ejecuta el script como se esperaba (probado contra ejecutar el script en mi computadora con la misma versión de bash). Sigo recibiendo el siguiente resultado, y luego el script simplemente falla (tuve que solucionar el problema anterior utilizando HTTPS e ingresando el nombre de usuario y la contraseña en la url del file git: https: // username: password@github.com/. . ):

 ... Cloning into '_site'... ++ cat _site/version + LIVE_VERSION_BUILD=0.0.9.0 + LIVE_VERSION=0.0.9 + LIVE_BUILD=0 ++ sed -nE 's/^\s*"version": "(.*?)",$/\1/p' ./package.json + PACKAGE_VERSION=0.0.9 + [[ 0.0.9 == \0\.\0\.\9 ]] + (( LIVE_BUILD++ )) Build step 'Execute shell' marked build as failure Finished: FAILURE 

Probablemente, el problema se deba al ejecutar el script con el set -e habilitado :

  • Su command (( LIVE_BUILD++ )) evaluará a 0 si LIVE_BUILD es igual a 0
  • El operador (( [...] )) devuelve el estado 1 para ese caso.
  • Y si set -e está activo, esto hará que el shell aborte inmediatamente.

Solución :

  • agregue set +e al comienzo de su script, o
  • mejor: use LIVE_BUILD=$(( LIVE_BUILD + 1)) – es más legible y no fallará.