我是jenkins/devops的新手; 我正在关注这个例子.当我在当地做(从终端):
git rev-parse --abbrev-ref HEAD
Run Code Online (Sandbox Code Playgroud)
我得到了当前分支的名称.但是从Jenkinsfile中,我得到的日志中:
HEAD
Run Code Online (Sandbox Code Playgroud)
在线研究了一段时间,到目前为止找不到原因.这种结果的潜在原因是什么?
在我的jenkins文件中,我试图获取当前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'
}
....
}
Run Code Online (Sandbox Code Playgroud)
在线
sh 'echo BRANCH_NAME ${GIT_BRANCH_NAME}'
Run Code Online (Sandbox Code Playgroud)
给了HEAD
我找到了一种解决方法,使用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]
}
Run Code Online (Sandbox Code Playgroud)
现在我得到了正确的分支名称和步骤,但我宁愿采用不那么苛刻的方式做事.
使用最佳实践实现我想要实现的目标的最佳方法是什么?
PS我没有使用多分支管道,并且要求不使用多分支.