2017-03-07 57 views
0

我试图从詹金斯是构建并部署一个网站(脚本是多功能的,但它是通过运行bash ./scripts/deploy.sh -ssh执行)执行构建脚本:詹金斯没有运行bash脚本正确

#!/usr/bin/env bash 

cd .. 
rm -rf _site/ 
if [ "$1" = "-ssh" ]; then 
    git clone [email protected]: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并输入在混帐回购协议的URL的用户名和密码来解决上述问题:https://username:[email protected]/..):

... 
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

问题可能是由与set -e运行该脚本能引起

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

解决方案

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

我明白了。所以'[[0.0.9 == \ 0 \。\ 0 \。\ 9]]'不是不寻常的行为?我希望它看起来像'[[0.0.9 == 0.0.9]]'。它看起来是错误的,但是如果我改变脚本以使用'set + e'并将((LIVE_BUILD ++))更改为您的建议,它看起来像预期的那样运行。 – wheeler

+0

不,这并不罕见(我想在调试输出中加入反斜杠是为了强调点不被认为是正则表达式的一部分)。 –