Gitlab CI中Terragrunt命令被忽略无报错问题求助
GitLab CI中Terragrunt命令被忽略、错误命令不报错的问题解决
问题根源
你的.gitlab-ci.yml脚本存在语法错误:aws sts get-caller-identity << FOR TESTING MY SANITY这行使用了Here文档(heredoc)的起始标记,但未添加对应的结束标记。
Shell会把后续所有行(包括cd、export、terragrunt命令)都当成该Here文档的输入内容,根本不会执行这些命令。而aws sts get-caller-identity本身不需要输入,正常执行后返回退出码0,GitLab CI就直接判定Job成功,自然看不到Terragrunt的任何输出或错误。
修复方案
方案1:替换成注释(推荐,因为你只是加备注)
把Here文档标记换成#注释,脚本就能正常执行所有命令:
plan: stage: plan_dev parallel: matrix: - WORKLOAD_NAME: - workload-test script: | aws sts get-caller-identity # FOR TESTING MY SANITY cd ./accounts/workload_accounts/$WORKLOAD_NAME/non_prod export TF_LOG=TRACE terragrunt run-all foo-fail # NOTICE TYPO
方案2:正确使用Here文档(如果确实需要)
如果真的要用到Here文档,必须保证起始标记和结束标记完全一致,且结束标记单独占一行、无缩进:
plan: stage: plan_dev parallel: matrix: - WORKLOAD_NAME: - workload-test script: | aws sts get-caller-identity << FOR TESTING MY SANITY # 这里可填写命令需要的输入内容 FOR TESTING MY SANITY cd ./accounts/workload_accounts/$WORKLOAD_NAME/non_prod export TF_LOG=TRACE terragrunt run-all foo-fail # NOTICE TYPO
验证效果
修复后,所有命令都会按顺序执行。错误的terragrunt run-all foo-fail会输出对应的错误信息,并且因为命令执行失败返回非0退出码,GitLab CI会正确标记Job为失败。
内容的提问来源于stack exchange,提问作者Nicollas Braga
相关产品推荐
相关产品推荐

