如何配置GitHub Actions避免删除服务器未追踪的.env文件?
解决GitHub Actions部署时删除服务器未追踪.env文件的问题
我用GitHub Actions自动部署项目到DigitalOcean的Ubuntu服务器,当前的YAML配置如下:
name: Continuous Deployment on: push: branches: - main jobs: deployment: runs-on: self-hosted steps: - name: Checkout main branch uses: actions/checkout@v3 - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: '16.x' - name: Install dependencies run: npm ci - name: Restart server run: npm run restart
服务器和本地的目录结构一致:
index.ts someMiddleware.ts .env
.gitignore里已经排除了.env:
.env
问题是每次GitHub Actions运行时,服务器上手动添加的.env文件都会被actions/checkout@v3删除,怎么配置才能避免这种情况?
可行的解决方案
1. 禁用checkout的工作区清理
actions/checkout@v3默认会清理工作区的未追踪文件,只需给这个动作加上clean: false参数就能禁用该行为,同时建议加上fetch-depth: 1减少不必要的历史拉取:
- name: Checkout main branch uses: actions/checkout@v3 with: clean: false fetch-depth: 1
2. 备份再恢复.env文件
如果不想全局禁用工作区清理,可以在checkout前先把服务器上的.env备份到其他目录,完成checkout后再移回原位置:
steps: - name: Backup .env file run: | if [ -f .env ]; then cp .env ../.env.backup fi - name: Checkout main branch uses: actions/checkout@v3 - name: Restore .env file run: | if [ -f ../.env.backup ]; then cp ../.env.backup .env rm ../.env.backup fi # 后续的Node.js配置、依赖安装等步骤不变
3. 用GitHub Secrets管理环境变量(更推荐)
既然.env里都是敏感配置,更规范的做法是把这些变量存储到GitHub Secrets中,部署时直接注入到服务器环境,不用手动维护服务器上的.env文件。比如可以在Actions中添加步骤写入.env:
- name: Create .env file from GitHub Secrets run: | echo "DB_HOST=${{ secrets.DB_HOST }}" >> .env echo "API_KEY=${{ secrets.API_KEY }}" >> .env # 按需添加其他环境变量
这样每次部署都会自动生成包含最新敏感配置的.env,既安全又不用操心文件被删除的问题。
内容的提问来源于stack exchange,提问作者angry kiwi
相关产品推荐
相关产品推荐

