问题:有没有办法在jenkinsfile中获取由管道检出的分支的名称?
注意:我不在Multibranch Pipeline中!
在我的管道中使用
var counter = new Map();
for (i in array)
counter.set(array[i], (counter.get(array[i])||0)+1);
var freq = Array.from(counter.values());
var words = Array.from(counter.keys());
其中checkout([$class: 'GitSCM',
userRemoteConfigs: [[url:'https://github.com/repo',
credentialsId: 'xxxx',name: '1234']]])
是提交ID。我需要验证此提交ID是否来自用户指定为参数的分支(用户指定分支名称和提交ID,我需要在构建项目之前检查是否没有错误。)
为什么分支名称没有在Pipeline中公开,只在Multibranch Pipeline中公开?对我没有意义。
我不想转换为多分支管道有三个原因:
我打印出所有环境变量,分支名称不在其中。
感谢您的帮助!
答案 0 :(得分:5)
如果您正在使用管道代码,我假设您正在执行以下操作:
checkout scm
好的是,这会返回一个包含一些有用内容的地图,您可以通过以下方式从中获取签出的分支:
def scmVars = checkout scm
def branchName = scmVars.GIT_BRANCH
答案 1 :(得分:0)
请参阅Git for Computer Scientists:
refs
:引用,或者头或分支,就像在DAG [Directed Acyclic Graph]中的节点上打了便利贴。由于DAG只被添加到现有节点并且不能被突变,所以post-it可以自由移动。它们不会存储在历史记录中,也不会直接在存储库之间传输。它们充当书签,“我在这里工作”。
这样很容易从分支中找到提交:从分支ref通过图形向下走,但是反过来却很棘手,因为提交可以属于多个分支(如果分支再次分支)后来)。例如。来自Pro Git, 3.1 Git Branching - Branches in a Nutshell:
左边的三个提交属于分支master
和 testing
。
答案 2 :(得分:0)
请参阅Pipeline: Nodes and Processes, sh
: Shell Script :
returnStdout
(可选)如果选中,则任务的标准输出将作为步骤值返回为
String
,而不是打印到构建日志。 (标准错误,如果有的话,仍会打印到日志中。)您经常需要在结果上调用.trim()
以去除尾随换行符。
并查看git-branch:
- 包含[< commit>]
仅列出包含指定提交的分支(如果未指定,则为HEAD)。意为--list
。
将这些与:
结合起来...
def branches = sh(returnStdout: true, script: "git branch --contains ${commitId}")
...
并检查branches
是否包含用户提供的分支名称。
顺便说一句,我会重命名你的变量:
name
是您的提交ID,a.k.a。(提交)哈希,所以我称之为commitId
或commitHash
branchName
,然后让未来的维护者的生活变得更轻松