如何让Web应用部署Bash脚本在git pull失败时终止并检查结果?
在Bash脚本中检查git pull执行结果并终止运行
嘿,要让你的部署脚本在git pull失败时立刻终止运行,其实在Bash里有几种简单且可靠的实现方式。核心思路是利用命令的退出状态码——在Unix/Linux系统中,每个命令执行完成后都会返回一个数字:0代表成功,非0值则代表执行失败。我们可以基于这个特性来做判断。
方法1:用set -e让脚本自动在命令失败时退出
这是最省心的方式,在脚本开头加上set -e,之后只要任何命令返回非0状态,脚本就会直接终止运行。
示例:
#!/bin/bash # 开启命令失败自动退出模式 set -e # 执行git fetch git fetch # 执行git pull——如果失败,脚本会自动终止 git pull # 后续步骤:编译文件 cd /path/to/candidate-folder # 假设你的编译命令是npm run build(可替换为实际编译命令) npm run build # 同步到生产文件夹 rsync -avz /path/to/candidate-folder/dist/ /path/to/production-folder/
注意事项:set -e会对所有命令生效,如果你有某些命令允许失败(比如某些非关键的检查),可以在这些命令后面加上|| true来忽略失败状态。
方法2:手动检查git pull的退出状态
如果你不想让整个脚本都启用set -e,可以单独对git pull的结果做判断,有两种常用写法:
写法A:用$?变量检查退出码
$?会保存上一条命令的退出状态码,我们可以用它来判断git pull是否成功:
#!/bin/bash git fetch # 执行git pull git pull # 检查退出状态码,如果非0则终止脚本 if [ $? -ne 0 ]; then echo "Error: git pull执行失败,终止部署" exit 1 fi # 后续编译、同步步骤... cd /path/to/candidate-folder npm run build rsync -avz /path/to/candidate-folder/dist/ /path/to/production-folder/
写法B:用||短路表达式(更简洁)
Bash里的||表示“前面的命令失败时,执行后面的命令”,这种写法更紧凑,也是Shell脚本中常用的方式:
#!/bin/bash git fetch # 执行git pull,失败则打印错误信息并退出 git pull || { echo "Error: git pull执行失败,终止部署"; exit 1; } # 后续步骤... cd /path/to/candidate-folder npm run build rsync -avz /path/to/candidate-folder/dist/ /path/to/production-folder/
额外建议:给关键步骤加日志
为了方便后续排查问题,你可以给每个步骤加上日志输出,这样如果脚本终止,能立刻定位到故障环节:
#!/bin/bash set -e echo "=== 开始执行部署脚本 ===" echo "1. 执行git fetch..." git fetch echo "git fetch执行成功" echo "2. 执行git pull..." git pull echo "git pull执行成功" echo "3. 编译候选发布文件夹..." cd /path/to/candidate-folder npm run build echo "编译完成" echo "4. 同步文件到生产文件夹..." rsync -avz /path/to/candidate-folder/dist/ /path/to/production-folder/ echo "同步完成,部署成功"
内容的提问来源于stack exchange,提问作者warch
相关产品推荐
相关产品推荐

