summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2018-10-04 12:06:34 +0200
committerRémy Coutable <remy@rymai.me>2018-10-08 14:23:58 +0200
commit1922ca0e676695b1cf748569d69776313446403f (patch)
treeb13e9b46dfcf3dbaa675b40a07d868bf7f929183 /scripts
parentecbcda22d31737f343d2e2e79a698cb265340940 (diff)
downloadgitlab-ce-1922ca0e676695b1cf748569d69776313446403f.tar.gz
Improve downstream pipeine trigger class
Signed-off-by: Rémy Coutable <remy@rymai.me>
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/trigger-build73
1 files changed, 49 insertions, 24 deletions
diff --git a/scripts/trigger-build b/scripts/trigger-build
index 0b5fd5995dd..4534fcadebf 100755
--- a/scripts/trigger-build
+++ b/scripts/trigger-build
@@ -1,4 +1,5 @@
#!/usr/bin/env ruby
+# frozen_string_literal: true
require 'gitlab'
@@ -6,38 +7,27 @@ require 'gitlab'
# Configure credentials to be used with gitlab gem
#
Gitlab.configure do |config|
- config.endpoint = 'https://gitlab.com/api/v4'
- config.private_token = ENV['GITLAB_QA_ACCESS_TOKEN'] # gitlab-qa bot access token
+ config.endpoint = 'https://gitlab.com/api/v4'
end
module Trigger
- TOKEN = ENV['BUILD_TRIGGER_TOKEN']
-
def self.ee?
ENV['CI_PROJECT_NAME'] == 'gitlab-ee' || File.exist?('CHANGELOG-EE.md')
end
class Base
- def initialize(api_token)
- Gitlab.private_token = api_token
- end
-
def invoke!(post_comment: false)
pipeline = Gitlab.run_trigger(
downstream_project_path,
- Trigger::TOKEN,
+ trigger_token,
ref,
variables)
- puts "Triggered #{pipeline.web_url}"
+ puts "Triggered downstream pipeline: #{pipeline.web_url}\n"
puts "Waiting for downstream pipeline status"
- begin
- Trigger::CommitComment.post!(downstream_project_path, pipeline) if post_comment
- rescue Gitlab::Error::Error => error
- puts "Ignoring the following error: #{error}"
- end
- Trigger::Pipeline.new(downstream_project_path, pipeline.id)
+ Trigger::CommitComment.post!(pipeline, access_token) if post_comment
+ Trigger::Pipeline.new(downstream_project_path, pipeline.id, access_token)
end
private
@@ -52,6 +42,16 @@ module Trigger
raise NotImplementedError
end
+ # Must be overriden
+ def trigger_token
+ raise NotImplementedError
+ end
+
+ # Must be overriden
+ def access_token
+ raise NotImplementedError
+ end
+
# Can be overriden
def extra_variables
{}
@@ -68,7 +68,10 @@ module Trigger
def base_variables
{
- 'TRIGGERED_USER' => ENV['GITLAB_USER_NAME'],
+ 'TOP_UPSTREAM_TRIGGER_PROJECT' => ENV['TOP_UPSTREAM_TRIGGER_PROJECT'] || ENV['CI_PROJECT_PATH'],
+ 'UPSTREAM_TRIGGER_PROJECT' => ENV['CI_PROJECT_PATH'],
+ 'UPSTREAM_TRIGGER_SOURCE' => ENV['TRIGGER_SOURCE'],
+ 'TRIGGERED_USER' => ENV['TRIGGERED_USER'] || ENV['GITLAB_USER_NAME'],
'TRIGGER_SOURCE' => ENV['CI_JOB_URL']
}
end
@@ -85,13 +88,21 @@ module Trigger
private
def downstream_project_path
- 'gitlab-org/omnibus-gitlab'.freeze
+ 'gitlab-org/omnibus-gitlab'
end
def ref
ENV['OMNIBUS_BRANCH'] || 'master'
end
+ def trigger_token
+ ENV['BUILD_TRIGGER_TOKEN']
+ end
+
+ def access_token
+ ENV['GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN']
+ end
+
def extra_variables
{
'GITLAB_VERSION' => ENV['CI_COMMIT_SHA'],
@@ -112,6 +123,14 @@ module Trigger
ENV['CNG_BRANCH'] || 'master'
end
+ def trigger_token
+ ENV['BUILD_TRIGGER_TOKEN']
+ end
+
+ def access_token
+ ENV['GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN']
+ end
+
def extra_variables
edition = Trigger.ee? ? 'EE' : 'CE'
@@ -134,11 +153,16 @@ module Trigger
end
class CommitComment
- def self.post!(downstream_project_path, downstream_pipeline)
+ def self.post!(downstream_pipeline, access_token)
+ Gitlab.private_token = access_token
+
Gitlab.create_commit_comment(
ENV['CI_PROJECT_PATH'],
ENV['CI_COMMIT_SHA'],
"The [`#{ENV['CI_JOB_NAME']}`](#{ENV['CI_JOB_URL']}) job from pipeline #{ENV['CI_PIPELINE_URL']} triggered #{downstream_pipeline.web_url} downstream.")
+
+ rescue Gitlab::Error::Error => error
+ puts "Ignoring the following error: #{error}"
end
end
@@ -146,15 +170,16 @@ module Trigger
INTERVAL = 60 # seconds
MAX_DURATION = 3600 * 3 # 3 hours
- attr_reader :project, :id
+ attr_reader :project, :id, :api_token
- def initialize(project, id)
+ def initialize(project, id, api_token)
@project = project
@id = id
+ @api_token = api_token
@start = Time.now.to_i
# gitlab-bot's token "GitLab multi-project pipeline polling"
- Gitlab.private_token = ENV['GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN']
+ Gitlab.private_token = api_token
end
def wait!
@@ -197,9 +222,9 @@ end
case ARGV[0]
when 'omnibus'
- Trigger::Omnibus.new(ENV['GITLAB_QA_ACCESS_TOKEN']).invoke!(post_comment: true).wait!
+ Trigger::Omnibus.new.invoke!(post_comment: true).wait!
when 'cng'
- Trigger::CNG.new(ENV['GITLAB_QA_ACCESS_TOKEN']).invoke!.wait!
+ Trigger::CNG.new.invoke!.wait!
else
puts "Please provide a valid option:
omnibus - Triggers a pipeline that builds the omnibus-gitlab package