Flutter에서 CI (Github Action 편)

아래 환경에서 Flutter 앱을 개발 중입니다.


도구 등
버전 등


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.yml
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 }}

준비 단계 설명


prepare 단계에서는 마지막 커밋이 [ci skip]라는 커밋 메시지가 시작된 경우 건너 뛰도록 설정합니다.

빌드 단계 설명


  • runs-on: macOS-latest
  • macOS로 하고 있습니다만, ubuntu에서도 갈 수 있을 것.

  • needs: prepare
  • prepare 조건을 충족해야 합니다. 결과적으로 마지막 커밋 메시지가 [ci skip]로 시작하면 빌드가 건너뜁니다.

  • actions/checkout@v2
  • 해당 브랜치 체크 아웃

  • Set up JDK 1.8
  • JDK의 버전을 8로하고 있습니다. 이것은 Android 버전과 일치합니다.

  • Setup flutter
  • Flutter action를 사용하여 flutter SDK 설정

  • Set up test tools

  • 이전 기사 에서 소개한 html 파일로 테스트 리포트를 내기 위해서 필요한 툴을 인스톨 하고 있습니다.

  • Test

  • 이전 기사 에서 소개한 html 파일로 테스트 리포트를 내기 위해서 작성한 쉘 스크립트를 두드리고 있습니다. 그 때 필요한 PATH를 그 전에 설정하고 있습니다.
  • FLUTTER_HOMEFlutter action로 설정됩니다.

  • Archive test results
  • 테스트 결과를 아티팩트에 업로드

  • Slack notification
  • 빌드 결과를 Slack에 알리기
  • ${{secrets.GITHUB_TOKEN}} 는 스스로 Secrets를 만들 필요가 없습니다( 참조 ).


  • 3.commit



    커밋 ... 앞에 파일 이름을 변경합니다. 디폴트라면, blank.yml가 되어 있어 괄호 나쁘기 때문에(웃음)






    그런 다음 [Start commit] 버튼을 눌러 적절한 커밋 메시지를 넣고 [Commit new file]합니다.

    대상 리포지토리를 master가 아닌 경우 master 변경 사항을 해당 리포지토리에 병합한 다음 push하면 첫 번째 워크플로 실행이 킥됩니다.

    감상



    초회만이 아니고, 가끔 굉장히 시간이 걸리는 일이 있으므로, 테스트 툴의 인스톨 당은 캐쉬 하는 것이 좋을지도・・・Flutter action 은 캐싱하는 것처럼 보이지만 ...

    좋은 웹페이지 즐겨찾기