簡體   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