low*_*292 0 deployment ssh automated-tests continuous-deployment jenkins
我在 Jenkins 构建步骤中使用 here 标记通过 ssh 发送我的部署命令,不幸的是,即使 here 标记内的命令没有成功完成,构建也会通过:
ssh user@host <<EOF
cd /path/to/app
git pull
bower install
npm install
grunt build
cp -r /path/to/app/dist/* /path/to/dist/
forever restartall
exit
EOF
有没有更好的方法来解决这个问题?
您没有在“此处文档”中捕获任何错误代码。
最后一个命令是exit和没有退出代码,它将默认0为成功。
由于你的最后一个命令ssh是成功的,整个命令都被视为成功,而 build 是成功的。
解决这个问题的最简单方法:将所有命令链接起来,&&如下所示:
cd /path/to/app && git pull && bower install && npm install && grunt build && cp -r /path/to/app/dist/* /path/to/dist/ && forever restartall && exit
解决这个问题的最佳方法:编写一个正确的 shell 脚本,带有错误处理,然后执行它。如果你懒得处理每一行的错误,你可以启动脚本,set -e在任何单个错误时都会使 shell 脚本失败
编辑:
#!/bin/bash
appPath="/path/to/app"
distPath"/path/to/dist"
echo "My great deployment script"
echo "Deploying ${appPath} to ${distPath}
if [[ ! -w "${appPath}" ]]; then
echo "${appPath} is not writable, quitting"
exit 1
else
cd ${appPath} && git pull || { echo "Failed on 'git pull'"; exit 2; }
bower install || { echo "Failed on 'bower install'"; exit 3; }
npm install || { echo "Failed on 'npm install'"; exit 4; }
grunt build || { echo "Failed on 'grunt build'"; exit 5; }
if [[ -w "${distPath}" ]]; then
cp -r ${appPath}/dist/* ${distPath}/ || { echo "Failed on 'copy'"; exit 1 }
forever restartall || { echo "Failed on 'forever restartall'"; exit 6 }
echo "Deployment successful"
exit 0
fi
fi
Run Code Online (Sandbox Code Playgroud)
然后您执行它:(ssh user@host 'bash -s' < myfile.sh如果文件是本地文件)
或者如果您远程放置文件,则只需:ssh user@host '/path/to/remote/myfile.sh'
| 归档时间: |
|
| 查看次数: |
2248 次 |
| 最近记录: |