GitLab流水线为何仅执行第一个Terraform组件任务?
组件引用的命名重复
要是你在deploy.yml里引用两个Terraform组件时,没给它们生成唯一的job名称,就会触发GitLab CI的job覆盖机制。比如组件模板里的job名是固定的terraform-deploy,你引用时没通过变量(比如ENV=alpha/ENV=beta)把job名改成deploy-alpha和deploy-beta,两个引用最终会生成同名job,后定义的会被前一个覆盖(或者反过来,看你写的顺序),导致其中一个任务消失。YAML语法写错了
修改deploy.yml时很容易犯缩进错误,比如第二个组件的配置缩进少了/多了,被当成第一个组件的子配置,而不是独立的job。GitLab会直接忽略语法错误的部分,自然不会显示beta任务。去项目的CI/CD菜单里找CI Lint工具,把deploy.yml粘进去校验一下就能发现问题。Terraform组件模板没做多实例支持
要是你的Terraform组件模板本身是硬编码的,比如job名、工作目录、Terraform状态文件路径都是固定值,没留变量让你传入环境标识(alpha/beta),那两次引用组件就会生成完全一样的job配置,GitLab会自动合并重复项,只留一个任务。条件规则把beta任务过滤掉了
检查组件模板或者deploy.yml里的rules、only/except配置,说不定beta任务的触发条件没满足。比如规则里写了只在特定分支跑,或者需要某个变量存在,而你跑流水线时没满足这些条件,GitLab就会跳过beta任务。Include配置有问题
主流水线通过include引入deploy.yml时,要是deploy.yml里引用组件的方式不对,比如用extends但没传对差异化参数,或者组件的路径写错了,都会导致第二个组件的配置没被正确加载,自然看不到任务。资源冲突被抑制
要是两个组件用了相同的Terraform状态文件路径、缓存key或者artifacts名称,GitLab可能会判定这是重复任务,自动跳过其中一个。这种情况得给每个组件的资源路径加上环境标识做隔离。
内容的提问来源于stack exchange,提问作者Byob

