Jenkins没有正确运行bash脚本

时间:2017-03-07 01:30:00

标签: git bash jenkins ssh

我正在尝试从Jenkins执行构建和部署网站的构建脚本(该脚本是多用途的,但它是通过运行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 ..

我遇到的问题是bash没有按预期执行脚本(针对在我的计算机上使用相同版本的bash运行脚本进行了测试)。我一直收到以下输出,然后脚本失败了(我不得不通过使用HTTPS并在git repo url中输入用户名和密码解决上述问题: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

1 个答案:

答案 0 :(得分:1)

问题可能是由于 set -e已启用运行脚本引起的:

  • 如果(( LIVE_BUILD++ ))等于0
  • ,您的命令LIVE_BUILD将评估为0
  • (( [...] ))运算符会为该情况返回状态1
  • 如果set -e处于活动状态,则会使shell立即中止。

<强>解决方案

  • 在脚本的开头添加set +e,或
  • 更好:使用LIVE_BUILD=$(( LIVE_BUILD + 1)) - 它更具可读性,不会失败。