Flutter에서 CI (Github Action 편)
8727 단어 시GitHubActionsFlutter
도구 등
버전 등
MacBook Air Early2015
macOS Mojave 10.14.5
Android Studio
3.6.1
자바
1.8.0_131
Flutter
1.12.13+hotfix.5
Dart
2.7.0
테스트가 한 대로 쓸 수 있어 CI를 돌리고 싶어져 왔습니다.
우선 지금은, 무료로 사용할 수 있는 곳이라고 하는 것으로, Github Actions로 돌기로 했습니다.
1. 워크플로 만들기
Github의 리포지토리 페이지에서 이해하기 어렵지만 탭이 있습니다. 거기에서 [Actions]를 선택합니다.
어쩌면 처음에는 master에게 만드는 것이 좋습니다 (특히 무시하고 싶은 분기가있는 경우).
2. Simple workflow 선택
Simple workflow에서 [Set up this workflow] 선택
Simple workflow가 처음에 표시되지 않으면 [Set up a workflow yourself]에서도 가능합니다.
3.yaml 편집
Flutter action 라고 하는 것을 공개해 주시는 분이 있으므로, 그쪽을 이용해, 아래와 같은 워크플로우를 만들어 보았습니다.
.github/workflows/flutterci.ymlname: Flutter CI
on:
push:
branches:
- 'develop'
jobs:
prepare:
runs-on: ubuntu-latest
if: "! contains(github.event.head_commit.message, '[ci skip]')"
steps:
- run: echo "${{ github.event.head_commit.message }}"
build:
runs-on: macOS-latest
needs: prepare
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: '1.8'
- name: Setup flutter
uses: subosito/flutter-action@v1
with:
flutter-version: '1.12.13+hotfix.5'
- name: Set up test tools
run: |
flutter pub get
flutter pub global activate dart_dot_reporter
flutter pub global activate junitreport
pip install junit2html
- name: Test
run: |
export PATH=$PATH:${FLUTTER_HOME}/bin/cache/dart-sdk/bin
export PATH=$PATH:${FLUTTER_HOME}/.pub-cache/bin
./test.sh
- name: Arcive test results
if: always()
uses: actions/upload-artifact@v1
with:
name: test-reports
path: test-reports
- name: Slack notification
if: always()
uses: homoluctus/slatify@master
with:
type: ${{ job.status }}
job_name: '*Build and DebugCheck*'
channel: '#general'
commit: true
token: ${{ secrets.GITHUB_TOKEN }}
url: ${{ secrets.SLACK_WEBHOOK_URL }}
준비 단계 설명
prepare
단계에서는 마지막 커밋이 [ci skip]
라는 커밋 메시지가 시작된 경우 건너 뛰도록 설정합니다.
빌드 단계 설명
Simple workflow에서 [Set up this workflow] 선택
Simple workflow가 처음에 표시되지 않으면 [Set up a workflow yourself]에서도 가능합니다.
3.yaml 편집
Flutter action 라고 하는 것을 공개해 주시는 분이 있으므로, 그쪽을 이용해, 아래와 같은 워크플로우를 만들어 보았습니다.
.github/workflows/flutterci.ymlname: Flutter CI
on:
push:
branches:
- 'develop'
jobs:
prepare:
runs-on: ubuntu-latest
if: "! contains(github.event.head_commit.message, '[ci skip]')"
steps:
- run: echo "${{ github.event.head_commit.message }}"
build:
runs-on: macOS-latest
needs: prepare
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: '1.8'
- name: Setup flutter
uses: subosito/flutter-action@v1
with:
flutter-version: '1.12.13+hotfix.5'
- name: Set up test tools
run: |
flutter pub get
flutter pub global activate dart_dot_reporter
flutter pub global activate junitreport
pip install junit2html
- name: Test
run: |
export PATH=$PATH:${FLUTTER_HOME}/bin/cache/dart-sdk/bin
export PATH=$PATH:${FLUTTER_HOME}/.pub-cache/bin
./test.sh
- name: Arcive test results
if: always()
uses: actions/upload-artifact@v1
with:
name: test-reports
path: test-reports
- name: Slack notification
if: always()
uses: homoluctus/slatify@master
with:
type: ${{ job.status }}
job_name: '*Build and DebugCheck*'
channel: '#general'
commit: true
token: ${{ secrets.GITHUB_TOKEN }}
url: ${{ secrets.SLACK_WEBHOOK_URL }}
준비 단계 설명
prepare
단계에서는 마지막 커밋이 [ci skip]
라는 커밋 메시지가 시작된 경우 건너 뛰도록 설정합니다.
빌드 단계 설명
name: Flutter CI
on:
push:
branches:
- 'develop'
jobs:
prepare:
runs-on: ubuntu-latest
if: "! contains(github.event.head_commit.message, '[ci skip]')"
steps:
- run: echo "${{ github.event.head_commit.message }}"
build:
runs-on: macOS-latest
needs: prepare
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: '1.8'
- name: Setup flutter
uses: subosito/flutter-action@v1
with:
flutter-version: '1.12.13+hotfix.5'
- name: Set up test tools
run: |
flutter pub get
flutter pub global activate dart_dot_reporter
flutter pub global activate junitreport
pip install junit2html
- name: Test
run: |
export PATH=$PATH:${FLUTTER_HOME}/bin/cache/dart-sdk/bin
export PATH=$PATH:${FLUTTER_HOME}/.pub-cache/bin
./test.sh
- name: Arcive test results
if: always()
uses: actions/upload-artifact@v1
with:
name: test-reports
path: test-reports
- name: Slack notification
if: always()
uses: homoluctus/slatify@master
with:
type: ${{ job.status }}
job_name: '*Build and DebugCheck*'
channel: '#general'
commit: true
token: ${{ secrets.GITHUB_TOKEN }}
url: ${{ secrets.SLACK_WEBHOOK_URL }}
runs-on: macOS-latest
needs: prepare
prepare
조건을 충족해야 합니다. 결과적으로 마지막 커밋 메시지가 [ci skip]
로 시작하면 빌드가 건너뜁니다. actions/checkout@v2
Set up JDK 1.8
Setup flutter
Flutter action
를 사용하여 flutter SDK 설정 Set up test tools
이전 기사 에서 소개한 html 파일로 테스트 리포트를 내기 위해서 필요한 툴을 인스톨 하고 있습니다.
Test
이전 기사 에서 소개한 html 파일로 테스트 리포트를 내기 위해서 작성한 쉘 스크립트를 두드리고 있습니다. 그 때 필요한 PATH를 그 전에 설정하고 있습니다.
FLUTTER_HOME
는 Flutter action
로 설정됩니다. Archive test results
Slack notification
${{secrets.GITHUB_TOKEN}}
는 스스로 Secrets를 만들 필요가 없습니다( 참조 ). 3.commit
커밋 ... 앞에 파일 이름을 변경합니다. 디폴트라면, blank.yml
가 되어 있어 괄호 나쁘기 때문에(웃음)
그런 다음 [Start commit] 버튼을 눌러 적절한 커밋 메시지를 넣고 [Commit new file]합니다.
대상 리포지토리를 master가 아닌 경우 master 변경 사항을 해당 리포지토리에 병합한 다음 push하면 첫 번째 워크플로 실행이 킥됩니다.
감상
초회만이 아니고, 가끔 굉장히 시간이 걸리는 일이 있으므로, 테스트 툴의 인스톨 당은 캐쉬 하는 것이 좋을지도・・・Flutter action
은 캐싱하는 것처럼 보이지만 ...
Reference
이 문제에 관하여(Flutter에서 CI (Github Action 편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kasa_le/items/d57ca63f19db0b352790
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
초회만이 아니고, 가끔 굉장히 시간이 걸리는 일이 있으므로, 테스트 툴의 인스톨 당은 캐쉬 하는 것이 좋을지도・・・
Flutter action
은 캐싱하는 것처럼 보이지만 ...
Reference
이 문제에 관하여(Flutter에서 CI (Github Action 편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kasa_le/items/d57ca63f19db0b352790텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)