githubアクションでflutter webを使用するときにシークレットにアクセスする方法 質問する

githubアクションでflutter webを使用するときにシークレットにアクセスする方法 質問する

私はフラッター 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ソース管理で無視されながらもファイルを使用できます。

手順は次のとおりです

  1. secrets.dartローカルマシンで、ベース64指示:
      base64 lib/path/to/secrets.dart
    
  2. 出力をコピーして GitHub シークレットに貼り付け、$SECRETS_FILE_CONTENT任意の名前を付けます。
  3. この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 ユーザー インターフェースでシークレットを追加するには、次の手順に従います。

リポジトリの設定タブをクリックし、シークレットをクリックし、「新しいリポジトリシークレット」をクリックします。「環境シークレット」は機能しないため使用しないでください。

変数名(例:SECRETS_FILE_CONTENT)とその値(例:base-64でエンコードされたファイルの内容)を入力します。

シークレットは UI の下半分の「リポジトリ シークレット」に表示されるはずです。単純な では機能しないため、「環境シークレット」には表示されません${{ secrets.name_of_variable }}

SECRETS_FILE_CONTENT変数名が下部の2番目のボックスに表示されるはずです。

より多くのコンテキストを提供するために、リポジトリ内の「アクション」ファイル (例: .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) を使用します。

おすすめ記事