diff options
author | Matija Čupić <matteeyah@gmail.com> | 2018-10-26 23:23:58 +0200 |
---|---|---|
committer | Matija Čupić <matteeyah@gmail.com> | 2018-10-26 23:24:17 +0200 |
commit | 44b740f99dfe6a4344c918fd4c94972aa6f9237e (patch) | |
tree | 8fa4e5b14d20022ecf5225a84a49651b24d01607 | |
parent | d9b56bc13b94bdc69a14a2b4201e25e141a62ce4 (diff) | |
download | gitlab-ce-44b740f99dfe6a4344c918fd4c94972aa6f9237e.tar.gz |
Implement POC for job parallelization
-rw-r--r-- | lib/gitlab/ci/pipeline/seed/build.rb | 24 | ||||
-rw-r--r-- | lib/gitlab/ci/yaml_processor.rb | 1 |
2 files changed, 24 insertions, 1 deletions
diff --git a/lib/gitlab/ci/pipeline/seed/build.rb b/lib/gitlab/ci/pipeline/seed/build.rb index 6980b0b7aff..c302acdf073 100644 --- a/lib/gitlab/ci/pipeline/seed/build.rb +++ b/lib/gitlab/ci/pipeline/seed/build.rb @@ -24,6 +24,24 @@ module Gitlab end end + def parallelized? + @attributes[:options].include?(:parallel) + end + + def parallelize_build + builds = [] + + total = @attributes[:options][:parallel] + + total.times do |i| + build = ::Ci::Build.new(attributes.merge(options: { variables: { CI_NODE_INDEX: i + 1, CI_NODE_TOTAL: total } })) + build.name = build.name + "_#{i + 1}/#{total}" + builds << build + end + + builds + end + def attributes @attributes.merge( pipeline: @pipeline, @@ -38,7 +56,11 @@ module Gitlab def to_resource strong_memoize(:resource) do - ::Ci::Build.new(attributes) + if parallelized? + parallelize_build + else + ::Ci::Build.new(attributes) + end end end end diff --git a/lib/gitlab/ci/yaml_processor.rb b/lib/gitlab/ci/yaml_processor.rb index a427aa30683..612d733ad49 100644 --- a/lib/gitlab/ci/yaml_processor.rb +++ b/lib/gitlab/ci/yaml_processor.rb @@ -50,6 +50,7 @@ module Gitlab after_script: job[:after_script], environment: job[:environment], retry: job[:retry], + parallel: job[:parallel], start_in: job[:start_in] }.compact } end |