有没有办法在使用或不使用 GitHub 工作流的情况下在 Netlify 上的 flutter web 部署中使用秘密?

Is there a way to use secrets in flutter web deployments on Netlify with or without using GitHub workflows?

我有一个 Flutter 网络应用程序,但我不太熟悉 GitHub 工作流程。我有一个 dotenv 文件,用于存储项目中另一个文件所需的令牌。

对于部署,我在 Netlify 中使用此构建命令: if cd flutter; then git pull && cd ..; else git clone https://github.com/flutter/flutter.git; fi && flutter/bin/flutter config --enable-web && flutter/bin/flutter build web --release

我选择使用它而不是 GitHub 工作流程的另一个原因是因为它不会在我的存储库本身中添加构建目录。

现在需要在我的项目中使用这个 dotenv。但是要使用上述命令构建和部署它,dotenv 应该始终受版本控制。否则 Netlify 将无法检测到它。

我遇到过这个,但这似乎并没有解决我的问题。

有什么方法可以直接将环境机密传递给 Flutter 构建和部署所需的 Netlify?或者是否有任何工作流可以直接部署(推送)到 Netlify,而无需将构建文件存储在我的存储库中?

这是我当前的 netlify 构建设置:

您可以使用 GitHub 工作流程将您的构建文件简单地放到另一个分支上。

首先创建一个名为 build 的空分支,并使用空提交启动该分支。请按照以下步骤操作:

  1. git checkout --orphan build
  2. git rm -rf . 这将删除现有文件
  3. git commit --allow-empty -m "some message"

现在回到master branch。 运行 这些步骤:

  1. base64 path/to/dontenv 并复制此命令的输出。这实际上将 DOTENV 的内容解码为字符串。
  2. 将此输出粘贴到新的 GitHub 回购项目机密中并将其命名为 DOTENV
  3. 现在只需将 DOTENV 添加到 .gitignore.
  4. 创建一个新的 GitHub 工作流程。
  5. 运行 mkdir -p .github/workflows.
  6. nano .github/workflows/build.yml 并粘贴:
name: Build and Deploy

on:
 push:
   branches:
     - master

jobs:
 build:
   runs-on: ubuntu-latest

   steps:
     - name: Checkout repository
       uses: actions/checkout@v2
     
     #I am assuming your dontenv was in lib/
     #This now decodes your dotenv back and writes the contents into lib/dotenv
     - run: echo "${DOTENV// /}" | base64 -d > lib/dotenv
       env:
         MAIN: ${{ secrets.DOTENV }}

     - name: Set up Flutter
       uses: subosito/flutter-action@v1
       with:
         channel: 'stable'

     - name: Get dependencies
       run: flutter pub get

     - name: Run analyze
       run: flutter analyze .

     - name: Build release
       run: flutter build web --release

     - name: Upload artifacts
       uses: actions/upload-artifact@v1
       with:
         name: build
         path: build

 deploy-build:
   needs: build

   runs-on: ubuntu-latest

   steps:
     - name: Clone the repoitory
       uses: actions/checkout@v2
       with:
         ref: build

     - name: Configure git
       run: |
         git config --global user.email ${GITHUB_ACTOR}@gmail.com
         git config --global user.name ${GITHUB_ACTOR}

     - name: Download website build
       uses: actions/download-artifact@v1
       with:
         name: build
         path: build

     - name: Commit and Push
       run: |
         if [ $(git status --porcelain=v1 2>/dev/null | wc -l) != "0" ] ; then
           git add -f build
           git commit -m "gh-actions deployed a new build"
           git push --force https://github.com/${GITHUB_REPOSITORY}.git HEAD:build
         fi

这将在 build 分支中创建构建文件。而您的 master 分支将不受影响。每次推送后,此 GitHub 操作将被触发并在 build 分支中构建和提交您的构建文件。要部署,只需部署此 build 分支即可。