我正在尝试从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
答案 0 :(得分:1)
问题可能是由于 set -e
已启用运行脚本引起的:
(( LIVE_BUILD++ ))
等于0
LIVE_BUILD
将评估为0
(( [...] ))
运算符会为该情况返回状态1
。set -e
处于活动状态,则会使shell立即中止。<强>解决方案强>:
set +e
,或LIVE_BUILD=$(( LIVE_BUILD + 1))
- 它更具可读性,不会失败。