[英]Jenkins - Pipeline access git branch name
问题:是否有任何方法可以在jenkinsfile中获取由管道签出的分支的名称?
注意 :我不在多分支管道中!
在我的管道中即时通讯使用
checkout([$class: 'GitSCM',
userRemoteConfigs: [[url:'https://github.com/repo',
credentialsId: 'xxxx',name: '1234']]])
其中name
是提交ID。 我需要验证此提交ID来自用户已将其指定为参数的分支(用户同时指定了分支名称和提交ID,并且我需要在构建项目之前检查是否没有错误)。
为什么分支名称未在管道中公开,而仅在多分支管道中公开? 对我来说没有意义。
我不想转换为多分支管道的原因有三个:
我已经打印出所有环境变量,分支名称不在其中。
谢谢您的帮助!
如果您使用的是管道代码,那么我假设您正在执行以下操作:
checkout scm
令人高兴的是,这将返回一个包含一些有用内容的地图,您可以通过以下方式从中获取已签出的分支:
def scmVars = checkout scm def branchName = scmVars.GIT_BRANCH
returnStdout
(可选)如果选中,则任务的标准输出将作为步骤值作为
String
,而不是打印到构建日志中。 (如果有标准错误,仍然会打印到日志中。)您通常会希望在结果上调用.trim()
来删除尾随的换行符。
并查看git-branch :
-包含[<commit>]
仅列出包含指定提交的分支(如果未指定,则为HEAD)。 暗示--list
。
将它们与:
...
def branches = sh(returnStdout: true, script: "git branch --contains ${commitId}")
...
检查branches
是否包含用户指定的分支名称。
顺便说一句,我重命名了您的变量,因为:
name
是您的提交ID,又名(提交)哈希,因此我将其commitId
或commitHash
branchName
,这样可以使将来的维护者的生活更轻松 关于:
为什么分支名称不公开[...]?
请参阅计算机科学家的Git :
refs
:引用或头或分支,就像在DAG [有向无环图]中的某个节点上拍的便笺一样。 在仅添加DAG且无法更改现有节点的情况下,后期可以自由移动。 它们不会存储在历史记录中,也不会在存储库之间直接传输。 它们就像书签一样,“我在这里工作”。
这样就很容易从分支中找到一个提交:通过从分支ref遍历整个图,但是反过来比较棘手,因为一个提交可以属于多个分支(如果该分支以后再分支一次)。 例如,来自Pro Git的3.1 Git分支-坚果壳中的分支,其中左边的三个提交都属于分支master
和 testing
:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.