diff --git a/app/models/hooks/service_hook.rb b/app/models/hooks/service_hook.rb index eef24052a064fa5248f56317b9df8b5b00b7401b..8d74c8d1b0ad481fdb9577263a38c53852515461 100644 --- a/app/models/hooks/service_hook.rb +++ b/app/models/hooks/service_hook.rb @@ -1,7 +1,7 @@ class ServiceHook < WebHook belongs_to :service - def execute(data) - super(data, 'service_hook') + def execute(data, hook_name = 'service_hook') + super(data, hook_name) end end diff --git a/app/models/project_services/jenkins_service.rb b/app/models/project_services/jenkins_service.rb index a2217c05abb2f11b57aef2c18f9679eb38ff17e2..141e91fba75a50317c00f70a9df298612215c77b 100644 --- a/app/models/project_services/jenkins_service.rb +++ b/app/models/project_services/jenkins_service.rb @@ -46,14 +46,9 @@ def compose_service_hook end def execute(data) - self.class.post( - hook_url, - body: data.to_json, - headers: { - 'Content-Type' => 'application/json', - 'Authorization' => "Basic #{auth}" - } - ) + return unless supported_events.include?(data[:object_kind]) + + service_hook.execute(data, "#{data[:object_kind]}_hook") end def test(data) diff --git a/spec/models/project_services/jenkins_service_spec.rb b/spec/models/project_services/jenkins_service_spec.rb index 5c3a5620c02cdbae4bae5cf40b08742e8fd58102..f0273ba07ade5e76e6cec1a71c332435d7bd6901 100644 --- a/spec/models/project_services/jenkins_service_spec.rb +++ b/spec/models/project_services/jenkins_service_spec.rb @@ -74,6 +74,30 @@ end end + describe '#execute' do + it 'adds default web hook headers to the request' do + user = create(:user, username: 'username') + project = create(:project, name: 'project') + push_sample_data = Gitlab::PushDataBuilder.build_sample(project, user) + jenkins_service = described_class.create( + active: true, + project: project, + properties: { + jenkins_url: 'http://jenkins.example.com/', + project_name: 'my_project' + } + ) + stub_request(:post, jenkins_service.hook_url) + + jenkins_service.execute(push_sample_data) + + expect( + a_request(:post, jenkins_service.hook_url) + .with(headers: { 'X-Gitlab-Event' => 'Push Hook' }) + ).to have_been_made.once + end + end + describe 'Stored password invalidation' do let(:project) { create(:project) }