Commit 2998b886 authored by Grzegorz Bizon's avatar Grzegorz Bizon Committed by Rémy Coutable

Add a feedback mechanism to `package-qa` manual action

parent 7c1e54d5
...@@ -152,8 +152,10 @@ stages: ...@@ -152,8 +152,10 @@ stages:
- master@gitlab/gitlabhq - master@gitlab/gitlabhq
- master@gitlab/gitlab-ee - master@gitlab/gitlab-ee
##
# Trigger a package build in omnibus-gitlab repository # Trigger a package build in omnibus-gitlab repository
build-package: #
package-qa:
image: ruby:2.4-alpine image: ruby:2.4-alpine
before_script: [] before_script: []
stage: build stage: build
......
...@@ -2,26 +2,95 @@ ...@@ -2,26 +2,95 @@
require 'net/http' require 'net/http'
require 'json' require 'json'
require 'cgi'
uri = URI('https://gitlab.com/api/v4/projects/20699/trigger/pipeline') module Omnibus
params = { PROJECT_PATH = 'gitlab-org/omnibus-gitlab'.freeze
class Trigger
TOKEN = ENV['BUILD_TRIGGER_TOKEN']
def initialize
@uri = URI("https://gitlab.com/api/v4/projects/#{CGI.escape(Omnibus::PROJECT_PATH)}/trigger/pipeline")
@params = env_params.merge(file_params).merge(token: TOKEN)
end
def invoke!
res = Net::HTTP.post_form(@uri, @params)
id = JSON.parse(res.body)['id']
if id
puts "Triggered https://gitlab.com/#{Omnibus::PROJECT_PATH}/pipelines/#{id}"
else
raise "Trigger failed! The response from the trigger is: #{res.body}"
end
Omnibus::Pipeline.new(id)
end
private
def env_params
{
"ref" => ENV["OMNIBUS_BRANCH"] || "master", "ref" => ENV["OMNIBUS_BRANCH"] || "master",
"token" => ENV["BUILD_TRIGGER_TOKEN"],
"variables[GITLAB_VERSION]" => ENV["CI_COMMIT_SHA"], "variables[GITLAB_VERSION]" => ENV["CI_COMMIT_SHA"],
"variables[ALTERNATIVE_SOURCES]" => true, "variables[ALTERNATIVE_SOURCES]" => true,
"variables[ee]" => ENV["EE_PACKAGE"] || "false" "variables[ee]" => ENV["EE_PACKAGE"] || "false"
} }
end
Dir.glob("*_VERSION").each do |version_file| def file_params
Hash.new.tap do |params|
Dir.glob("*_VERSION").each do |version_file|
params["variables[#{version_file}]"] = File.read(version_file).strip params["variables[#{version_file}]"] = File.read(version_file).strip
end end
end
end
end
res = Net::HTTP.post_form(uri, params) class Pipeline
pipeline_id = JSON.parse(res.body)['id'] INTERVAL = 60 # seconds
MAX_DURATION = 3600 * 3 # 3 hours
unless pipeline_id.nil? def initialize(id)
puts "Triggered pipeline can be found at https://gitlab.com/gitlab-org/omnibus-gitlab/pipelines/#{pipeline_id}" @start = Time.now.to_i
else @uri = URI("https://gitlab.com/api/v4/projects/#{CGI.escape(Omnibus::PROJECT_PATH)}/pipelines/#{id}")
puts "Trigger failed. The response from trigger is: " end
puts res.body
def wait!
loop do
raise 'Pipeline timeout!' if timeout?
case status
when :pending, :running
puts "Waiting another #{INTERVAL} seconds ..."
sleep INTERVAL
when :success
puts "Omnibus pipeline succeeded!"
break
else
raise "Omnibus pipeline did not succeed!"
end
STDOUT.flush
end
end
def timeout?
Time.now.to_i > (@start + MAX_DURATION)
end
def status
req = Net::HTTP::Get.new(@uri)
req['PRIVATE-TOKEN'] = ENV['GITLAB_QA_ACCESS_TOKEN']
res = Net::HTTP.start(@uri.hostname, @uri.port, use_ssl: true) do |http|
http.request(req)
end
JSON.parse(res.body)['status'].to_s.to_sym
end
end
end end
Omnibus::Trigger.new.invoke!.wait!
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