깃허브 액션으로 플러터웹 사용시 비밀접속하는 방법
나는 플러터 웹 앱을 가지고 있고 데이터베이스에 접속하기 위해 파일에 API 키를 하드코딩했고, 이것은 완벽하게 잘 작동한다. 버전 관리에 이 파일을 적용하는 것을 방지하기 위해 에 추가했습니다. 그러나 GitHub 액션을 사용하여 앱을 배포할 때 스크립트는 비밀 파일을 감지하지 못하기 때문에 실패합니다.
나는 기본적으로 비밀을 저장할 수 있는 Github의 문서를 보았다.하지만 그 비밀들은 오직 yml 파일에서만 접근할 수 있는 것 같다.
이 비밀을 앱에서 어떻게 사용하면 스크립트가 성공적으로 실행되고 앱을 배포할 수 있는지 알고 싶습니다. 여기 내 폴더 구조가 있다
lib/
services/
database.dart /// this file uses the APIkey from secrets.dart
secrets.dart /// contains the APIkey
내가 생각할 수 있는 이 문제를 해결할 수 있는 한 가지 방법은 파일을 사용하는 것이지만 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
소스 컨트롤에서 무시당하면서 파일을 사용할 수 있습니다.
여기 단계가 있습니다
- 로컬 컴퓨터에서 다음 명령을 사용하여 의 내용을 인코딩합니다:
- 출력물을 GitHub 비밀에 복사하여 붙여넣거나 이름을 지정하거나 원하는 대로 붙여넣습니다.
- 이 CI 단계를 단계 직전에 스크립트에 추가합니다.
GitHub 사용자 인터페이스에서 비밀을 추가하려면 다음 단계를 수행합니다:
사용자의 비밀은 UI의 하위 "저장소 비밀" 절반에 나타나야 하며, "환경 비밀"에는 나타나지 않아야 합니다. 단순한 것으로는 작동하지 않기 때문입니다.
더 많은 컨텍스트를 제공하기 위해 저장소에 있는 gitub/workflows/ci.yml과 같은 "actions" 파일의 모양은 다음과 같습니다:
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
편집
이것은 사람들이 화력 기지에서 일할 때 숨어 있을 때도 마찬가지의 과정이다. 또는 서명 키(또는 )를 사용합니다.
Repository Secret보다는 Environment Secret를 사용하는 경우 어떤 환경을 사용할지 정의해야 합니다. 이 내용을 확인해 보십시오
jobs:
build:
environment: **ENVIRONMENT NAME HERE**
steps:
- name: blah blah
run: echo blah blah
업데이트(2022-08-09)
jobs:
build:
...
environment: Foo
steps:
- uses : actions/checkout@v3
- name : Run some customized action
env :
a : ${{ secrets.Bar }}
b : $ Mona
c : ${{ secrets.Lisa }}
run : |
echo $a
echo $b
echo $c
제가 답변을 드린 이후로 많은 업데이트가 있었기 때문에 정리하자면, 지금 깃허브에는 3가지 비밀이 있습니다
- 환경의 비밀
- 작업 비밀(Repository Secret)
- 디펜더봇 시크릿
의존 로봇이 이 범위를 벗어났습니다.
환경 비밀은 다음과 같습니다:
Settings -> Environments -> New Environments -> Environment Secrets
행동 비밀은 다음:
Settings -> Secrets -> Actions -> Repository Secrets
따라서 논리적으로 환경의 비밀 가치에 접근하려면 다음과 같은 두 가지 임의 변수를 알아야 합니다: Environment Name and Environment Secret Name 예:
내가 쓴대로라면
그리고.
가
그리고.
일정하다
그리고.
is Actions(Repository) Secret Name
Environment Secret를 Repository Secret로 설정하면
콘솔 출력은 다음과 같습니다:
Mark
Mona
Twain
또한 깃허브는 URI를 고려하여 "***"와 같은 비밀값을 리코딩하여 디버깅한다.
'개발하자' 카테고리의 다른 글
별도의 서브디렉토리에서 테라포밍하기 위해 기존 리소스를 가져오는 방법? (1) | 2023.10.27 |
---|---|
파이썬 3.4에서 f-스트링이 작동해야 하나요? (1) | 2023.10.26 |
null일 수 있는 변수에 대한 테라폼 사용자 지정 유효성 검사 (0) | 2023.10.25 |
특정 리소스에 대해서만 테라폼을 실행하려고 합니다 (0) | 2023.10.24 |
파일 선택기를 사용하여 플랫폼 파일을 파일로 만들기 (0) | 2023.10.24 |