반갑다. 방금까지 CI로 고생한 플러터 개발자 박유현이다.
오늘은 github secrets로 .env파일을 만들어보겠다.
그전에 우선 왜 만들까???
1. 만드는 이유
만드는 이유야 다양하겠지만, 내가 github secrets를 사용한 이유는
env파일때문이다.
env파일이란?
https://iloveuhyeon.tistory.com/11
[Flutter] Flutter 프로젝트에 .env 적용하기
오늘은 flutter 프로젝트에 .env를 적용해볼까한다. 적용해보기전에, env란?env파일이란? 만약 당신이 github 레포에 커밋을 할때 커밋이 되면 안되는것들이 종종 있을것이다.ex) key, api_url, 등등 그
iloveuhyeon.tistory.com
이 env파일을 사용해 중요한 값들만 따로 env파일에 넣어놓고 .gitignore을 사용해서 github 레포에 커밋을 할 수 없게 하는것인데,
Flutter에서는 env파일을 사용하려면 라이브러리도 라이브러리이지만
pubspec.yaml파일에 따로 의존성을 주입시켜줘야한다.
의존성까지 주입시키면 드디어 사용할 수 있는데,
이곳에서 문제가 발생한다.
우리는 일반적으로 .gitignore를 사용할때 .env는 많이 넣을것이다.
본인이 CI를 돌리지않는다면 상관 없을것이다.
하지만 만약 본인이 CI를 돌린다면
- run: flutter analyze
위에 보이는것처럼 CI에 저런걸 한번쯤 본 적 있을것이다.
본인이 env를 사용하는데, 저 부분에서 오류가 뜬다면
아래와 같은 오류가 뜰것이다.
봐보자면, pubspec.yaml파일에서 .env파일을 확인할 수 없다고 뜰것이다.
우리는 분명 env파일이 있을텐데 왜 그럴까??
이유는, .gitignore이다.
.gitignore에는 env파일을 커밋하지 못하게 하도록 설정해놨다.
그래서 github에 있는 레포에는 env파일이 없기 때문에 위와 같은 오류가 뜬다.
보통은 저부분에서 많이 막힐것이다.
나 역시도 이 CI로 하루는 날려먹은거같다.
그럼 어떻게 해결하나?
2. 해결방법
우리는 이 문제를 해결하기 위해 오늘의 주제인 Github Secrets를 사용할 것이다.
1. 우선 본인의 github 레포의 setting으로 가보자.
2. Secrets and variables의 Actions으로 들어가자
3. 이 페이지에서 New repository secret을 누른다
4. Name에는 key값을(대문자로), Secret에는 value값을 넣는다
ex) Name : 본인이 원하는 이름, Secret : base64형식으로 인코딩한 url주소 (그냥 url이여도 상관 없다)
base64 인코딩 : https://www.base64encode.org/ko/
Base64 인코딩 및 디코딩 - 온라인
Base64 형식으로 인코딩해보세요. 아니면 다양한 고급 옵션으로 디코딩해보세요. 저희 사이트에는 데이터 변환하기에 사용하기 쉬운 온라인 도구가 있습니다.
www.base64encode.org
5. 등록이 완료되었으면, 이제 본인의 레포에 있는 CI코드로 가보자
name: CI
on:
push:
branches:
- main
pull_request:
jobs:
flutter_test:
name: Run flutter test and analyze
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: "stable"
- run: flutter pub get
- run: flutter analyze
위에는 내가 실제로 사용하는 CI 코드의 일부분이다. (물론 직접 만든것은 아니다)
6. 이 코드에 steps : 안에 아래 보이는 코드를 넣는다
- name: Copy Secret To application module
run: |
echo "PROJECT_API_KEY=$MAP_API_KEY" >> 본인의 .env파일이 있는 상대 경로
env:
MAP_API_KEY: ${{ secrets.PROJECT_API_KEY }}
이런식으로 말이다.
*여기서 주의할점*
1. run부분에 "|" 이것은 base64를 decoding, encoding해주는 연산자이다.
그렇기 때문에 위의 4번에서 본인이 만약 base64코드로 encoding해서 넣었다면 사용하지만, 만약 넣지 않았더라면 사용하지 않는것을
추천한다.
2. "steps:" 안에 actions/checkout@v2 이런 형식의 코드가 있다고하면 무조건 그 코드 다음에 넣도록 하자.
왜냐하면 actions/checkout@v2는 프로젝트의 소스 코드를 check-out하는 단계로
여기에서는 해당 레포지토리로 check-out하여 레포지토리에 접근할 수 있는 Action을 불러온다.
이 단계가 실행되기 전에는 소스 코드가 GitHub
Actions에 존재하지 않기 때문에 .env 파일을 복사할 위치가 없게 된다.
그래서 꼭 actions/checkout@v2라는 코드가 있다면 무조건 이 다음에 넣도록 하자.
위의 코드를 사용하면 이런식으로 나올것이다.
name: CI
on:
push:
branches:
- main
pull_request:
jobs:
flutter_test:
name: Run flutter test and analyze
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Copy Secret To application module
run: |
echo "PROJECT_API_KEY=$MAP_API_KEY" >> .env
env:
MAP_API_KEY: ${{ secrets.PROJECT_API_KEY }}
이렇게만 한다면 아래 보이는것처럼 잘 실행되는것을 볼 수 있다.
이렇게 하면 이제 당신의 CI에는 임의로 .env를 생성했기 때문에 오류는 없을것이다.
'Flutter' 카테고리의 다른 글
[Flutter] 크로스 플랫폼 (1) | 2025.04.01 |
---|---|
[Flutter] pub.dev에 나만의 package를 만들고 올리기 #2 (1) | 2025.03.24 |
[Flutter] pub.dev에 나만의 package를 만들고 올리기 #1 (0) | 2025.03.24 |
[Flutter] Flutter 프로젝트에 .env 적용하기 (0) | 2024.07.25 |
[Flutter] List.generate (List위젯) (2) | 2024.07.23 |