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

通过GitLab CI更新Vault中的Spring Boot配置密钥

用GitLab CI自动更新Vault中存储的Spring Boot配置(JSON格式)

前置准备

  • 给GitLab Runner分配Vault权限:创建一个Vault policy,允许更新指定的KV存储路径,示例policy:
path "secret/data/spring-boot/configs/*" {
  capabilities = ["create", "update", "read"]
}
  • 在GitLab项目的CI/CD变量中配置:
    • VAULT_ADDR:Vault服务器地址
    • VAULT_TOKEN:拥有上述policy权限的令牌(推荐用AppRole认证替代静态令牌,更安全)

GitLab CI Job实现

直接用Vault官方镜像+开源工具完成yaml转json和Vault更新,比Python脚本更轻量化且适配场景:

stages:
  - update-vault-config

update-vault-spring-config:
  stage: update-vault-config
  image: hashicorp/vault:latest
  before_script:
    # 安装yaml转json工具yq和json处理工具jq
    - apk add --no-cache yq jq
    # 登录Vault(如果用AppRole,替换下面的登录命令)
    - vault login $VAULT_TOKEN
  script:
    # 1. 将本地application.yaml转成标准JSON格式
    - yq -o json application.yaml > config.json
    # 2. 将JSON内容转为单行格式,适配Vault KV存储的data字段要求
    - CONFIG_CONTENT=$(jq -c '.' config.json)
    # 3. 推送更新到Vault的指定路径(这里示例是生产环境配置路径)
    - vault kv put secret/spring-boot/configs/prod data="$CONFIG_CONTENT"
  only:
    - main # 仅在主分支代码变更时触发更新

AppRole认证替代静态令牌(更安全)

如果不想用静态VAULT_TOKEN,改用AppRole认证的话,修改before_script部分:

- apk add --no-cache yq jq
# 通过AppRole获取临时令牌
- vault write auth/approle/login role_id=$VAULT_ROLE_ID secret_id=$VAULT_SECRET_ID -format=json | jq -r '.auth.client_token' > vault-token
- export VAULT_TOKEN=$(cat vault-token)

同时在GitLab变量中添加VAULT_ROLE_ID和VAULT_SECRET_ID,并设置为保护+掩码变量。

关键注意事项

  • 确认GitLab Runner所在网络能访问Vault服务器,端口开放
  • 如果用Vault KV v1版本,把vault kv put改成vault write
  • 若只需更新部分配置字段,用vault kv patch命令,配合jq提取特定字段,比如:
    - DB_CONFIG=$(jq -c '.spring.datasource' config.json)
    - vault kv patch secret/spring-boot/configs/prod data="$DB_CONFIG"
    
  • 所有Vault相关变量必须设为掩码变量,避免在CI日志中泄露敏感信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:46:21