Jenkins - 在每次构建之前检查Git

时间:2013-06-05 07:36:36

标签: java git jenkins continuous-integration

我目前正在与Jenkins建立持续集成系统,我遇到了一个问题:

几乎每个项目都依赖于其他项目。因此,为了执行每日构建,我使用CloudBees Build Flow plugin。它实际上做得非常好,但不是以最佳方式:它构建我告诉它的每个工作,甚至没有检查Git是否有任何变化。因此,我想知道在实际构建项目之前是否有任何方法可以强制Jenkins检查Git是否有任何更改。

PS:对不起我的英语,我不是母语人士

2 个答案:

答案 0 :(得分:0)

不确定,如果您已查看作业设置中的配置。有一个地方可以强制结帐。我有svn链接,类似的东西将与git

enter image description here

如果没有,您可以查找添加手动命令,如下所示。检查您是否可以先安排执行此操作的顺序,然后再构建任务

enter image description here

答案 1 :(得分:0)

最后,我选择坚持使用BuildFlow和Groovy语言,而不是使用脚本,但这只是为了方便,这个解决方案完全适用于shell语言。此外,使用BuildFlow允许您使用Parallel(),同时启动多个作业。

这是我的解决方案:

我找到了插件Jenkins Poll SCM,它在尝试构建SCM之前轮询SCM(仅在必要时)。

CloudBees Build Flow plugin的唯一问题是它不会等待以前的作业完成,因为我没有使用build()方法。为了解决这个问题,我创建了自己的buildWithPolling()方法,等待在继续之前完成工作。我的方法的唯一缺点是它不等待下游作业完成(但我不知道它是否与build()方法一起...)。这是我的方法的代码:

def buildWithPolling(project)
{
    //Connection to the URL starting the polling, and starting the building if needed
    def address = "http://localhost:8080/jenkins/job/" + project + "/poll"
    println "Connexion à " + address + " pour scrutation du Git et build si besoin est."
    def poll = new URL(address)
    poll.openStream()

    //Declaration of variables used to know if the build is still running, or if it is finished
    boolean inProgress = true
    def parser = new XmlParser()
    def rootNode = null;
    address = "http://localhost:8080/jenkins/job/" + project + "/lastBuild/api/xml?depth=1&tree=building&xpath=*/building"

    while(inProgress) {
        //A 5 seconds pause, because we don't need to overload the server
        sleep(5000)  
        //Request sent to the server, to know if the job is finished.
        def baos =new ByteArrayOutputStream()
        baos << new URL(address).openStream()
        rootNode = parser.parseText(new String(baos.toByteArray()))
        inProgress = rootNode.text().toBoolean()
    }
}

这可能不是最佳解决方案,但它对我有用!