如何在GitLab CI中导入外部yaml文件并作为环境变量使用
将rest_config.yaml配置导入GitLab CI环境变量的操作方法
一共两种常用实现方案,根据配置的敏感程度选择即可。
方案1:直接读取仓库内已有的rest_config.yaml注入
适合rest_config.yaml已经提交到代码仓库、配置项不含高敏感信息的场景。
- 首先确认流水线使用的镜像里有
yq工具(专门解析yaml的命令行工具,绝大多数公共GitLab Runner默认预装),如果没有就在job的前置步骤里加对应安装命令即可。 - 在对应job的执行阶段读取yaml字段,导出为流水线可识别的环境变量即可。
示例.gitlab-ci.yaml配置:
stages: - run execute_biz: stage: run image: alpine:latest before_script: # alpine镜像安装yq的命令,debian/ubuntu系替换为apt install -y yq即可 - apk add --no-cache yq # 逐行读取配置项导出为环境变量 - export REST_HOST=$(yq '.host' rest_config.yaml) - export REST_API_KEY=$(yq '.apiKey' rest_config.yaml) - export REST_SECRET_KEY=$(yq '.secretKey' rest_config.yaml) script: # 后续脚本里直接调用上述三个环境变量即可,注意生产环境不要打印secretKey这类敏感值 - echo "当前请求目标地址:$REST_HOST" # 这里写你的业务执行命令
注意:如果配置里包含secretKey这类敏感凭据,不要把rest_config.yaml直接提交到公开仓库,否则会造成凭据泄露,这种场景优先使用下面的方案2。
方案2:敏感配置存GitLab内置CI变量,运行时同步生成配置文件(生产推荐)
这个方案不会把敏感配置存在代码仓库里,安全性更高,同时兼容「读环境变量」和「读rest_config.yaml文件」两种业务逻辑。
- 打开GitLab项目页面,进入「设置」-「CI/CD」-「变量」板块,新增三个变量:
REST_HOST、REST_API_KEY、REST_SECRET_KEY,分别填入对应的值,勾选「掩码变量」「受保护变量」选项,避免变量值在流水线日志里意外泄露。 - 在流水线任务执行前,用内置的CI变量动态生成rest_config.yaml文件,此时三个配置项本身已经是流水线全局可用的环境变量,不需要额外做导入操作。
示例.gitlab-ci.yaml配置:
stages: - deploy deploy_job: stage: deploy image: alpine:latest before_script: - apk add --no-cache yq # 动态生成rest_config.yaml,供需要直接读配置文件的业务脚本使用 - yq -n ".host = \"$REST_HOST\" | .apiKey = \"$REST_API_KEY\" | .secretKey = \"$REST_SECRET_KEY\"" > rest_config.yaml script: # 既可以直接调用环境变量,也可以让业务脚本直接读取刚生成的rest_config.yaml,不需要改原有业务代码 - echo "配置加载完成,开始执行任务" - 你的业务执行命令
内容的提问来源于stack exchange,提问作者Siddharth Mishra
相关产品推荐
相关产品推荐

