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

Provide easy access to git branch name in (single branch) Pipeline build

    • Icon: Improvement Improvement
    • Resolution: Unresolved
    • Icon: Major Major
    • branch-api-plugin
    • None
    • LTS 2.73.1 (2017-09-13)

      Hello,

      I'm the maintainer of a maven-plugin (https://github.com/ktoso/maven-git-commit-id-plugin ) that exposes certain repository information as properties into the build. A user of of this plugin reported that the branch name is not available with a single branch pipeline build under jenkins. From the plugin perspective we rely (especially for the branch identifier) on the environment properties that are being exposed by the [Git Plugin|https://github.com/ktoso/maven-git-commit-id-plugin ]. In particular we use the GIT_LOCAL_BRANCH or GIT_BRANCH . Unfortunately with Jenkins LTS 2.73.1 (2017-09-13) those environment variables are not available and thus making it impossible to retrieve the branch name.

      Thank you for your time.

       

      Note:

      During my initial debugging I noticed that a user could this get to work when using a parameterized build which is not really beautiful since the parameter used need to be set to GIT_LOCAL_BRANCH or GIT_BRANCH since its then automatically exposed as environment variable (would consider this a dirty hack)...

      pipeline {
          agent any
          parameters {
              string(defaultValue: 'master', description: 'branch', name: 'GIT_BRANCH')
          }
          
          stages {
              stage('Clone sources') {
                  steps {
                      git branch: "${params.GIT_BRANCH}", url: 'https://github.com/ktoso/maven-git-commit-id-plugin.git'
                  }
              }
              
              stage('Build printenv'){
                  steps {
                      sh 'printenv'
                  }
              }
          }
      }
      

       
      Original issue: https://github.com/ktoso/maven-git-commit-id-plugin/issues/325

          [JENKINS-47226] Provide easy access to git branch name in (single branch) Pipeline build

          S L created issue -
          S L made changes -
          Link New: This issue is related to JENKINS-30252 [ JENKINS-30252 ]
          S L made changes -
          Link New: This issue is related to JENKINS-26100 [ JENKINS-26100 ]
          S L made changes -
          Description Original: Hello,

          I'm the maintainer of a maven-plugin ([https://github.com/ktoso/maven-git-commit-id-plugin] ) that exposes certain repository information as properties into the build. A user of of this plugin reported that the branch name is not available with a single branch pipeline build under jenkins. From the plugin perspective we rely (especially for the branch identifier) on the environment properties that are being exposed by the [Git Plugin|[https://github.com/ktoso/maven-git-commit-id-plugin] ]. In particular we use the {{GIT_LOCAL_BRANCH}} or {{GIT_BRANCH}} . Unfortunately with Jenkins LTS 2.73.1 (2017-09-13) those environment variables are not available and thus making it impossible to retrieve the branch name.

          Thank you for your time.

           

          Note:

          During my initial debugging I noticed that a user could this get to work when using a parameterized build which is not really beautiful since the parameter used need to be set to {{GIT_LOCAL_BRANCH}} or {{GIT_BRANCH}} since its then automatically exposed as environment variable (would consider this a dirty hack)...
          {code:java}
          pipeline {
              agent any
              parameters {
                  string(defaultValue: 'master', description: 'branch', name: 'GIT_BRANCH')
              }
              
              stages {
                  stage('Clone sources') {
                      steps {
                          git branch: "${params.GIT_BRANCH}", url: 'https://github.com/ktoso/maven-git-commit-id-plugin.git'
                      }
                  }
                  
                  stage('Build printenv'){
                      steps {
                          sh 'printenv'
                      }
                  }
              }
          }
          {code}
           
          New: Hello,

          I'm the maintainer of a maven-plugin ([https://github.com/ktoso/maven-git-commit-id-plugin] ) that exposes certain repository information as properties into the build. A user of of this plugin reported that the branch name is not available with a single branch pipeline build under jenkins. From the plugin perspective we rely (especially for the branch identifier) on the environment properties that are being exposed by the [Git Plugin|[https://github.com/ktoso/maven-git-commit-id-plugin] ]. In particular we use the {{GIT_LOCAL_BRANCH}} or {{GIT_BRANCH}} . Unfortunately with Jenkins LTS 2.73.1 (2017-09-13) those environment variables are not available and thus making it impossible to retrieve the branch name.

          Thank you for your time.

           

          Note:

          During my initial debugging I noticed that a user could this get to work when using a parameterized build which is not really beautiful since the parameter used need to be set to {{GIT_LOCAL_BRANCH}} or {{GIT_BRANCH}} since its then automatically exposed as environment variable (would consider this a dirty hack)...
          {code:java}
          pipeline {
              agent any
              parameters {
                  string(defaultValue: 'master', description: 'branch', name: 'GIT_BRANCH')
              }
              
              stages {
                  stage('Clone sources') {
                      steps {
                          git branch: "${params.GIT_BRANCH}", url: 'https://github.com/ktoso/maven-git-commit-id-plugin.git'
                      }
                  }
                  
                  stage('Build printenv'){
                      steps {
                          sh 'printenv'
                      }
                  }
              }
          }
          {code}
           
          Original issue: https://github.com/ktoso/maven-git-commit-id-plugin/issues/325

          Jens Beyer added a comment -

          Hitting us, too. Workaround: In Multi Branch Pipeline, you can use

          withEnv(["GIT_BRANCH=$BRANCH_NAME"]) {

              //do something with GIT_BRANCH

          }

          around it.

          Jens Beyer added a comment - Hitting us, too. Workaround: In Multi Branch Pipeline, you can use withEnv( ["GIT_BRANCH=$BRANCH_NAME"] ) {     //do something with GIT_BRANCH } around it.

          I have used following workaround in my pom.xml for maven

          <properties>
            <branch>${git.branch}</branch>
          </properties>

          From jenkins pipeline I call then follwing step

          steps {
            sh 'mvn clean verify -Dbranch=$BRANCH_NAME'
          }

          In my development environment I call mvn without -DBranch, as there maven-git-commit-id-plugin  works fine.

          Torsten Kleiber added a comment - I have used following workaround in my pom.xml for maven <properties>   <branch>${git.branch}</branch> </properties> From jenkins pipeline I call then follwing step steps {   sh 'mvn clean verify -Dbranch=$BRANCH_NAME' } In my development environment I call mvn without -DBranch, as there  maven-git-commit-id-plugin   works fine.

          Ability to build and deploy a specific dockerized branch is seriously crippled by the lack of a branch name variable in Pipeline's Jenkinsfile.

          Instead, you have to hardcode the branch name in the Jenkinsfile for a given branch, and end up with a bunch of branch merging confusion.

          An alternative is to move to multibranch pipeline, but that has different keys, different commit triggers, etc. which is just too much.

          If this variable was available it would definitely simplify our CI.

          Thanks!

          Michael Behrns-Miller added a comment - Ability to build and deploy a specific dockerized branch is seriously crippled by the lack of a branch name variable in Pipeline's Jenkinsfile. Instead, you have to hardcode the branch name in the Jenkinsfile for a given branch, and end up with a bunch of branch merging confusion. An alternative is to move to multibranch pipeline, but that has different keys, different commit triggers, etc. which is just too much. If this variable was available it would definitely simplify our CI. Thanks!

          Removing myself as assignee. My current work assignments do not provide sufficient bandwidth to review these issues and in the majority of cases I am only assigned by virtue of being the default assignee. For the credentials-api and scm-api related plugins I have permission to allocate time reviewing changes to these APIs themselves to ensure these APIs remain cohesive, but that can be handled through PR reviews rather than assigning issues in JIRA

          Stephen Connolly added a comment - Removing myself as assignee. My current work assignments do not provide sufficient bandwidth to review these issues and in the majority of cases I am only assigned by virtue of being the default assignee. For the credentials-api and scm-api related plugins I have permission to allocate time reviewing changes to these APIs themselves to ensure these APIs remain cohesive, but that can be handled through PR reviews rather than assigning issues in JIRA
          Stephen Connolly made changes -
          Assignee Original: Stephen Connolly [ stephenconnolly ]
          Bruce made changes -
          Assignee New: Bruce [ bruce_edge ]

            Unassigned Unassigned
            thesnoozer S L
            Votes:
            10 Vote for this issue
            Watchers:
            11 Start watching this issue

              Created:
              Updated: