【发布时间】:2018-04-16 08:05:52
【问题描述】:
我是 jenkins/devops 的新手;我关注this example。当我在本地做(从终端):
git rev-parse --abbrev-ref HEAD
我得到了当前分支的名字。但是在 Jenkinsfile 中,在我得到的日志中:
HEAD
上网查了好久,一直没找到原因。这种结果的潜在原因是什么?
其他详情
在我的 jenkinsfile 中,我试图获取当前 git 分支的名称(触发 webhook 的那个),然后将其通过管道传递到 'git branch' 命令中,因此代码如下:
pipeline {
agent {
label 'ubuntu'
}
stages {
stage('check') {
steps {
script {
env.GIT_BRANCH_NAME=sh(returnStdout: true, script: "git rev-parse --abbrev-ref HEAD").trim()
}
sh 'echo BRANCH_NAME ${GIT_BRANCH_NAME}'
git branch: GIT_BRANCH_NAME, credentialsId: '******', url: 'https://*****/*****/*****.git'
}
....
}
排队
sh 'echo BRANCH_NAME ${GIT_BRANCH_NAME}'
返回头
我使用 git name-rev --name-only HEAD 找到了解决方法,并将脚本代码修改为:
script {
env.GIT_BRANCH_PATH=sh(returnStdout: true, script: "git name-rev --name-only HEAD").trim()
env.GIT_BRANCH_NAME=GIT_BRANCH_PATH.split('remotes/origin/')[1]
}
现在我得到了正确的分支名称和步骤,但我宁愿有一种不那么老套的做事方式。
使用最佳实践实现我想要实现的目标的最佳方法是什么?
PS我没有使用多分支管道,并且要求不使用多分支。
【问题讨论】:
-
在 Git 端,通过检查不是分支名称(例如,标签名称、远程跟踪名称或原始哈希 ID)的内容,您会获得“分离的 HEAD” )。一旦你有了它,
git rev-parse --abbrev-ref HEAD将返回HEAD。对我来说,那组特定的 Jenkins 流水线指令看起来相当可疑/错误,但我不是 Jenkins 专家。 -
请输入其余说明,您似乎检查了错误的来源或以错误的方式检查,因为 Torek 说您处于“分离的 HEAD”中,这将有助于了解什么您正在尝试结帐以及实际要结帐的内容..
-
@torek 请检查我在问题中添加的更新。感谢您的帮助!
-
@ivoruJavaBoy 请检查我在问题中添加的更新。感谢您的帮助!
-
正如 torek 提到的,您处于分离的 HEAD 状态并使用 Vijay Ramaswamy 提到的解决方案工作。有时我们只是想太多而忘记了基础
标签: git jenkins jenkins-pipeline