LoginSignup
2
0

More than 5 years have passed since last update.

CircleCI + AVAでtimed outしてしまう

Last updated at Posted at 2017-12-20

CiecleCIAVAのunitテストを自動実行させているのですが、テストファイル数が増大した時にCircleCIからToo long with no output (exceeded 10m0s)と怒られたので、その対応について書き残します。

前提条件

  • 環境
    • CircleCI
      • 無償版(コンテナは1個)
      • version: 2.0
    • AVA
      • version: 0.20.0
    • Docker
      • image: node:8.9.1
  • 実行するunitテストファイルの合計は約1000個
  • --serialはつけていない
  • ファイル内でtest.serial, async/awaitなど使っているものもあるが基本的には並列実行
  • ローカルのMacでは正常にテストは終了

config.ymlの一部を抜粋します。

config.yml(一部抜粋)
version: 2
jobs:
  unit:
    environment:
      ENV_TYPE: local
      ENV_FILE_PASSWORD: local
    docker:
      - image: node:8.9.1
    working_directory: ~/hoge
    steps:
      - checkout
      - setup_remote_docker
      - run:
          name: Create repository
          command: |
            mkdir -p ./reports
          when: always
      - run:
          name: Install node modules
          command: npm i
      - run:
          name: Run test
          command: npm run coverage
      - store_test_results:
          path: ./reports
      - store_artifacts:
          path: ./reports

上記の、npm run coverageの実態は以下です。

package.json(一部抜粋)
{
  "scripts": {
    "coverage": "nyc --reporter=lcov --reporter=html --report-dir=./reports ava test/unit --tap | tap-xunit > ./reports/ava.xml"
  }
}

現象

上記のnpm run coverageで実際にunitテストを実行し、カバレッジを作成・出力していますが、ここで數十分待っても何も出力されず、Too long with no output (exceeded 10m0s)と出力され、FAILEDとなってました。

AVAのunitテストがこける原因

公式ドキュメントのCLIの項目をみたら、以下のような記載がありました。

readme
--concurrency, -c   Max number of test files running at the same time (Default: CPU cores)

つまり、同時に実行できるテストファイルの最大値はDefault: CPU coresなんだと。上記のように、今回はこのオプションをつけずにAVAを実行していました。

しかし、1ファイルで少々時間のかかるテストファイルがいくつか存在したため、それらを並列に実行して行ったところ、Test exited due to SIGKILLとなってました(SSHで入って手動で実行して初めてわかりました)。プロセスごと殺されているため、AVAに処理が帰って来ず、ずっと何も出力がないため、CircleCIさんが止めた形ですかね。ちなみに、ローカルのMacでは正常にテストは終了したので、ちょっとハマりました。

対策

お察しの通り、-cオプションをつければ問題なく終了しました。ではその値は?ということですが、もちろんDefault: CPU coresとreadmeに記載があるので、

root@801df972f396:~# grep cpu.cores /proc/cpuinfo | sort -u
cpu cores   : 8

上記のようにCPUコア数を確認し(私の場合はコア数が8でした)、AVA のコマンド実行時に-c 8を追加したら通りました。もし他にもこんな方法があるよ!という知見をお持ちの方、ご教示いただけると助かります。

以上です。

▼余談

先ほどの、公式ドキュメントのCLIの項目と、実際にnpmからava@0.24.0(現時点での最新)をインストールしてava --helpを実行した時に差分がありますw

--help
--concurrency, -c       Maximum number of test files running at the same time (EXPERIMENTAL)

え、EXPERIMENTALですか…w

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0