如何以安全的方式设置 GitLab 环境变量?

How to Setup GitLab Environment Variables in a safe way?

我不想将敏感凭证(如 API 密钥、密码等)放入我的分支机构。 为此,GitLab(和其他 CI/CD-Services)能够设置环境变量。它们将在部署过程中被注入到脚本中。

我知道 GitLab 有两种设置方法:

  1. 通过UI:ProjectSettingsCI/CDVariables
  2. 通过.gitlab-ci.yml

在我看来,第一种方法是安全的,因为 git 存储库中没有保存带有凭据的文件,但它也是更复杂的方法,因为我必须通过手动设置每个变量GitLab-GUI.

对于第二种方式,问题是 .gitlab-ci.yml 被保存到 gitlab 存储库中,因此凭据不安全。

问题: 有没有办法在文件中定义 ENV-Vars 并将其提供给 GitLab,而无需将它们放入分支? 或者有其他方法可以在 GitLab 中轻松安全地创建这些 ENV-Vars 吗?

Is there a way to define the ENV-Vars in a File?

是的,在您提到的 UI 设置中,您可以将变量类型指定为 variable(键:值)或 file(在键中将传递到秘密文件的路径值输入的内容)。

所以 文件变量 看起来就是您要查找的内容。

Readme and docs 为变量提供了很好的描述。我个人发现其他非常有用的选项:变量屏蔽和受保护状态。

谢谢 makozaki, 这是一个很好的提示,但有一些特殊要求:

首先转到您的项目⇒设置⇒CI/CD⇒变量并像这样添加它们:

Key 将变成一个文件名,您输入的值将作为该文件中的数据。

在 CI-Process 的 Job-Logs 中,它提供了新生成文件的完整路径...它看起来像这样: ENV_PRODUCTION: '/builds/yourProjectGroup/gatsby_netlifycms_starter.tmp/ENV_PRODUCTION',

Notice

you can't choose the easy way and name it .env.production to use it with dotenvBecause the Key-Field don't allow special-characters like .,

现在,当您获得带有所有配置值的 File 时,您可以轻松地在您的应用程序中实现它(例如使用 dotenv)。

对于我的 Gatsby 实现,它看起来像这样。

require("dotenv").config({
  path: process.env.ENV_PRODUCTION ? process.env.ENV_PRODUCTION : `.env.${process.env.NODE_ENV}`,
})
const config = require('gatsby-plugin-config').default;

这里发生了什么? dotenv.config() 正在检查您自己创建的 ENV_PRODUCTION 是否存在...如果是,它将被使用。否则它将使用通用的 .env.<yourNodeEnviroment> 一个。

因此,使用 ENV_PRODUCTION 中的上述给定值,您可以在您的应用程序中访问 FIRST_VALUE

这样可以很容易地为 运行 您的应用程序在本地计算机上创建一个 .env.development,并在生产环境中使用来自 Gitlab 的 ENV_PRODUCTION env。