8

そこで、PHP プロジェクト用に次のように設定しました。

  • すべてのコードを含む Git リポジトリ。
  • その上で PhpUnderControl が実行されている Cruisecontrol のインスタンス。

CruiseControl プロジェクト ディレクトリに新しいプロジェクトを作成し、2 分ごとに git リポジトリの変更をチェックするようにポーラーを設定しました。この Cruisecontrol インスタンスで 2 つのプロジェクトを実行していますが、最初にセットアップしたプロジェクトは問題なく動作します。

プラットフォーム プロジェクトで発生している問題は、エラー ログに次のように表示されます。

2010-02-04 06:07:27,076 [Thread-14061] INFO プロジェクト - プロジェクト プラットフォーム: ブートストラップ  
2010-02-04 06:07:27,077 [Thread-14061] INFO ProjectController - プラットフォーム コントローラー: ビルド進行状況イベント: ブートストラップ  
2010-02-04 06:07:27,496 [Thread-14061] INFO GitBootstrapper - すでに最新です。  
2010-02-04 06:07:27,500 [Thread-14061] INFO プロジェクト - プロジェクト プラットフォーム: 変更の確認  
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 までしか戻りません。  
2010-02-04 06:07:27,584 [Thread-14063] 警告 Git - 致命的: 無効なリビジョン範囲 @{ 1264038932}..@{ 1265281647}  
2010-02-04 06:07:27,584 [Thread-14061] INFO プロジェクト - プロジェクト プラットフォーム: 変更が見つかりません。ビルドは不要です。  
2010-02-04 06:07:27,584 [スレッド-14061] INFO プロジェクト - プロジェクト プラットフォーム: アイドル状態  
2010-02-04 06:07:27,584 [Thread-14061] INFO ProjectController - プラットフォーム コントローラー: ビルド進行状況イベント: アイドル

ここで奇妙なことに、プロジェクト ディレクトリを確認すると、コード ベースが更新されます。(作業ディレクトリでいくつかの小さなコミットでテストしました。) 問題は、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エラーの検索では、良い洞察が得られなかったので、ここの誰かが知っていることを願っています!

4

2 に答える 2

1

gitがチェックアウトするためのブランチセットがないようです。すぐに修正する方法はわかりませんが、それが進むべき方向かもしれません。

于 2010-02-15T11:59:45.200 に答える
1

クイックフィックス:

これを修正する最もクリーンで迅速な方法は、プロジェクト タグに requireModification="false" を設定することです。ビルドが起動するのを待ってから、requireModification="true" を再度設定します。これにより、使用可能な git ログの変更の範囲内にある新しい以前のビルド日付が作成されます。

詳細:

これは、クルーズ コントロール環境内でリポジトリを再クローンしたときに発生しました。これにより、リポジトリのログのローカル作業コピーが、cruisecontrol が最後に実行したビルドまで戻らないという問題が発生します。

何が起こるかというと、最終ビルド日がローカルの作業リポジトリ内の最も古い変更記録よりも古いということです:( ouch.

これは gitbootstrapper では発生していません。ブートストラップは問題なく実行されています。

参照: 2010-02-04 06:07:27,496 [Thread-14061] INFO GitBootstrapper - 既に最新です。

エラーなし。よかったです。

この問題は、「getModifications」を呼び出したときに ProjectController によって実行されるように、Git によって報告されています。

見る:

2010-02-04 06:07:27,500 [Thread-14061] INFO ProjectController - プラットフォーム コントローラー: ビルド進行状況イベント: 変更の確認
2010-02-04 06:07:27,583 [Thread-14063] WARN Git - 警告: ログ'' は 2010 年 1 月 26 日 13:43:11 -0500 までしか戻りません。

Git クラスで実行されるコードは、net.sourceforge.cruisecontrol.Git.getModifications にあります。

実行されるコマンドは次のとおりです。

git log -p --pretty=raw @{タイムスタンプ}..@{タイムスタンプ}

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

基本的な問題は、パラメーターが最初のタイムスタンプに渡されることです。cruisecontrol はプログラムされたとおりに実行しますが、requireModification="true" の場合、レポジトリに記録がない日付間の変更をチェックするよう求めています。その後、変更が見つからないためシャットダウンします。

于 2011-03-03T22:56:43.977 に答える