PhpUnderControl持续集成设置中的Git日志错误

时间:2010-02-04 18:01:36

标签: git continuous-integration cruisecontrol phpundercontrol

所以我为我的PHP项目设置了以下内容:

  • 包含所有代码的Git存储库。
  • 在其上运行PhpUnderControl的Cruisecontrol实例。

我在cruisecontrol项目目录中创建了一个新项目,并设置了一个轮询器,每2分钟检查一次git repo上的更改。我在这个Cruisecontrol实例中运行了2个项目,我设置的第一个项目运行得很好。

我在Platform项目中遇到的问题在错误日志中如下所示:

2010-02-04 06:07:27,076 [Thread-14061] INFO  Project           - Project platform:  bootstrapping  
2010-02-04 06:07:27,077 [Thread-14061] INFO  ProjectController - platform Controller: build progress event: bootstrapping  
2010-02-04 06:07:27,496 [Thread-14061] INFO  GitBootstrapper   - Already up-to-date.  
2010-02-04 06:07:27,500 [Thread-14061] INFO  Project           - Project platform:  checking for modifications  
2010-02-04 06:07:27,500 [Thread-14061] INFO  ProjectController - platform Controller: build progress event: checking for modifications  
2010-02-04 06:07:27,583 [Thread-14063] WARN  Git               - warning: Log for '' only goes back to Tue, 26 Jan 2010 13:43:11 -0500.  
2010-02-04 06:07:27,584 [Thread-14063] WARN  Git               - fatal: Invalid revision range @{ 1264038932}..@{ 1265281647}  
2010-02-04 06:07:27,584 [Thread-14061] INFO  Project           - Project platform:  No modifications found, build not necessary.  
2010-02-04 06:07:27,584 [Thread-14061] INFO  Project           - Project platform:  idle  
2010-02-04 06:07:27,584 [Thread-14061] INFO  ProjectController - platform Controller: build progress event: idle

这里奇怪的是,当我检查项目目录时,代码库会更新。 (我在我的工作目录中进行了一些小的提交测试。)问题是,由于Git错误,它从未运行任何其他构建过程。

如果我直接进入projects/platform目录并执行git pull,它可以正常工作。从项目目录中执行ant构建也可以正常工作。

以下是相关的配置文件:

<project name="platform" buildafterfailed="false">
    <plugin name="git" classname="net.sourceforge.cruisecontrol.sourcecontrols.Git" />

    <modificationset quietperiod="60">
        <git localWorkingCopy="projects/${project.name}/" />
    </modificationset>

    <bootstrappers>
        <gitbootstrapper localWorkingCopy="projects/${project.name}/" />
    </bootstrappers>

    <schedule interval="120">
        <ant antscript="/usr/bin/ant" buildfile="projects/${project.name}/build.xml" />
    </schedule>

    <listeners>
        <currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
    </listeners>

    <log dir="logs/${project.name}">
        <merge dir="projects/${project.name}/build/logs/" />
    </log>

    <publishers>
        <artifactspublisher dir="projects/${project.name}/build/api"
                            dest="artifacts/${project.name}"
                            subdirectory="api"/>
        <artifactspublisher dir="projects/${project.name}/build/coverage"
                            dest="artifacts/${project.name}"
                            subdirectory="coverage"/>
        <execute command="phpuc graph logs/${project.name} artifacts/${project.name}"/>
        <execute command="phpcb 
                          --log projects/${project.name}/build/logs
                          --source projects/${project.name}/lib/model
                          --ouput projects/${project.name}/build/php-code-browser" />
        <artifactspublisher dir="projects/${project.name}/build/php-code-browser"
                            dest="artifacts/${project.name}"
                            subdirectory="php-code-browser" />
    </publishers>
</project>

我对git错误的搜索没有给我任何好的见解,所以希望有人在这里知道!

2 个答案:

答案 0 :(得分:1)

看起来git没有为checkout设置分支。我不知道如何立即解决这个问题,但这可能是我要走的路。

答案 1 :(得分:1)

快速修复:

解决此问题的最简洁,最快捷的方法是在项目代码上设置requireModification =“false”。等待构建触发,然后再次设置requireModification =“true”。这将产生一个新的上一个构建日期,该日期在可用的git日志更改范围内。

详细说明:

当我在巡航控制环境中重新克隆我的存储库时,发生了这种情况。这会产生一个问题,即存储库日志的本地工作副本不会返回到巡航控制执行的最后一次构建。

您的上一个构建日期早于本地工作存储库中最早的更改记录:(哎哟。

gitbootstrapper中没有发生这种情况。你的引导程序执行得很好。

请参阅:2010-02-04 06:07:27,496 [Thread-14061] INFO GitBootstrapper - 已经是最新的。

没有错误。我们很好。

Git正在报告问题,由ProjectController在调用“getModifications”时执行

见:

2010-02-04 06:07:27,500 [Thread-14061] INFO ProjectController - 平台控制器:构建进度事件:检查修改
2010-02-04 06:07:27,583 [Thread-14063]警告Git - 警告:记录''只能回到2010年1月26日星期二13:43:11 -0500。

Git类中执行的代码位于net.sourceforge.cruisecontrol.Git.getModifications

执行的命令是:

git log -p --pretty = raw @ {timestamp} .. @ {timestamp}

例如:git log -p --pretty = raw @ {1292455850} .. @ {1299108639}

基本问题是参数被传递到第一个时间戳,cruisecontrol正在完成它编程要做的事情,但我们要求它检查我们的存储库没有记录的日期之间的变化,如果requireModification =“真的“,那么它会在没有修改的情况下关闭!