私はフラッター Web アプリを持っており、データベースにアクセスするためにファイルに APIKey をハードコードしていますsecrets.dart
。これは完全に正常に動作します。バージョン管理にプッシュされないように、このファイルを追加しました。.gitignore
しかし、GitHub アクションを使用してアプリをデプロイする場合、シークレット ファイルが検出されないため、スクリプトは失敗します。
私はドキュメントを見ました暗号化された秘密基本的に秘密を保存できる Github から。ただし、これらの秘密は yml ファイルでのみアクセスできるようです。
このシークレットをアプリで使用してスクリプトが正常に実行され、アプリがデプロイされるようにするにはどうすればよいかを知りたいです。これが私のフォルダ構造です
lib/
services/
database.dart /// this file uses the APIkey from secrets.dart
secrets.dart /// contains the APIkey
この問題を解決する方法として私が思いつくのは.env
ファイルを使用することですが、CI スクリプトを通じて .env ファイルに秘密鍵を追加する方法についてはあまり詳しくありません。これで私の問題も解決すると思います。
これが私のCIスクリプトです
# This file was auto-generated by the Firebase CLI
# https://github.com/firebase/firebase-tools
name: Deploy to Firebase Hosting on merge
"on":
push:
branches:
- master
jobs:
build_and_deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
java-version: "12.x"
- uses: subosito/flutter-action@v1
with:
channel: "master"
- run: flutter pub get
- run: flutter pub run build_runner build --delete-conflicting-outputs
- run: flutter build web --release
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: "${{ secrets.GITHUB_TOKEN }}"
firebaseServiceAccount: "${{ secrets.FIREBASE_SERVICE_ACCOUNT_VOCABHUB_34C7F }}"
channelId: live
projectId: vocabhub-34c7f
env:
FIREBASE_CLI_PREVIEWS: hostingchannels
ベストアンサー1
secrets.dart
ソース管理で無視されながらもファイルを使用できます。
手順は次のとおりです
secrets.dart
ローカルマシンで、ベース64指示:base64 lib/path/to/secrets.dart
- 出力をコピーして GitHub シークレットに貼り付け、
$SECRETS_FILE_CONTENT
任意の名前を付けます。 - このCIステップをヤムステップの直前のスクリプト
flutter pub get
。# other stuff ... - run: echo $SECRETS_FILE_CONTENT | base64 -d > lib/path/to/secrets.dart env: SECRETS_FILE_CONTENT: ${{ secrets.SECRETS_FILE_CONTENT }} - run: flutter pub get - run: flutter pub run build_runner build --delete-conflicting-outputs - run: flutter build web --release # other stuff ...
GitHub ユーザー インターフェースでシークレットを追加するには、次の手順に従います。
シークレットは UI の下半分の「リポジトリ シークレット」に表示されるはずです。単純な では機能しないため、「環境シークレット」には表示されません${{ secrets.name_of_variable }}
。
より多くのコンテキストを提供するために、リポジトリ内の「アクション」ファイル (例: .github/workflows/ci.yml) は次のようになります。
name: CI
on:
push:
branches: [ main, dev ]
pull_request:
branches: [ main ]
# Allows to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Decode base64 secrets
run: echo $SECRETS_FILE_CONTENTS | base64 -d > lib/path/to/secrets.dart
env:
SECRETS_FILE_CONTENTS: ${{ secrets.SECRETS_FILE_CONTENTS }}
# … put your steps here
run: flutter pub get
編集
google-services.json
これは、Firebase で作業しているときに非表示にする場合も同じプロセスです。または、署名キー (key.jks
またはkey.keystore
) を使用します。