You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将GitLab CI中Terraform+OIDC配置迁移至OpenTofu?

GitLab CI/CD 从Terraform迁移到OpenTofu并保留OIDC认证的指南

核心迁移要点

  1. 替换Terraform CI模板为自定义OpenTofu作业(GitLab暂未提供官方OpenTofu基础模板)
  2. 完全复用原有OIDC认证配置(OIDC认证与基础设施工具无关,无需修改)
  3. 兼容现有Terraform配置文件与状态存储体系

完整.gitlab-ci.yml配置示例

include:
  - remote: 'https://gitlab.com/gitlab-com/gl-security/security-operations/infrastructure-security-public/oidc-modules/-/raw/3.1.2/templates/gcp_auth.yaml'

variables:
  WI_POOL_PROVIDER: //iam.googleapis.com/projects/$GCP_PROJECT_NUMBER/locations/global/workloadIdentityPools/$WORKLOAD_IDENTITY_POOL/providers/$WORKLOAD_IDENTITY_POOL_PROVIDER
  SERVICE_ACCOUNT: $SERVICE_ACCOUNT
  TOFU_ROOT: infrastructure  # 可替换原TF_ROOT,保持兼容也可保留TF_ROOT
  TF_STATE_NAME: tfstate  # OpenTofu兼容Terraform状态文件,无需修改

stages:
  - validate
  - test
  - build
  - deploy

# 自定义OpenTofu基础作业模板
.opentofu:base:
  image: opentofu/opentofu:1.6.0  # 指定稳定版本替代latest,避免环境波动
  before_script:
    - cd $TOFU_ROOT
    - tofu init  # 若使用GitLab状态存储或自定义后端,可添加对应backend-config参数

.opentofu:validate:
  extends: .opentofu:base
  script:
    - tofu validate
    - tofu fmt -check -recursive  # 检查代码格式合规性

.opentofu:build:
  extends: .opentofu:base
  script:
    - tofu plan -out=tfplan
  artifacts:
    paths:
      - $TOFU_ROOT/tfplan
    expire_in: 1 hour  # 限制计划文件有效期,降低安全风险

.opentofu:deploy:
  extends: .opentofu:base
  script:
    - tofu apply tfplan

# 流水线作业定义
validate:
  extends: .opentofu:validate
  needs: []

build:
  extends:
    - .google-oidc:auth
    - .opentofu:build

deploy:
  extends:
    - .google-oidc:auth
    - .opentofu:deploy
  dependencies:
    - build
  when: manual  # 建议添加手动确认,避免误触发部署

关键迁移技巧

  • 配置零修改:OpenTofu完全兼容Terraform的.tf配置文件,现有基础设施代码无需任何调整,直接替换工具即可。
  • 状态无缝迁移:如果之前使用GitLab、GCS或其他存储服务保存Terraform状态,OpenTofu可以直接复用,状态文件格式完全一致,仅需确保backend.tf配置正确。
  • 凭证自动识别:OIDC认证生成的GCP凭证会通过环境变量注入,OpenTofu和Terraform一样会自动读取这些凭证,无需额外配置。
  • 版本锁定优化:建议将配置文件中的terraform块替换为opentofu块,明确工具依赖:
    opentofu {
      required_providers {
        google = {
          source  = "hashicorp/google"
          version = "~> 5.0"
        }
      }
    }
    
    若暂时不想修改,OpenTofu也兼容原terraform块。
  • 镜像稳定性:避免使用latest标签的OpenTofu镜像,指定具体版本(如1.6.0)可确保流水线执行环境稳定一致。

内容的提问来源于stack exchange,提问作者Jaison K J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:17:03