2016-05-18 18 views
4

多くのテストをしているプロジェクトがあり、それらをすべて実行するには約20分かかります。残念ながら、1つのgitlabランナ内でそれらを並列化することはできません。私は同じ環境でテストスイートが異なる複数のgitlabランナーを起動する良いプラクティスがあるのだろうか?1つのCIビルドに複数のgitlabランナーを使用できますか?

+0

「1つのCIビルド」と言えば、テストスーツを複数の部分に分けることができるかどうかを教えてください。 – tmt

+0

@cascavalはい、私はgitlabに変更をプッシュすると、並列ランナーでテストを行うビルドを開始する必要があることを意味します。実際には、私はジョブとステージでこれを行う方法を見つけました(http://docs.gitlab.com/ce/ci/yaml/README.html#jobs)。しかし、私はよりエレガントな方法があると思う。 – t1maccapp

+0

それは私があなたの答えを書いて始めたときに私があなたに提案しようとしていたものです。なぜなら、複数のランナーによって1つのジョブが実行されるとは思わないので、完了するはずです。私は今あなたが期待どおりに動作するようにいくつかの設定を指している私の答えを追加しました。 – tmt

答えて

11

テストスーツを複数の部分に分割することができれば、同じ段階で同じ数のジョブを作成できます(テスト)。 同じステージのジョブは、と並行して実行されますが、前のステージのジョブが完了すると、次のステージのジョブが開始されます。 ランナーが1人であっても、それらは並行して実行されます。のは、このテストケースを想定してみましょう:

stages: 
    - test 

testsA: 
    stage: test 
    script: 
    - sleep 60 
    - echo 'Test set A done' 

testsB: 
    stage: test 
    script: 
    - sleep 30 
    - echo 'Test set B done' 

ランナーsettingsは/ etc/gitlab-を調整してあなたは、彼らが同時に実行されていることがわかりますし、テストAがテストBの後

を完了します2つのオプションのチェックランナー/ config.toml):

  • concurrentは=ジョブの合計数は、すべてのランナーに並列に実行
  • limit(各ランナーのためのセット)は、ジョブの数が、ある特定のランナーによって並列に実行=

注:複数のランナーとのプロジェクトは、それらのそれぞれは、1からlimitセットを持つ場合、私は希望、テストしていません異なるランナーを使用してこれらのジョブを実行します。しかし、私はそれがこのように動作すると仮定します。

+3

私の設定で失敗した 'concurrent'オプションを指摘してくれてありがとう – CharlyDelta

+0

ファイルは'〜/ .gitlab-runner/config.toml'にあります – Caipivara

関連する問題