diff --git a/changelogs/unreleased/326106-correlation-id-to-validation-service.yml b/changelogs/unreleased/326106-correlation-id-to-validation-service.yml new file mode 100644 index 0000000000000000000000000000000000000000..0ab0347ee3a75576c30dcfe61bceee12a49bf9ea --- /dev/null +++ b/changelogs/unreleased/326106-correlation-id-to-validation-service.yml @@ -0,0 +1,5 @@ +--- +title: Add correlation id in X-Request-ID for external pipeline validation +merge_request: 58741 +author: +type: other diff --git a/lib/gitlab/ci/pipeline/chain/validate/external.rb b/lib/gitlab/ci/pipeline/chain/validate/external.rb index 0212a8fcc6f204ec8a89aee71f76737a3a0cbc3d..9d1aeb75ccc747a51007b92eefb13f4e98931ddd 100644 --- a/lib/gitlab/ci/pipeline/chain/validate/external.rb +++ b/lib/gitlab/ci/pipeline/chain/validate/external.rb @@ -69,8 +69,10 @@ def rejected_status end def validate_service_request - headers = {} - headers['X-Gitlab-Token'] = validation_service_token if validation_service_token + headers = { + 'X-Request-ID' => Labkit::Correlation::CorrelationId.current_id, + 'X-Gitlab-Token' => validation_service_token + }.compact Gitlab::HTTP.post( validation_service_url, timeout: validation_service_timeout, diff --git a/spec/lib/gitlab/ci/pipeline/chain/validate/external_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/validate/external_spec.rb index 1fd40b454ff375e7b85733729c58690416a74dcb..980efed3c04f48fc4096cac092e46dffe8d0ea36 100644 --- a/spec/lib/gitlab/ci/pipeline/chain/validate/external_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/chain/validate/external_spec.rb @@ -57,13 +57,14 @@ before do stub_env('EXTERNAL_VALIDATION_SERVICE_URL', validation_service_url) allow(Gitlab).to receive(:com?).and_return(dot_com) + allow(Labkit::Correlation::CorrelationId).to receive(:current_id).and_return('correlation-id') end it 'respects the defined payload schema' do expect(::Gitlab::HTTP).to receive(:post) do |_url, params| expect(params[:body]).to match_schema('/external_validation') expect(params[:timeout]).to eq(described_class::DEFAULT_VALIDATION_REQUEST_TIMEOUT) - expect(params[:headers]).to eq({}) + expect(params[:headers]).to eq({ 'X-Request-ID' => 'correlation-id' }) end perform! @@ -127,7 +128,7 @@ it 'passes token in X-Gitlab-Token header' do expect(::Gitlab::HTTP).to receive(:post) do |_url, params| - expect(params[:headers]).to eq({ 'X-Gitlab-Token' => '123' }) + expect(params[:headers]).to include({ 'X-Gitlab-Token' => '123' }) end perform!