Ruby on rails 带有gitlab CI/CD的Rails.env
Rails项目在通过gitlab CI时遇到环境变量问题。目前,我正在使用dotenv gem来存储项目的凭据。此外,我还在gitlab CI环境中分配了环境变量。例如,database.yml:Ruby on rails 带有gitlab CI/CD的Rails.env,ruby-on-rails,gitlab,environment-variables,gitlab-ci,credentials,Ruby On Rails,Gitlab,Environment Variables,Gitlab Ci,Credentials,Rails项目在通过gitlab CI时遇到环境变量问题。目前,我正在使用dotenv gem来存储项目的凭据。此外,我还在gitlab CI环境中分配了环境变量。例如,database.yml: host: <%= ENV['DATABASE_HOST'] %> gitlab CI变量: DATABASE_HOST=somehost 我将.env文件放在.gitignore中,猜测Rails将使用gitlab CI中的变量。但获取对数据库的访问错误。找到了一种方法,按照dote
host: <%= ENV['DATABASE_HOST'] %>
gitlab CI变量:
DATABASE_HOST=somehost
我将.env文件放在.gitignore中,猜测Rails将使用gitlab CI中的变量。但获取对数据库的访问错误。找到了一种方法,按照dotenv gem的说明创建本地.env文件和共享文件。然后将本地文件放入.gitignore中,并将具有gitlab CI/CD凭据的共享文件推送到存储库中
但难以理解这种方法有多安全?一般来说,在Rails项目和gitlab CI/CD中使用环境变量/凭据的最佳实践是什么?我通常会尽量避免使用dotenv for CI,因为这可能会增加安装的开销。您可以仅针对某些环境有条件地加载dotenv,但将其从CI/CD中排除。这可以使用自定义ENV变量完成,如下所示:
Dotenv::Railtie.load unless ENV['GITLAB_CI']
并在Gitlab环境中设置它,如Gitlab\u CI=true
关于您的原始问题,如果您真的想要一个.env
文件,您可以按照本文答案中的建议进行操作,出于文档原因,我也将它们发布在这里:
设置\u env.sh
:.gitlab ci.yml
。在脚本之前向上插入下面的:
部分理想情况下,env将在大多数情况下包含敏感信息。因此,将这些提交到任何版本控制系统中都不是一个好的做法
-此处详细介绍了.env文件涉及的风险非常感谢您的回复!如果要从CI/CD中排除ENV,是否需要在.gitlab-CI.yml文件中为每个阶段设置变量,如DATABASE_HOST=$DATABASE_HOST,然后通过gitlab变量设置值以使一切正常工作?抱歉,如果这是一个愚蠢的问题,感觉完全被这些变量淹没了您需要将环境变量留在CI/CD中,来自
setup_env.sh
的文件将提供您的变量,因为它在CI/CD.Rails上运行,加密的机密真正解决了Dotenv所遇到的大多数问题,并且没有明文文件的风险(比如意外提交)。
Dotenv::Railtie.load unless ENV['GITLAB_CI']
#!/bin/bash
echo DATABASE_HOST=$DATABASE_HOST >> .env
- chmod +x ./setup_env.sh
- ./setup_env.sh