GitLab CI如何将命令标准输出返回至调用代码?
问题解决:无法获取Ansible Playbook的返回码和输出
你遇到的报错是因为install_app.rc和install_app.stdout不是Bash环境下的有效变量——Ansible Playbook不会自动将执行结果存入这类命名的变量中,Bash会把它们当作未定义的命令处理,所以才会报"command not found"。
解决方法是手动捕获Playbook的执行输出和返回码,具体修改如下:
修改后的CI脚本
.setUpEnvironment: stage: provision script: - | cd ansible # 捕获playbook的输出到变量,同时记录返回码 playbook_output=$(ansible-playbook install_app.yml <...>) playbook_rc=$? # 输出返回码和标准输出 echo 'rc = ' $playbook_rc echo 'stdout = ' "$playbook_output" # 判断返回码非0时发送失败通知 if [ $playbook_rc -ne 0 ]; then # 这里替换成你的通知逻辑,比如调用通知API、发送邮件等 echo "部署失败!返回码:$playbook_rc,输出详情:$playbook_output" # 示例:curl -X POST https://your-notify-api.com -d "msg=部署失败,返回码$playbook_rc" fi allow_failure: true
关键说明
playbook_output=$(ansible-playbook ...):将Playbook的标准输出捕获到playbook_output变量中playbook_rc=$?:$?是Bash的特殊变量,存储上一条命令的返回码,这里用来保存Playbook的执行结果码- 用双引号包裹
"$playbook_output"可以保留输出中的换行和空格格式 - 在
if判断中根据返回码是否为0,执行对应的通知逻辑
内容的提问来源于stack exchange,提问作者that_startup_girl
相关产品推荐
相关产品推荐

