Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 带有gitlab CI/CD的Rails.env_Ruby On Rails_Gitlab_Environment Variables_Gitlab Ci_Credentials - Fatal编程技术网

Ruby on rails 带有gitlab CI/CD的Rails.env

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

Rails项目在通过gitlab CI时遇到环境变量问题。目前,我正在使用dotenv gem来存储项目的凭据。此外,我还在gitlab CI环境中分配了环境变量。例如,database.yml:

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
文件,您可以按照本文答案中的建议进行操作,出于文档原因,我也将它们发布在这里:

  • 在gitlab repo配置中创建环境变量
  • 创建
    设置\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