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

能否通过Terraform创建GitHub Actions变量?

使用Terraform管理GitHub Actions变量的解决方案

目前Terraform官方的GitHub Provider(hashicorp/github)暂未提供专门的资源来直接管理GitHub Actions的非机密变量(包括仓库级和环境级),仅支持管理机密密钥类资源(如github_actions_environment_secret)。针对这个需求,你可以通过以下两种方式实现:

方法1:通过local-exec调用GitHub CLI(gh)

借助GitHub CLI的variable set命令来创建或更新变量,需要确保运行Terraform的环境已安装gh工具,并通过GitHub Token完成认证。

示例:创建仓库级公共变量

resource "null_resource" "repo_public_var" {
  triggers = {
    var_name       = "BUILD_VERSION"
    var_value      = "1.0.0"
    repo_full_name = "${github_repository.my_app.owner}/${github_repository.my_app.name}"
  }

  provisioner "local-exec" {
    command = "gh variable set ${self.triggers.var_name} --repo ${self.triggers.repo_full_name} --body ${self.triggers.var_value}"
    environment = {
      GH_TOKEN = var.github_admin_token
    }
  }
}

示例:创建环境级公共变量

resource "null_resource" "env_public_var" {
  triggers = {
    var_name       = "DEPLOY_REGION"
    var_value      = "us-east-1"
    repo_full_name = "${github_repository.my_app.owner}/${github_repository.my_app.name}"
    env_name       = "production"
  }

  provisioner "local-exec" {
    command = "gh variable set ${self.triggers.var_name} --repo ${self.triggers.repo_full_name} --environment ${self.triggers.env_name} --body ${self.triggers.var_value}"
    environment = {
      GH_TOKEN = var.github_admin_token
    }
  }
}

方法2:通过http资源调用GitHub API

直接调用GitHub的Variables API来创建或更新变量,无需依赖外部CLI工具。

示例:创建环境级公共变量

resource "http" "env_public_var" {
  url = "https://api.github.com/repos/${github_repository.my_app.owner}/${github_repository.my_app.name}/environments/${var.deploy_env}/variables"

  method = "POST"
  headers = {
    Authorization = "token ${var.github_admin_token}"
    Accept        = "application/vnd.github+json"
  }

  body = jsonencode({
    name  = "DEPLOY_REGION"
    value = "us-east-1"
  })

  lifecycle {
    replace_triggered_by = [
      var.deploy_env,
      var.deploy_region_value,
      var.var_name
    ]
  }
}

示例:更新环境级公共变量

如果需要更新已存在的变量,使用PUT请求:

resource "http" "update_env_public_var" {
  url = "https://api.github.com/repos/${github_repository.my_app.owner}/${github_repository.my_app.name}/environments/${var.deploy_env}/variables/${var.var_name}"

  method = "PUT"
  headers = {
    Authorization = "token ${var.github_admin_token}"
    Accept        = "application/vnd.github+json"
  }

  body = jsonencode({
    value = var.updated_deploy_region_value
  })
}

注意事项

  • 无论使用哪种方式,GitHub Token需要具备足够权限:管理仓库变量需repo:admin权限,管理环境变量需repo:environment权限。
  • 使用local-exec时,需确保运行环境中gh工具已正确安装并完成认证(可通过GH_TOKEN环境变量传递令牌)。
  • 使用http资源时,需处理变量已存在的场景,避免重复创建报错,可通过lifecycle块的replace_triggered_by来触发更新。

内容的提问来源于stack exchange,提问作者Mohamed ELMASRY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:45:34