在JenkinsFile中获取Git分支名称

124次阅读
没有评论

问题描述

在JenkinsFile中想要获取当前Git仓库所在分支的名称。以下是他的代码片段。在这里,他试图将文件推送到当前分支。他尝试了很多方法但未成功。

stage('Push yaml file to bitbucket') {
  steps {
    withCredentials([
      usernamePassword(
        credentialsId: '8e2ca0a6-2dc5-4f89-b76a-03076d6b0843',
        passwordVariable: 'GIT_PASSWORD',
        usernameVariable: 'GIT_USERNAME'
      )
    ]) {
      sh '''
        echo '#!/bin/sh' > /home/jenkins/git_askpass.sh
        echo "exec echo \"${GIT_PASSWORD}\"" > /home/jenkins/git_askpass.sh
        chmod 775 /home/jenkins/git_askpass.sh
        echo "user: ${GIT_USERNAME}"
        GIT_ASKPASS=/home/jenkins/git_askpass.sh
        export GIT_ASKPASS
        cat /home/jenkins/git_askpass.sh
        pwd
        git status
        git checkout feature/OSCCX-44(here I want branch name )
        git config --global user.email "xyz.com"
        git config --global user.name "xyz"
        git add yaml_dev/04-idm-frontend-depl.yaml
        git commit -m "jenkins commit"
        git push https://${GIT_USERNAME}@bitbucket/repository
      '''
    }
  }
}

解决方案

请注意以下操作可能因版本差异而有所不同。

使用Git插件的环境变量

您可以在Jenkins的Pipeline中使用Git插件提供的环境变量来获取当前分支的名称。其中一个有用的环境变量是GIT_BRANCH,它包含当前使用的分支名称。您可以在Pipeline中像这样使用它:

stage('Push to Bitbucket') {
  steps {
    withCredentials([
      usernamePassword(
        credentialsId: '8e2ca0a6-2dc5-4f89-b76a-03076d6b0843',
        passwordVariable: 'GIT_PASSWORD',
        usernameVariable: 'GIT_USERNAME'
      )
    ]) {
      sh '''
        # 其他内容省略
        git checkout ${GIT_BRANCH}
        # 其他内容省略
      '''
    }
  }
}

GIT_BRANCH环境变量包含远程仓库名称(默认为origin),后面跟着当前使用的分支名称,例如”origin/master”或”origin/foo”。

注意事项

请注意,如果您实际上没有在检出Jenkinsfile时检出一个Jenkinsfile(如果您是在Pipeline Script配置窗口中编码),GIT_BRANCH将为null,而Hedi Nasr的解决方案会失败。您可以使用${env.GIT_BRANCH}来访问该变量,以避免出现严重错误,但它仍将为null

如果您在Jenkinsfile执行期间的某个时刻克隆了项目,那么该项目将处于分离状态,即使您以目标分支进行了克隆。在这种情况下,即使您在克隆时指定了目标分支,仓库也会处于分离状态,如下所示:

git status
# HEAD detached at 9a92344

在这种情况下,您需要先将分支检出,然后才能进行提交。您可以事先知道目标分支,并在需要时使用envInject插件的”Properties Content”功能注入它。

您还可以使用以下命令来查看所有分支:

git branch -a

以上是在JenkinsFile中获取Git分支名称的解决方案。您可以根据您的实际需求选择适合您的方法。

正文完