Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-43693

multibranchPipelineJob overrides old branch indexing sources

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Major
    • Resolution: Fixed
    • Component/s: job-dsl-plugin
    • Labels:
      None
    • Environment:
      Debian 8
      Jenkins 2.46.1 (as service)

      Plugins (all newest stable):
      Job DSL 1.61
      Pipeline: Multibranch 2.14
    • Similar Issues:
    • Released As:
      job-dsl 1.75

      Description

      When running the multibranchPipelineJob step it seems like it overrides the sources of a Multibranch Pipeline Job instead of just updating it. After running the step, even though nothing has changed the output of the branch indexing will become:

      Checking branch master
            ‘Jenkinsfile’ found
      Met criteria
      Takeover for job-dsl-plugin_multibranch » master by source #1 from source that no longer exists
      Branch reopened: master (b409f3996299dd12244d6cf7f8b6d8df3aa674ca)
      Scheduled build for branch: master
      

       

      To test this, I have installed a brand new Jenkins with the Pipeline plugins and Job DSL plugin (all as the stable version) and made a freestyle job, with a Job DSL step that has the following script:

      multibranchPipelineJob('job-dsl-plugin_multibranch') {
        branchSources {
          git { 
            remote('https://github.com/jenkinsci/job-dsl-plugin.git')
          }
        }
      }
      

       

      After running the Job DSL step and afterwards running branch indexing a "master" job is created with the following log message from branch indexing:

      Checking branch master
            ‘Jenkinsfile’ found
      Met criteria
      Scheduled build for branch: master
      

       

      When running branch indexing again, following log message are shown as expected:

      Checking branch master
            ‘Jenkinsfile’ found
      Met criteria
      No changes detected: master (still at b409f3996299dd12244d6cf7f8b6d8df3aa674ca)
      

       

      However, if I run the Job DSL again and run branch indexing, the first log message (with takeover and so on) are shown. This is not what I would have expected, I would have expected something like a "no changes detected" message.

       

        Attachments

          Issue Links

            Activity

            Hide
            daspilker Daniel Spilker added a comment -

            PR for improving the documentation and removing support for randomly generated identifiers:

            https://github.com/jenkinsci/job-dsl-plugin/pull/1187

            To sum things up, you need to set a constant and unique identifier for each branch source to make things work. That's a delicacy of the SCM API plugin. There must be unique identifier for each branch source, no two branch sources either in the same or different jobs may share the same ID. It's your responsibility to keep the ID unique when using Job DSL. The ID must not change over time, e.g. on the next run of the seed job.

            Show
            daspilker Daniel Spilker added a comment - PR for improving the documentation and removing support for randomly generated identifiers: https://github.com/jenkinsci/job-dsl-plugin/pull/1187 To sum things up, you need to set a constant and unique identifier for each branch source to make things work. That's a delicacy of the SCM API plugin. There must be unique identifier for each branch source, no two branch sources either in the same or different jobs may share the same ID. It's your responsibility to keep the ID unique when using Job DSL. The ID must not change over time, e.g. on the next run of the seed job.
            Hide
            renescheibe René Scheibe added a comment - - edited

            Daniel Spilker is there a way in Job DSL to resemble the automatic id creation as done when the job is created via the UI? Or can the id automatically be set only on job creation but not changed when updating the job?

            Show
            renescheibe René Scheibe added a comment - - edited Daniel Spilker is there a way in Job DSL to resemble the automatic id creation as done when the job is created via the UI? Or can the id automatically be set only on job creation but not changed when updating the job?
            Hide
            daspilker Daniel Spilker added a comment -

            René Scheibe Job DSL should not replicate any plugin logic. The behavior will change over time, will most likely fail silently and cause more problems.

            I'll close this issue since there no more known problems.

            Show
            daspilker Daniel Spilker added a comment - René Scheibe Job DSL should not replicate any plugin logic. The behavior will change over time, will most likely fail silently and cause more problems. I'll close this issue since there no more known problems.
            Hide
            renescheibe René Scheibe added a comment -

            Still an issue: Enforcing to manually set the id is only possible for branch sources explicitly implemented in Job DSL. For branch sources that are provided via "dynamic" DSL that's not enforced.

            That's for example all the sources under branchSources - branchSource which are for example:

            • bitbucket
            • git
            • github
            • mercurialSCMSource
            • subversionSCMSource

            Do you think these can also be covered somehow?

            Show
            renescheibe René Scheibe added a comment - Still an issue: Enforcing to manually set the id is only possible for branch sources explicitly implemented in Job DSL. For branch sources that are provided via "dynamic" DSL that's not enforced. That's for example all the sources under branchSources - branchSource which are for example: bitbucket git github mercurialSCMSource subversionSCMSource Do you think these can also be covered somehow?
            Hide
            kivagant Eugene G added a comment -

            I faced the same issue even though I don't use the Job DSL plugin to configure a GitHub Organization pipeline. It was created in UI. Any workarounds?

            Show
            kivagant Eugene G added a comment - I faced the same issue even though I don't use the Job DSL plugin to configure a GitHub Organization pipeline. It was created in UI. Any workarounds?

              People

              • Assignee:
                daspilker Daniel Spilker
                Reporter:
                anigif Anders Kielsholm
              • Votes:
                1 Vote for this issue
                Watchers:
                15 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: