diff options
| author | Lin Jen-Shin <godfat@godfat.org> | 2017-11-30 15:20:00 +0800 |
|---|---|---|
| committer | Lin Jen-Shin <godfat@godfat.org> | 2017-11-30 15:20:00 +0800 |
| commit | 85be6d83be4632c76760e373da131a90afb093b9 (patch) | |
| tree | 7ed7312dd8ad6e8e0ebd30b78774261c30c55d4e /scripts/trigger-build-omnibus | |
| parent | 689658456f706be7278fbf50fcde9c7f43cd0655 (diff) | |
| parent | f7254a4060b30e3134c6cf932eaba0fc8e249e9a (diff) | |
| download | gitlab-ce-85be6d83be4632c76760e373da131a90afb093b9.tar.gz | |
Merge remote-tracking branch 'upstream/master' into no-ivar-in-modules
* upstream/master: (170 commits)
support ordering of project notes in notes api
Redirect to an already forked project if it exists
Reschedule the migration to populate fork networks
Create fork networks for forks for which the source was deleted.
Fix item name and namespace text overflow in Projects dropdown
Minor backport from EE
fix link that was linking to `html` instead of `md`
Backport epic tasklist
Add timeouts for Gitaly calls
SSHUploadPack over Gitaly is now OptOut
fix icon colors in commit list
Fix star icon color/stroke
Backport border inline edit
Add checkboxes to automatically run AutoDevops pipeline
BE for automatic pipeline when enabling Auto DevOps
I am certainly weary of debugging sidekiq but I don't think that's what was meant
Ensure MRs always use branch refs for comparison
Fix issue comment submit button disabled on GFM paste
Lock seed-fu at the correct version in Gemfile.lock
Improve indexes on merge_request_diffs
...
Diffstat (limited to 'scripts/trigger-build-omnibus')
| -rwxr-xr-x | scripts/trigger-build-omnibus | 107 |
1 files changed, 88 insertions, 19 deletions
diff --git a/scripts/trigger-build-omnibus b/scripts/trigger-build-omnibus index dcda70d7ed8..0c662ac19d2 100755 --- a/scripts/trigger-build-omnibus +++ b/scripts/trigger-build-omnibus @@ -2,26 +2,95 @@ require 'net/http' require 'json' +require 'cgi' -uri = URI('https://gitlab.com/api/v4/projects/20699/trigger/pipeline') -params = { - "ref" => ENV["OMNIBUS_BRANCH"] || "master", - "token" => ENV["BUILD_TRIGGER_TOKEN"], - "variables[GITLAB_VERSION]" => ENV["CI_COMMIT_SHA"], - "variables[ALTERNATIVE_SOURCES]" => true, - "variables[ee]" => ENV["EE_PACKAGE"] || "false" -} - -Dir.glob("*_VERSION").each do |version_file| - params["variables[#{version_file}]"] = File.read(version_file).strip -end +module Omnibus + 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", + "variables[GITLAB_VERSION]" => ENV["CI_COMMIT_SHA"], + "variables[ALTERNATIVE_SOURCES]" => true, + "variables[ee]" => ENV["EE_PACKAGE"] || "false" + } + end + + def file_params + Hash.new.tap do |params| + Dir.glob("*_VERSION").each do |version_file| + params["variables[#{version_file}]"] = File.read(version_file).strip + end + end + end + end -res = Net::HTTP.post_form(uri, params) -pipeline_id = JSON.parse(res.body)['id'] + class Pipeline + INTERVAL = 60 # seconds + MAX_DURATION = 3600 * 3 # 3 hours -unless pipeline_id.nil? - puts "Triggered pipeline can be found at https://gitlab.com/gitlab-org/omnibus-gitlab/pipelines/#{pipeline_id}" -else - puts "Trigger failed. The response from trigger is: " - puts res.body + def initialize(id) + @start = Time.now.to_i + @uri = URI("https://gitlab.com/api/v4/projects/#{CGI.escape(Omnibus::PROJECT_PATH)}/pipelines/#{id}") + end + + 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 + +Omnibus::Trigger.new.invoke!.wait! |
