Jenkins git tag作为按日期排序的参数

时间:2015-12-02 08:25:11

标签: git jenkins

在Jenkins中,我需要具有Git Parameter功能但具有标签创建时间排序选项(在那里不支持)。

我已经实施了一个解决方案,我将其作为答案来帮助寻求此类功能的其他人,但我希望听到有关此问题的评论和意见。

随意提出更多想法。

1 个答案:

答案 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 }

此设置效果很好,但我想知道是否还有其他建议 我主要担心的是需要预先获取存储库(大型存储库需要时间)。

我希望这会有所帮助。