问题描述
在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分支名称的解决方案。您可以根据您的实际需求选择适合您的方法。