CircleCI 2.0でのスローテスト(テスト遅い)問題対処法を思いつくだけ書き出す ref: https://qiita.com/terrierscript/items/80dede32cc7935193b70
workflows:
version: 2
build: # 通常のビルド
jobs:
- test
- deploy
nightly: # 夜だけビルド
triggers: # triggerでタスクを指定
- schedule: # scheduleで実行
cron: "0 1 * * *" # UTCで記述。この場合は朝10時
filters:
branches:
only:
- master # masterだけ実行
workflows:
version: 2
build:
jobs:
- build:
filters:
branch:
ignore: /no-test-.*/ # no-test-から始まったらテストしない
build-with-slowtest
jobs:
- slowtest:
filters:
branch:
only: # masterとdevelopだけslow test実行
- master
- develop
if(getenv("CI")){
$this->markTestSkipped("skip test");
}
describe("SomeTest", function() {
it("test", function() {
if (process.env.CI) {
this.skip();
}
console.log("Some test");
});
});
describe SomeTest do
it 'SomeTest', :skip => ENV["CI"] do
hoge.should eq(fuga)
end
end
@Category(SlowTests.class)
@Test
public void someTest() {
slowFunction()
}
version: 2
jobs:
prepare:
docker:
- image: circleci/node
steps:
- checkout
- run: yarn install # インストール処理
- persist_to_workspace:
root: ~/project # デフォルトのworking_directiroy
paths: # 保持したいパスを指定
- ./node_modules
test:
# parallelism: 2 ← 例えばこちらだけ並列化して使い回すというようなことをする
docker:
- image: circleci/node
steps:
- checkout
- attach_workspace:
at: ~/project # デフォルトのworking_directiroy
- run: yarn test # テストコマンド実行
workflows:
version: 2
build:
jobs: # prepare -> testの順に行う
- prepare
- test:
requires:
- prepare
- run:
# DBのセットアップ。parallerismを使った場合、それぞれのdockerでDBを分離出来るので、普通に実行して良い
name: db:setup
command: |
bundle exec rails db:setup test
- run:
# testするファイルを特定して、rspecに渡している
name: rspec
command: |
bundle exec rspec -- $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=filesize)
- run: |
some command1
some command2
# キャッシュを復元
- restore_cache:
keys: # keyは複数指定できる。上から順になければ下のキーのキャッシュを見に行く
- rails-demo-{{ checksum "Gemfile.lock" }}
- rails-demo-
# bundle install
- run:
name: Install dependencies
command: bundle install --path=vendor/bundle --jobs 4 --retry 3
# キャッシュを保存
- save_cache:
key: rails-demo-{{ checksum "Gemfile.lock" }}
paths:
- vendor/bundle
workflows:
version: 2
build:
jobs:
- hold:
type: approval
filters:
branch:
ignore: /wip-.*/ # wip-から始まったら手動テストにする
- build:
requires:
- hold
jobs:
build:
docker:
- image: some-image
parallelism: 3
version: 2
jobs:
fornt-test:
docker:
- image: circleci/node
steps:
- checkout
- run: yarn install
- run: yarn test
server-test:
docker:
- image: circleci/ruby
steps:
- checkout
- run: bundle install
- run: bundle exec db:create test
- run: bundle exec rspec
workflows:
version: 2
build:
jobs:
- front-test
- server-test