gitlab-branch-source-plugin icon indicating copy to clipboard operation
gitlab-branch-source-plugin copied to clipboard

Build result of MR jobs is reported in the wrong pipeline

Open jmini opened this issue 2 years ago • 5 comments
trafficstars

What feature do you want to see added?

We have a setup with a Jenkinsfile and we start to migrate step-by-step to GitLab (by adding a .gitlab-ci.yml file).

In gitlab some of the jobs have the rule:

  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'

This creates 2 pipelines in GitLab for a given MR:

Pipeline tab for a MR
  • We see that the pipeline at the top is for the MR with IID 1
  • And the one at the button is for the patch branch.

In Jenkins we also have this notion of branch jobs and merge-request jobs:

Jenkins view

But all the Jenkins jobs are reported in the same GitLab pipeline (the branch one and not the MR one), see the external stage in the branch pipeline:

External stage in the pipeline

I think the problem is the way this plugin reports the commit status: https://github.com/jenkinsci/gitlab-branch-source-plugin/blob/dc12a4a064349814682eae6b959a784365aec39c/src/main/java/io/jenkins/plugins/gitlabbranchsource/helpers/GitLabPipelineStatusNotifier.java#L325-L339

Upstream changes

I could not find an open issue for it, but I think one limitation is that there is no API to report a commit status for an open merge request:

Set the pipeline status of a commit https://docs.gitlab.com/ee/api/commits.html#set-the-pipeline-status-of-a-commit

There you can not set anything about the MR.

jmini avatar Dec 20 '22 13:12 jmini

Hi @jmini ,

Can you add the plugins versions and Jenkins versions of your instance? Wich types of events do you put in your Gitlab webhook? The full name of the Jenkins build? And which traits do you configure in your Jenkins pipeline?

Turiok avatar Mar 24 '23 20:03 Turiok

I also have similar problem (GitLab CI and Jenkins CI pipeline running together) https://github.com/jenkinsci/gitlab-branch-source-plugin/pull/316 helped to get status report in correct Pipeline

vklindukh avatar May 04 '23 02:05 vklindukh

We have the same problem. Very interested to know if there will be a fix or if there is already a work around.

cwmrowe avatar May 22 '23 10:05 cwmrowe

Sorry I never did a follow up on that.

Our installation:

Environment
Jenkins: 2.375.1
OS: Linux - 5.13.19-2-MANJARO
Java: 17.0.1 - Eclipse Adoptium (OpenJDK 64-Bit Server VM)
---
ant:487.vd79d090d4ea_e
antisamy-markup-formatter:159.v25b_c67cd35fb_
apache-httpcomponents-client-4-api:4.5.14-150.v7a_b_9d17134a_5
bootstrap5-api:5.2.1-3
bouncycastle-api:2.28
branch-api:2.1092.vda_3c2a_a_f0c11
build-timeout:1.28
caffeine-api:3.1.6-115.vb_8b_b_328e59d8
checks-api:1.8.1
cloudbees-folder:6.815.v0dd5a_cb_40e0e
commons-lang3-api:3.12.0-36.vd97de6465d5b_
commons-text-api:1.10.0-36.vc008c8fcda_7b_
credentials:1224.vc23ca_a_9a_2cb_0
credentials-binding:604.vb_64480b_c56ca_
display-url-api:2.3.7
durable-task:507.v050055d0cb_dd
echarts-api:5.4.0-1
email-ext:2.97
font-awesome-api:6.2.1-1
git:5.0.2
git-client:4.2.0
github:1.37.1
github-api:1.314-431.v78d72a_3fe4c3
github-branch-source:1703.vd5a_2b_29c6cdc
gitlab-api:5.2.0-86.v1ed41a_9cf486
gitlab-branch-source:659.va_685a_51fda_db_
gradle:2.7
handy-uri-templates-2-api:2.1.8-22.v77d5b_75e6953
instance-identity:142.v04572ca_5b_265
ionicons-api:56.v1b_1c8c49374e
jackson2-api:2.15.1-344.v6eb_55303dc3e
jakarta-activation-api:2.0.1-3
jakarta-mail-api:2.0.1-3
javax-activation-api:1.2.0-6
javax-mail-api:1.6.2-9
jaxb:2.3.8-1
jersey2-api:2.39.1-1
jjwt-api:0.11.5-77.v646c772fddb_0
jquery3-api:3.6.1-2
junit:1202.v79a_986785076
ldap:682.v7b_544c9d1512
mailer:448.v5b_97805e3767
matrix-auth:3.1.7
matrix-project:789.v57a_725b_63c79
mina-sshd-api-common:2.10.0-69.v28e3e36d18eb_
mina-sshd-api-core:2.10.0-69.v28e3e36d18eb_
okhttp-api:4.10.0-132.v7a_7b_91cef39c
pam-auth:1.10
pipeline-build-step:491.v1fec530da_858
pipeline-github-lib:42.v0739460cda_c4
pipeline-graph-analysis:202.va_d268e64deb_3
pipeline-groovy-lib:656.va_a_ceeb_6ffb_f7
pipeline-input-step:468.va_5db_051498a_4
pipeline-milestone-step:111.v449306f708b_7
pipeline-model-api:2.2131.vb_9788088fdb_5
pipeline-model-definition:2.2131.vb_9788088fdb_5
pipeline-model-extensions:2.2131.vb_9788088fdb_5
pipeline-rest-api:2.32
pipeline-stage-step:305.ve96d0205c1c6
pipeline-stage-tags-metadata:2.2131.vb_9788088fdb_5
pipeline-stage-view:2.32
plain-credentials:143.v1b_df8b_d3b_e48
plugin-util-api:2.20.0
popper2-api:2.11.6-2
resource-disposer:0.22
scm-api:672.v64378a_b_20c60
script-security:1244.ve463715a_f89c
snakeyaml-api:1.33-95.va_b_a_e3e47b_fa_4
ssh-credentials:305.v8f4381501156
ssh-slaves:2.877.v365f5eb_a_b_eec
sshd:3.303.vefc7119b_ec23
structs:324.va_f5d6774f3a_d
timestamper:1.25
token-macro:359.vb_cde11682e0c
trilead-api:2.84.v72119de229b_7
variant:59.vf075fe829ccb
workflow-aggregator:596.v8c21c963d92d
workflow-api:1213.v646def1087f9
workflow-basic-steps:1017.vb_45b_302f0cea_
workflow-cps:3668.v1763b_b_6ccffd
workflow-durable-task-step:1246.v5524618ea_097
workflow-job:1295.v395eb_7400005
workflow-multibranch:746.v05814d19c001
workflow-scm-step:408.v7d5b_135a_b_d49
workflow-step-api:639.v6eca_cd8c04a_a_
workflow-support:839.v35e2736cfd5c
ws-cleanup:0.45

But it doesn't really matter, since according to me, this is a big limitation in the features offered by the Set the pipeline status of a commit endpoint:

POST /projects/:id/statuses/:sha

doc: https://docs.gitlab.com/ee/api/commits.html#set-the-pipeline-status-of-a-commit

This is the endpoint that is used by the Jenkins plugin "gitlab-branch-source-plugin". The plugin has no chance to report that the commit status is for a pipeline-type = "merge-request" or pipeline-type = "branch"


For me the GitLab issue describing the problem is: https://gitlab.com/gitlab-org/gitlab/-/issues/34378

And those 2 are also interesting:

  • https://gitlab.com/gitlab-org/gitlab/-/issues/344666
  • https://gitlab.com/gitlab-org/gitlab/-/issues/207500

jmini avatar May 30 '23 12:05 jmini

There were recent changes to the way GitLab works.

It is not really what I have expected, and I gave them feedback here: https://gitlab.com/gitlab-org/gitlab/-/issues/34378#note_2301847558

If they do not change anything to their API where commit statuses can be submitted, this Jenkins plugin could listen to the pipeline web-hook as suggested.

This would have to be an opt-in option, since for this to work an almost empty .gitlab-ci.yml file is required.

jmini avatar Jan 17 '25 08:01 jmini