DeployGate + Flutter + CircleCI로 만드는 앱 테스트 환경

할 일



Flutter 앱을 빌드하여 Android 기기에서 확인하세요!
그건 그렇고, 모두 무료 프레임입니다
  • Flutter 앱을 GitHub로 코드 관리
  • 커밋 할 때마다 apk 만들기
  • 마스터 병합으로 DeployGate에 업로드
  • tag 생성으로 DeployGate로 apk를 보호

  • 소스 코드



    서둘러 만들었기 때문에, 이상한 곳도 가득합니다만 참고해 주세요
  • htps : // 기주 b. 이 m / f 또한 / mp ぇ - rc ぇ shi - p ぉ y

  • CircleCI


  • 설정은 이런 느낌입니다
  • build job은 Flutter sdk가 들어있는 docker 컨테이너를 사용합니다
  • build로 apk를 만들고 persist_to_workspace에서/tmp에 저장하고 다음 작업으로 전달합니다
  • publish job은받은 apk를 DeployGate에 업로드합니다
  • protect job은 업로드 횟수 제한을 초과하면 자동으로 삭제되지 않도록 핀을 붙입니다


  • .circleci/config.yml
    version: 2.1
    
    # Flutterのキャッシュはここでcommandに切り出し
    
    commands:
      flutter_restore_cache:
        steps:
          - restore_cache:
              keys: flutter-cache-{{ .Branch }}
      flutter_save_cache:
        parameters:
          root_path:
            type: string
            default: "app"
        steps:
          - save_cache:
              key: flutter-cache-{{ .Branch }}
              paths:
                - "<< parameters.root_path >>/android/.gradle"
                - "<< parameters.root_path >>/android/gradle"
                - "<< parameters.root_path >>/build"
                - /opt/android-sdk-linux/
    
    # いい感じのdocker containerがなかったので、この記事を参考にしました
    # https://medium.com/flutter-community/setup-ci-cd-pipeline-for-your-flutter-app-using-circleci-ef07e39982ab
    
    jobs:
      build:
        docker:
          - image: cirrusci/flutter
        steps:
          - checkout
          - flutter_restore_cache
    # buildしたapkを/tmpにコピー
          - run:
              working_directory: app
              command: |
                flutter -v build apk
                cp build/app/outputs/apk/app.apk /tmp
          - flutter_save_cache
    # /tmpのapp.apkを一時的に保存して、次のjobにわたす
          - persist_to_workspace:
              root: /tmp
              paths:
                - app.apk
      publish:
        docker:
    # attach_workspaceでca-certificateが必要なので、circleci/nodeを使用 (alpineとかじゃなければOK)
          - image: circleci/node
        steps:
    # /tmp/app.apkを受け取り
          - attach_workspace:
              at: /tmp
    # apkをDeployGateにアップロード
    # messageにはgitのコミットハッシュを入れています
          - run: |
              curl \
                -X POST \
                -F "token=${DG_TOKEN}" \
                -F "file=@/tmp/app.apk" \
                -F "message=${CIRCLE_SHA1}" \
                "https://deploygate.com/api/users/${DG_USER}/apps" | tee /tmp/result.out
    # 次のjobにDeployGateへアップロードしたときのレスポンスを渡す
          - persist_to_workspace:
              root: /tmp
              paths:
                - result.out
      protect:
        docker:
          - image: circleci/node
        steps:
    # result.outの受け取り
          - attach_workspace:
              at: /tmp
          - run: |
              APP_ID="$(cat /tmp/result.out | jq -r .results.package_name)"
              REVISION="$(cat /tmp/result.out | jq -r .results.revision)"
              curl \
                -X POST \
                -F "token=${DG_TOKEN}" \
                https://deploygate.com/api/users/${DG_USER}/platforms/android/apps/${APP_ID}/binaries/${REVISION}/protect
    
    workflows:
      version: 2
      flutter:
        jobs:
          - build:
              filters:
                tags:
                  only: /.*/
          - publish:
              requires:
                - build
              filters:
                branches:
                  only: master
                tags:
                  only: /.*/
          - protect:
              requires:
                - publish
              filters:
                branches:
                  ignore: /.*/
                tags:
                  only: /.*/
    

    DeployGate



    CircleCI에서는 DeployGate API를 두드리는 데 사용하는 토큰 등을 환경 변수로 사용합니다.

    사용하는 환경 변수
  • DG_TOKEN
  • API를 두드리는 토큰





  • DG_USER
  • DeployGate 등록시 사용자 이름


  • 좋은 웹페이지 즐겨찾기