我正在寻找一种创建/生成 env 文件的方法,以便 Docker Cloud Build 或 AWS Elastic Beanstalk(通过 CodePipeline)可以在生成 env 文件的 github 操作之后直接从存储库中提取它们。
我知道大多数(如果不是全部)托管服务器都有自己的管理环境变量的方式,但我试图弄清楚是否有一种方法可以在将其推送到 AWS CodePipeline 或 Docker Cloud Build 之前通过 github 操作生成它,所以更改配置时只有一个文件需要修改。
我发现出于安全目的,最好在服务器上手动设置环境变量,但我的目标主要是测试服务器和供个人使用的自托管服务器(docker),因此安全性并不当务之急;但与此同时,我正在探索通过 github 操作(或其他方式,如果有可以支持 Docker 和 AWS 的不同选项)生成它,而不是将 .env 文件直接推送到存储库。
我在 .github/workflows/generate-env.yml 下有一个 github 操作
name: generate-env
on:
push:
branches:
- "test"
jobs:
generate_env:
runs-on: ubuntu-22.04
steps:
- name: Generate env file
run: |
touch .env
echo "${{ vars.APP_ENV }}" >> .env
cat .env
它正确生成并显示 .env 内容,但 Docker 和 CodePipeline 无法拉取它
期待建议
是的,这是可能的。上面的代码就可以了。
name: Send .env file to production sever
on:
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install SSH key
uses: webfactory/[email protected]
with:
ssh-private-key: ${{ secrets.PRODUCTION_PRIVATE_KEY }}
- name: Create a .env file
env:
ENV_FILE: ${{ secrets.ENV_FILE }}
run: |
echo "$ENV_FILE" > .env
- name: Transfer .env file to production server
run: scp -o StrictHostKeyChecking=no .env ${{ secrets.PRODUCTION_SERVER_USERNAME }}@${{ secrets.PRODUCTION_SERVER_DOMAIN }}:/path/to/project/folder/
env:
SSH_PRIVATE_KEY: ${{ secrets.PRODUCTION_PRIVATE_KEY }}
步骤“创建 .env 文件”将秘密 ENV_FILE 的值分配给环境变量 ENV_FILE,然后将该值回显到 .env 文件中。
下一步使用
scp
将 .env 文件发送到远程服务器。
使用的变量具有不言自明的名称。它们必须先添加到您的 Github 存储库设置中:
settings > secrets and variables > actions