如何以安全的方式设置 GitLab 环境变量?
How to Setup GitLab Environment Variables in a safe way?
我不想将敏感凭证(如 API 密钥、密码等)放入我的分支机构。
为此,GitLab(和其他 CI/CD-Services)能够设置环境变量。它们将在部署过程中被注入到脚本中。
我知道 GitLab 有两种设置方法:
- 通过UI:
Project
⇒Settings
⇒CI/CD
⇒Variables
- 通过
.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
(在键中将传递到秘密文件的路径值输入的内容)。
所以 文件变量 看起来就是您要查找的内容。
谢谢 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 dotenv
Because 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。
我不想将敏感凭证(如 API 密钥、密码等)放入我的分支机构。 为此,GitLab(和其他 CI/CD-Services)能够设置环境变量。它们将在部署过程中被注入到脚本中。
我知道 GitLab 有两种设置方法:
- 通过UI:
Project
⇒Settings
⇒CI/CD
⇒Variables
- 通过
.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
(在键中将传递到秘密文件的路径值输入的内容)。
所以 文件变量 看起来就是您要查找的内容。
谢谢 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 withdotenv
Because 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。