在Jenkins中,我需要具有Git Parameter功能但具有标签创建时间排序选项(在那里不支持)。
我已经实施了一个解决方案,我将其作为答案来帮助寻求此类功能的其他人,但我希望听到有关此问题的评论和意见。
随意提出更多想法。
答案 0 :(得分:2)
目前,为了解决这个问题,我使用Dynamic Parameter Plug-in和我写的Scriptler一些groovy。
我们的想法是将存储库的本地副本缓存在临时位置(稍后可以重用),并使用git log
命令查询它。
我的代码是针对Windows服务器的,但可以轻松更改为支持Linux。
def cloneDirName = "c:\\temp\\${repoName}"
def gitClone = "git clone --bare ${gitURL} ${cloneDirName}"
def gitPull = "cmd.exe /c cd ${cloneDirName} & git fetch origin +refs/heads/*:refs/heads/* --prune"
def gitLogTags = "cmd.exe /c cd ${cloneDirName} & git log --date-order --tags --simplify-by-decoration --pretty=format:%D"
def folder = new File( cloneDirName )
def proc
def action
def text
def list = []
if( !folder.exists() ) {
folder.mkdirs()
proc = gitClone.execute()
action = "cloning"
} else {
// Just update the repo
proc = gitPull.execute()
action = "pulling"
}
//println "${action}..."
proc.waitFor()
if ( proc.exitValue() != 0 ) {
text = "ERROR {$action}"
}
action = "getting tags"
proc = gitLogTags.execute()
proc.waitFor()
text = proc.in.text
// For debug - uncomment and run
//println "${text}"
//println "\n\n***\n\n"
if ( proc.exitValue() != 0 ) {
text = "ERROR {$action}"
list.add(text)
} else {
text = text.replace("\n", ",")
def m = text =~ /tag: [^,]+/
m.each {
// For debug - uncomment and run
// println it
list.add(it.replace("tag:", ""))
}
}
// For debug - uncomment and run
//println "\n\n***\n\n"
list.each { println it }
此设置效果很好,但我想知道是否还有其他建议 我主要担心的是需要预先获取存储库(大型存储库需要时间)。
我希望这会有所帮助。