【问题标题】:How to build an flutter app with Github Actions CI/CD whitout .env in the repository如何使用 Github Actions CI/CD 构建 flutter 应用程序,而无需存储库中的 .env
【发布时间】:2023-02-12 15:22:10
【问题描述】:
我有一个 Flutter 应用程序,它使用 GitHub Actions 中的 fastlane 管道自动构建我的应用程序并将其推送到 Play 商店。目前管道正在失败。
问题是我的应用程序使用 dotenv 库加载环境变量:
在我的pubspec.yaml:
flutter_dotenv: ^2.1.0
...
assets:
- .env
这是我的 .env 文件:
BACKEND_URL=https://backend-example.com/api
API_KEY=value
这就是我在运行管道时遇到问题的地方。
任务:应用程序:编译FlutterBuildRelease
在 pubspec.yaml 中检测到错误:
找不到资产的文件或变体:.env。
由于建议说我们不应该将 .env 上传到存储库,所以我没有上传它们并将其留在 .gitignore 中。所以当管道想要构建应用程序时,它对我不起作用,因为它找不到 .env 文件。
有没有什么方法或策略可以注入 .env 中列出的环境变量,而不会将这些值硬编码在存储库中?如您所见,.env 文件中列出了一些敏感值
【问题讨论】:
标签:
flutter
github-actions
fastlane
【解决方案1】:
我将在我的回答前加上这个前缀:像这样发送一个 .env 文件意味着它的全部内容将可供下载您的应用程序的任何人使用。确保你同意这一点。
您可以将您的值存储为 Github Actions Secrets 并在运行构建之前的一个步骤中创建该文件。是这样的:
jobs:
build:
runs-on: macos-latest
steps:
- name: Create .env file
run: |
cat > assets/.env <<EOF
BACKEND_URL=${{ secrets.BACKEND_URL }}
API_KEY=${{ secrets.API_KEY }}
EOF
【解决方案2】:
@jmathh 的回答也不安全。 GitHub Action Secrets 本身是安全的,但通过将数据放回 .env 文件并将其烘焙到您的应用程序中,任何下载该应用程序的人都可以看到它。
您在这里获得的唯一好处是任何有权访问您的存储库的人都无法看到 .env 文件。
你需要记住的是:
- 进入应用程序的所有内容都可以读取,任何内容。您可以通过混淆您的应用程序来使其变得更加困难,但即使这样也不能使您的应用程序免受想要对您的应用程序进行逆向工程的人的攻击。
- 为了 100% 的安全,请让您的应用程序尽可能简单,并让您的后端完成与第三方的所有集成。您的后端基本上充当代理。
- 一些密钥被设计成具有公共 API 密钥,一些这样做的公司是例如 Stripe(1) 和 Firebase(2)。
(1) “可以在您的网络或移动应用程序的客户端代码(例如 checkout.js)中公开访问,以安全地收集付款信息,例如使用 Stripe Elements。默认情况下,Stripe Checkout 会安全地收集付款信息。”。见:https://stripe.com/docs/keys
(2) “通过使用 Firebase 安全规则来保护您的数据库和云存储数据,而不是通过限制和/或隐藏您的 API 密钥。” https://firebase.google.com/docs/projects/api-keys