酔いどれ技術者の備忘録

お酒を飲みながらコーディングするので調べたことを忘れます。そのための備忘録。

CircleCIを使ってAndroidアプリをデプロイゲートに自動でデプロイ【CirleCI 2.0】

みなさん、CircleCI使ってますか?
にわかエンジニアの私も、CircleCIは便利なので最近お世話になっています。

今回はAndroidアプリを作成する際に、git pushから自動でデプロイゲートへデプロイをしてくれる環境を構築しました。
今まではapkファイルを作成後に手動でデプロイゲートへアップしていましたが、gitへpushするだけで自動で実行されるようになったので非常に便利です!!
酔っ払いながら環境構築したので、忘れないうちにメモっておきます。

まずはアプリのプロジェクトをGitHubかBitbucketにpush

今回はAndroidアプリを作成していることを想定しています。
作成しているアプリはGitHubかBitbucketのどちらかでバージョン管理しているものとします。

CircleCIへログイン

とりあえず、CircleCIへログインしましょう。
アカウントを持っていない方はサインアップ。
GitHubかBitbucketのアカウントがあればすぐに使用できるので簡単です。
ログイン後は、自動でデプロイしたいアプリにチェックし、「Follow」を押しましょう

f:id:itouuuuuuuuu:20181214020348j:plain
bitbucket アプリ選択

CircleCIの環境変数を設定

プロジェクトの設定 -> Environment Variables -> Add Variables に、デプロイゲートのAPI Keyを設定しましょう。
今回、Key名は DEPLOY_GATE_API_KEY としています。 デプロイゲートのAPI Keyは、デプロイゲートのアカウント設定ページから確認できます。

f:id:itouuuuuuuuu:20181214021427j:plain
DEPLOY_GATE_API_KEY

CircleCIの設定

Androidアプリのプロジェクトに、CircleCIの設定ファイルを追加します。
Androidアプリプロジェクトのルートディレクトリ(appとかgradleとか格納されているディレクトリ)に、 .circleci/config.yml ファイルを作成します。
設定のサンプルは公式にあがっています
これを参考に、下記のように修正します。(今回テストは実行していません)

version: 2
jobs:
  build:
    branches:
      only:
        - develop
    working_directory: ~/code
    docker:
      - image: circleci/android:api-25-alpha
    environment:
      JVM_OPTS: -Xmx3200m
    steps:
      - checkout
      - restore_cache:
          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }}
      - run:
          name: Download Dependencies
          command: ./gradlew androidDependencies
      - save_cache:
          paths:
            - ~/.gradle
          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }}
      - run:
          name: Generate APK
          command: ./gradlew assembleDebug
      - run:
          name: Upload DeployGate
          command: curl -F "token=${DEPLOY_GATE_API_KEY}" -F "file=@app/build/outputs/apk/debug/app-debug.apk" -F "message=deployed" https://deploygate.com/api/users/デプロイゲートの登録名/apps

デプロイゲートの登録名 は、各自修正してください。
今回は Bitbucketで develop ブランチにpushした場合のみデプロイゲートにデプロイされるようになっています。

以上です。
CI使えばいろいろできるので、今後も活用していこうと思います!