我如何防止GitHub动作替换一些文件



我想做一个简单的CD/CD为我的Laravel项目做自动部署,但结果是我的。env文件总是被替换。我如何确保它不总是被替换

这是我的动作文件

name: Laravel
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
laravel-tests:
runs-on: self-hosted
steps:
- uses: shivammathur/setup-php@b7d1d9c9a92d8d8463ce36d7f60da34d461724f8
with:
php-version: '7.4'
- uses: actions/checkout@v2
- name: Copy .env
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
- name: Install Dependencies
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
- name: Generate key
run: php artisan key:generate
- name: Directory Permissions
run: chmod -R 777 storage bootstrap/cache
- name: Create Database
run: |
mkdir -p database
touch database/database.sqlite
- name: Execute tests (Unit and Feature tests) via PHPUnit
env:
DB_CONNECTION: sqlite
DB_DATABASE: database/database.sqlite
run: vendor/bin/phpunit

每次您的工作流程运行时,您将获得一台新机器。因此,没有您在上一次运行时创建的文件。因此,如果您需要在运行时创建一些文件,则需要每次重复此步骤。

请在这里查看以更好地了解github基础知识。

您没有太多的选项来跨运行共享这个文件,因为在工件中保存秘密是一个糟糕的选择。因此,每次需要该文件时,都需要根据可能保存在秘密上下文中的秘密重新创建该文件。请查看此链接:

- name: Create env file
run: |
cat << EOF >> .env
API_ENDPOINT="https://xxx.execute-api.us-west-2.amazonaws.com"
API_KEY=${{ secrets.API_KEY }}
EOF

github的动作作用于你的git仓库中的文件

你的.env不是不应该是在repo中,因为它包含您的凭据/秘密。

你可能在你的本地计算机上有它,但是它包含在gitignore中,所以git(一个github)不会跟踪它。

因此,在每个操作运行时都没有.env文件。最直接的方法是:

  • 创建.env。提交和提交的生产文件。将不敏感的.env主要变量放在这里,例如:
APP_NAME=YourAppName
APP_ENV=production
APP_DEBUG=false
APP_LOG_LEVEL=warning
APP_URL=https://your-url.com
CACHE_DRIVER=redis
SESSION_DRIVER=file
QUEUE_CONNECTION=redis
... etc ...

不要包含密钥,密码或秘密。.

现在复制该文件作为您的默认.env文件在您的步骤之一:

- name: Copy .env
run: php -r "file_exists('.env') || copy('.env.production', '.env');"

现在是时候处理你的秘密。您应该将它们添加为您的repo的github秘密,并使用您的github操作的env指令:

env:
APP_KEY: ${{ secrets.APP_KEY }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
....

最后一步可能需要根据实际部署的方式和位置而有所不同,但这应该是它的要点:从github秘密空间中提取它们,并将它们添加到生产环境

最新更新