Gitlab:当 git 在服务器上的 bash 脚本中拉取失败时,使 CI/CD 失败
Gitlab: Make the CI/CD failed when git pull failed in a bash script on server
我的部署脚本是一个非常简单的 Git 拉取。我有一个 bash 脚本可以 git 提取它,这是我源代码的一部分。问题是,如果 git 拉取由于任何原因失败,它仍然显示部署成功。
.git实验室-ci.yml:
stages:
- 'deploy'
deploy to staging:
stage: 'deploy'
script: '/home/myuser/scripts/deployment/deploy_staging.sh'
tags:
- staging
only:
- staging
deploy_staging.sh:
script=$(basename [=14=])
logger "$script: script executed"
cd $HOME/mydirectory
git fetch
git pull
composer update
这个问题在于,为了使作业失败,它会检查在您的案例中执行的命令的退出代码
脚本:'/home/myuser/scripts/deployment/deploy_staging.sh'
此命令的退出代码将是 'composer update'
的结果
由于脚本的退出代码是最近执行的命令的退出代码,在你的情况下
'composer update'
意思是,仅当命令 'composer update' 失败时,此作业才会失败,而忽略您之前命令的退出代码 'git pull'
要解决此问题,请在脚本的开头添加“set -e”。这将强制脚本通过在脚本中的命令失败时退出脚本来调整适当的退出代码
我的部署脚本是一个非常简单的 Git 拉取。我有一个 bash 脚本可以 git 提取它,这是我源代码的一部分。问题是,如果 git 拉取由于任何原因失败,它仍然显示部署成功。
.git实验室-ci.yml:
stages:
- 'deploy'
deploy to staging:
stage: 'deploy'
script: '/home/myuser/scripts/deployment/deploy_staging.sh'
tags:
- staging
only:
- staging
deploy_staging.sh:
script=$(basename [=14=])
logger "$script: script executed"
cd $HOME/mydirectory
git fetch
git pull
composer update
这个问题在于,为了使作业失败,它会检查在您的案例中执行的命令的退出代码
脚本:'/home/myuser/scripts/deployment/deploy_staging.sh'
此命令的退出代码将是 'composer update'
的结果由于脚本的退出代码是最近执行的命令的退出代码,在你的情况下 'composer update'
意思是,仅当命令 'composer update' 失败时,此作业才会失败,而忽略您之前命令的退出代码 'git pull'
要解决此问题,请在脚本的开头添加“set -e”。这将强制脚本通过在脚本中的命令失败时退出脚本来调整适当的退出代码