繁体   English   中英

Github Actions CI/CD 工作流中的 .env 文件:如何将这些提供到工作流中

[英].env files in Github Actions CI/CD workflows: how to provide these into the workflow

我为 Node 和 PHP 项目的 CI/CD 流程使用 Github Actions 工作流。

在一个工作流中,我将我的存储库克隆到 Github Actions runner 虚拟机中。 然后为了在工作流中运行测试,我必须在克隆的存储库中有.env文件。

问题是我的.env文件不是存储库的一部分(这是普遍存在的做法)。

为了解决这个问题,我使用了我认为的解决方法:设置MY_PROJECT_ENV Github Action sercret 变量,手动将我的.env文件的内容放在那里,然后使用 Linux console echo "${{ secrets.MY_PROJECT_ENV}}" >.env在我的工作流程中动态创建.env文件echo "${{ secrets.MY_PROJECT_ENV}}" >.env 这行得通。

但我想知道是否有其他方法可以将.env文件提供给 Github Actions 工作流程?

如您所知.env并不意味着推送到远程存储库。

您需要以某种方式将环境变量添加到运行程序的机器上。

在您的情况下,您可以使用.yaml文件添加环境变量,如下所示

steps:
  - name: Hello Program
    run: Hello $FIRST_NAME $LAST_NAME!
    env:
      FIRST_NAME: Akhil
      LAST_NAME: Pentamsetti

更多信息请访问github 官方文档关于使用环境变量。

我做了以下操作,简单有效:

  1. 根据需要添加环境变量(在 yaml 文件中定义它们或作为机密)
  2. .env.example保存在存储库中,并在 CI 作业开始时运行以下命令:
# Create the .env file
cp .env.example .env

# Install dependencies so we can run artisan commands
composer install ...

# generate an APP_KEY
php artisan key:generate

另一种方法是将.env.ci文件提交到存储库,其中包含特定于 CI 环境的环境变量,并在运行测试时运行cp.env.ci.env 敏感密钥仍应设置为机密。

从技术上讲,您可以在 YAML 文件中的 secrets/env 之间提供所有环境变量,并且没有 .env 文件,但我喜欢在每次测试运行时设置一个随机的 APP_KEY,以确保没有任何依赖于特定 APP_KEY 的东西。

环境优先

顺便说一句,这是环境优先级如何在 phpunit 测试中与 Laravel 一起使用。 这是 laravel 特定的,可能会让人感到惊讶,因为它并不是 phpunit 在 Laravel 之外单独工作的方式:

  1. phpunit.xml中设置的环境变量总是“赢”(这在 Laravel 中是正确的,尽管 phpunit 的文档说系统环境变量优先于phpunit.xml文件项)
  2. 系统环境变化(在 GitHub 操作中,这些是在 yaml 文件中运行命令时设置为环境变量的)
  3. .env文件项

资料来源:我创建/运行了 Chipper CI,这是一个用于 Laravel 的 CI 平台。

我知道有 3 种方法可以做到这一点。 一年后,我在另一个问题中回答了我自己的问题。 看那边。

为了 SO 规则和可查找性,我在这里做了一个总结。

  1. 您将.env文件保存在存储库中。 使用dotenv 操作将文件读入工作流程。

  2. 您将文件保留在存储库之外。 那么你有两种获取.env变量的方法:

    2.1。 正如我在上面的问题中所写,手动将文件内容复制到 GitHub 操作秘密变量,然后在您的工作流程中从该变量创建.env文件。

    2.2. Use the GitHub Actions API to create/update the secrets : write the NodeJS script on your machine (chances are you anyway use Webpack, Gulp or the like Node thing so you have Node installed).

    该脚本应读取本地.env文件并将其内容写入 GH 机密。 当然,您可以使用您在项目中使用的任何语言编写控制台命令来执行此操作。

就这么简单:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM