CircleCIのビルド時間を5分短くした話と、スクリプト書いている際に詰まったところを紹介します。

そもそもビルドの長い原因は、LintとTestを1つのコンテナで実行していたため、各6分ずつ時間を要していることでした。
そのため、複数コンテナで実行してみた、というのが今回のQiitaです。

LintとTestの複数コンテナで実行

circle.yml
  override:
    - ./scripts/run_test.sh:
        parallel: true
run_test.sh
#!/bin/bash
case $CIRCLE_NODE_INDEX in
  0) ./gradlew -b lint; cp -r ./app/build/outputs $CIRCLE_ARTIFACTS;;
  1) ./gradlew -b testUnitTest -PdisablePreDex;;
esac

こんな感じで5分短縮できたので非常に幸せです。

parallelでの実行周りで悩んだこと

must be a mapで失敗する

  override:
    - ./scripts/run_test.sh:
      parallel: true

  override:
    - ./scripts/run_test.sh:
        parallel: true

parallelの前にインデントを1つ増やしましょう。

Action failed: Configure the build

  override:
    - ./scripts/run_test.sh
      parallel: true

  override:
    - ./scripts/run_test.sh:
        parallel: true

実行したいコマンドの末尾にコロン(:)を1つ増やしましょう。

deploymentでのparallelの実行

https://circleci.com/docs/parallel-manual-setup/

Please note that since we do not support parallel deployment, specifying ‘parallel:true’ in the deployment phase will cause an error

無理なので諦めましょう。

https://circleci.com/docs/parameterized-builds/
deploymentで並列化させたい処理は別Jobとして実行すると準並列化のように出来るのでおすすめです。