summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatija Čupić <matteeyah@gmail.com>2018-10-26 23:23:58 +0200
committerMatija Čupić <matteeyah@gmail.com>2018-10-26 23:24:17 +0200
commit44b740f99dfe6a4344c918fd4c94972aa6f9237e (patch)
tree8fa4e5b14d20022ecf5225a84a49651b24d01607
parentd9b56bc13b94bdc69a14a2b4201e25e141a62ce4 (diff)
downloadgitlab-ce-44b740f99dfe6a4344c918fd4c94972aa6f9237e.tar.gz
Implement POC for job parallelization
-rw-r--r--lib/gitlab/ci/pipeline/seed/build.rb24
-rw-r--r--lib/gitlab/ci/yaml_processor.rb1
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