Commit 1922ca0e authored by Rémy Coutable's avatar Rémy Coutable

Improve downstream pipeine trigger class

Signed-off-by: default avatarRémy Coutable <remy@rymai.me>
parent ecbcda22
#!/usr/bin/env ruby #!/usr/bin/env ruby
# frozen_string_literal: true
require 'gitlab' require 'gitlab'
...@@ -7,37 +8,26 @@ require 'gitlab' ...@@ -7,37 +8,26 @@ require 'gitlab'
# #
Gitlab.configure do |config| Gitlab.configure do |config|
config.endpoint = 'https://gitlab.com/api/v4' config.endpoint = 'https://gitlab.com/api/v4'
config.private_token = ENV['GITLAB_QA_ACCESS_TOKEN'] # gitlab-qa bot access token
end end
module Trigger module Trigger
TOKEN = ENV['BUILD_TRIGGER_TOKEN']
def self.ee? def self.ee?
ENV['CI_PROJECT_NAME'] == 'gitlab-ee' || File.exist?('CHANGELOG-EE.md') ENV['CI_PROJECT_NAME'] == 'gitlab-ee' || File.exist?('CHANGELOG-EE.md')
end end
class Base class Base
def initialize(api_token)
Gitlab.private_token = api_token
end
def invoke!(post_comment: false) def invoke!(post_comment: false)
pipeline = Gitlab.run_trigger( pipeline = Gitlab.run_trigger(
downstream_project_path, downstream_project_path,
Trigger::TOKEN, trigger_token,
ref, ref,
variables) variables)
puts "Triggered #{pipeline.web_url}" puts "Triggered downstream pipeline: #{pipeline.web_url}\n"
puts "Waiting for downstream pipeline status" puts "Waiting for downstream pipeline status"
begin Trigger::CommitComment.post!(pipeline, access_token) if post_comment
Trigger::CommitComment.post!(downstream_project_path, pipeline) if post_comment Trigger::Pipeline.new(downstream_project_path, pipeline.id, access_token)
rescue Gitlab::Error::Error => error
puts "Ignoring the following error: #{error}"
end
Trigger::Pipeline.new(downstream_project_path, pipeline.id)
end end
private private
...@@ -52,6 +42,16 @@ module Trigger ...@@ -52,6 +42,16 @@ module Trigger
raise NotImplementedError raise NotImplementedError
end end
# Must be overriden
def trigger_token
raise NotImplementedError
end
# Must be overriden
def access_token
raise NotImplementedError
end
# Can be overriden # Can be overriden
def extra_variables def extra_variables
{} {}
...@@ -68,7 +68,10 @@ module Trigger ...@@ -68,7 +68,10 @@ module Trigger
def base_variables 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'] 'TRIGGER_SOURCE' => ENV['CI_JOB_URL']
} }
end end
...@@ -85,13 +88,21 @@ module Trigger ...@@ -85,13 +88,21 @@ module Trigger
private private
def downstream_project_path def downstream_project_path
'gitlab-org/omnibus-gitlab'.freeze 'gitlab-org/omnibus-gitlab'
end end
def ref def ref
ENV['OMNIBUS_BRANCH'] || 'master' ENV['OMNIBUS_BRANCH'] || 'master'
end end
def trigger_token
ENV['BUILD_TRIGGER_TOKEN']
end
def access_token
ENV['GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN']
end
def extra_variables def extra_variables
{ {
'GITLAB_VERSION' => ENV['CI_COMMIT_SHA'], 'GITLAB_VERSION' => ENV['CI_COMMIT_SHA'],
...@@ -112,6 +123,14 @@ module Trigger ...@@ -112,6 +123,14 @@ module Trigger
ENV['CNG_BRANCH'] || 'master' ENV['CNG_BRANCH'] || 'master'
end end
def trigger_token
ENV['BUILD_TRIGGER_TOKEN']
end
def access_token
ENV['GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN']
end
def extra_variables def extra_variables
edition = Trigger.ee? ? 'EE' : 'CE' edition = Trigger.ee? ? 'EE' : 'CE'
...@@ -134,11 +153,16 @@ module Trigger ...@@ -134,11 +153,16 @@ module Trigger
end end
class CommitComment 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( Gitlab.create_commit_comment(
ENV['CI_PROJECT_PATH'], ENV['CI_PROJECT_PATH'],
ENV['CI_COMMIT_SHA'], 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.") "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
end end
...@@ -146,15 +170,16 @@ module Trigger ...@@ -146,15 +170,16 @@ module Trigger
INTERVAL = 60 # seconds INTERVAL = 60 # seconds
MAX_DURATION = 3600 * 3 # 3 hours 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 @project = project
@id = id @id = id
@api_token = api_token
@start = Time.now.to_i @start = Time.now.to_i
# gitlab-bot's token "GitLab multi-project pipeline polling" # 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 end
def wait! def wait!
...@@ -197,9 +222,9 @@ end ...@@ -197,9 +222,9 @@ end
case ARGV[0] case ARGV[0]
when 'omnibus' 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' when 'cng'
Trigger::CNG.new(ENV['GITLAB_QA_ACCESS_TOKEN']).invoke!.wait! Trigger::CNG.new.invoke!.wait!
else else
puts "Please provide a valid option: puts "Please provide a valid option:
omnibus - Triggers a pipeline that builds the omnibus-gitlab package omnibus - Triggers a pipeline that builds the omnibus-gitlab package
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment