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

CI/CD流水线中如何编码GitLab Runner注册令牌

解决GitLab Runner注册令牌明文显示的问题

要避免CI/CD流水线中明文显示GitLab Runner注册令牌,核心思路是将令牌存储在Kubernetes Secret中,再通过Helm Chart引用该Secret,而非直接在values.yml中明文配置。以下是具体实现步骤:

1. 用Terraform创建存储令牌的Kubernetes Secret

在main.tf中添加kubernetes_secret资源,将令牌作为敏感数据存入Secret:

# 创建存储GitLab Runner注册令牌的Secret
resource "kubernetes_secret" "gitlab_runner_token" {
  metadata {
    name      = "gitlab-runner-reg-token"
    namespace = "a-{{tenant_project}}-{{env}}"
  }
  type = "Opaque"
  data = {
    # 自定义key,后续需与Helm配置对应
    "runner-token" = var.cicd_token
  }
}

同时在variables.tf中将cicd_token标记为敏感变量,防止Terraform日志泄露:

variable "cicd_token" {
  type      = string
  sensitive = true
}

2. 修改GitLab Runner的Helm配置

方式一:直接修改values.yml

删除原有明文配置的runnerRegistrationToken,替换为引用Secret的配置:

gitlabUrl: "https://gitlab.i.ca/"
# 引用已创建的Secret
existingSecret: "gitlab-runner-reg-token"
registrationTokenKey: "runner-token" # 对应Secret中的key
image: "virtual.artifactory.i.ca/gitlab/gitlab-runner:alpine-v15.2.1"
rbac:
  create: true
# 其余原有配置保持不变...

方式二:在Terraform中覆盖values(无需修改values.yml)

如果不想改动原values.yml,可在helm_release资源中通过额外values块覆盖配置:

resource "helm_release" "runner_pod" {
  name       = "runner-test"
  namespace  = "a-{{tenant_project}}-{{env}}"
  repository = "https://charts.gitlab.io"
  chart      = "gitlab-runner"
  version    = "0.39.0"

  values = [
    file("./values.yml"),
    yamlencode({
      existingSecret        = kubernetes_secret.gitlab_runner_token.metadata[0].name
      registrationTokenKey  = "runner-token"
      runnerRegistrationToken = null # 清空原有明文配置
    })
  ]
  depends_on = [kubernetes_secret.auth_unified_ar, kubernetes_secret.gitlab_runner_token]
}

3. 验证效果

部署后,GitLab Runner会从Kubernetes Secret中读取注册令牌,CI/CD流水线日志、Terraform执行日志中都不会再明文显示令牌内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:39:23