terrierscript
7/16/2018 - 9:58 PM

CircleCI 2.0でのスローテスト(テスト遅い)問題対処法を思いつくだけ書き出す ref: https://qiita.com/terrierscript/items/80dede32cc7935193b70

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