用于说明git重置的Bash脚本退出状态

用于说明git重置的Bash脚本退出状态,git,bash,amazon-web-services,amazon-elastic-beanstalk,exit-code,Git,Bash,Amazon Web Services,Amazon Elastic Beanstalk,Exit Code,我有一个用于部署AWS beanstalk应用程序的脚本。脚本的早期部分根据我部署的环境修改了一些文件: if [[ $enviro == qa ]] || [[ $enviro == staging ]]; then sed -i '' 's/'$app'.config/'$app'-'$enviro'.config/g' .ebextensions/0006_file.config git add .ebextensions/0006_file.config && g

我有一个用于部署AWS beanstalk应用程序的脚本。脚本的早期部分根据我部署的环境修改了一些文件:

if [[ $enviro == qa ]] || [[ $enviro == staging ]]; then
  sed -i '' 's/'$app'.config/'$app'-'$enviro'.config/g' .ebextensions/0006_file.config
  git add .ebextensions/0006_file.config && git commit -m " for deploy only - will be (soft) reset "
fi
我的脚本的最后一部分用以下内容还原了这一点:

if [[ $enviro == qa ]] || [[ $enviro == staging ]]; then
  git reset --soft HEAD~1
  git reset HEAD .ebextensions/0006_file.config
  git checkout .ebextensions/0006_file.config
fi
但是,在这两个块之间,我有实际的部署线:

eb deploy $app-$enviro --label $current_date-$current_user --timeout 30 -v
我想做的是编写一个if/then语句,如果“eb deploy”块失败且退出代码为1,则该语句将退出脚本,但也会执行git重置。如果脚本“eb deploy”块成功,I:

echo "Congratulations, you've deployed $branch to $enviro"
我不知道,但我可能想得太多了。我愿意接受建议。我的猜测是,我的第二个块必须有另一个[[]]来设置rc=$


想法

如果您有一些代码要在脚本退出时运行,即使它提前退出,也可以使用
trap
来执行

# this code will get run when the script exits, whether via `exit` or falling
# off the bottom of the script
trap '
    git reset --whatever
' EXIT

“陷阱”让我走上了正确的道路,但我需要添加一个函数来完成这个过程

function clean_up {
  if [[ $enviro == qa ]] || [[ $enviro == staging ]] || [[ $enviro == staging2 ]]; then
    git reset --soft HEAD~1
    git reset HEAD .ebextensions/0006_file.config
    git checkout .ebextensions/0006_file.config
  fi
}
fi
trap clean_up EXIT

这个git存储库是由正在部署的映像签出的还是eb的本地配置?它是eb的本地配置。那你为什么要签入git呢?@EtanReisner是aws/eb的一个相对noob这是我们最初建立环境时指出的方向。我们把它签入以便其他人可以归档。如果有更好的方法,我洗耳恭听。您对本地文件进行更改,在本地将其签入git(但不要推送它,这样它在任何其他存储库中都不可用),然后运行使用本地配置文件的工具,然后在完成所有更改后还原repo,这样一来,提交就不存在了(不再出现在分支机构的历史记录中)这是对的吗?谢谢,我会给它一个机会并报告回来。得到这个:陷阱:用法:陷阱[-lp][arg signal_spec…]我必须使用一个来修复它。
trap
的第一个参数是要运行的代码;如果你看我的答案,你会发现它是一个单一的多行字符串。你可以把任何东西放在那里,它都可以工作,但函数可能更干净。@MarkReed--是的,它肯定有帮助。我的名声还不到15岁,所以我不能推翻你的建议但这很有帮助。