17

私のAntbuild.xmlスクリプトは

<property environment="env"/>
<echo>GIT_BRANCH = ${env.GIT_BRANCH}</echo>
<echo>PWD = ${env.PWD}</echo> 

Hudson CIは、ブランチが変更されたときにビルドするように設定されています。コンソール出力は...

Commencing build of Revision 90906a63929e9074035eb5b10c71ee055ad3e13c (origin/DPM-48)
GitAPI created
Checking out Revision 90906a63929e9074035eb5b10c71ee055ad3e13c (origin/DPM-48)
[workspace] $ git.exe checkout -f 90906a63929e9074035eb5b10c71ee055ad3e13c
[workspace] $ cmd.exe /C '"C:\Program Files\WinAnt\bin\ant.bat" -file build.xml ...'
 [echo] GIT_BRANCH = ${env.GIT_BRANCH}
 [echo] PWD = /cygdrive/d/.hudson

コンソール出力から、HudsonはトピックブランチDPM-48を構築していることを認識していますが、環境変数GIT_BRANCHが設定されておらず、「gitbranch」はgitが「detachedHEAD」状態にあることを返します。

* (no branch)
master
DPM-48

私が知りたいのは、ハドソンに構築しているブランチです。これを行う方法が必要です。

4

3 に答える 3

33

解決済み

ハドソンバグ6856のabayerによるコメントを見た後、私は次の手順を実行しました。

  • Hudsonプラグインマネージャーを使用して、Hudson Gitプラグインバージョン1.1)を更新し、abayerの修正を取得しました。
  • Hudson Job Configurationを使用して、[Source Code Management]-> [BranchestoBuild]の下の[Advanced]ボタンをクリックしました。次に、「使用するローカルブランチ」を名前に使用するものに変更しました。何でも構いません。
  • 次に、[保存]ボタンをクリックして、[今すぐビルド]でビルドを開始しました

代替テキスト

ビルドログには

[workspace] $ git.exe checkout -b ChangeTester d6caef27759495c5714923c1ddf19551a70d6083

それ以外の

[workspace] $ git.exe checkout -f d6caef27759495c5714923c1ddf19551a70d6083

つまり、私は「切り離されたヘッド」状態ではないため、コミット、タグの作成、およびプッシュを実行できます。

'git rev-parse HEAD'を使用してコミットハッシュを取得し、必要に応じて'gitshow-ref'の出力でブランチの実際の名前を見つけることができます。

これで、成功したビルドタグをgitリポジトリにプッシュできるようになりました。

于 2010-10-29T20:52:04.253 に答える
10

注:OP milkplusのコメントは、最近のハドソンバグ6856(2010年6月)に言及しています。

Gitは、何があってもヘッドを取り外して構築します

その特定の問題が解決されるかどうかは不明ですが(回答は、実際には「設計どおりに機能する」可能性があることを示唆しています!)、このバージョンのhudson Gitプラグインも参照しており、ローカルブランチをチェックアウトできます。


gitプラグインが現在機能しているDETACHED HEADため、ブランチではなくコミットSHA1を直接チェックアウトしたためHEADです。

切り離されている間の状態はHEAD、どのブランチにも記録されません(これは当然のことですが、どのブランチにもありません)。これが意味するのは、既存のブランチに切り替えることで、一時的なコミットとマージを破棄できるということです。

構築スクリプトは、最初に、関連するコミットがどのブランチから来ているかを見つけようとする可能性があります。


ハドソンGitプラグインのソースコードを見て実現したOPmilkplusとして:

public void buildEnvVars(AbstractBuild build, java.util.Map<String, String> env) {
    super.buildEnvVars(build, env);
    String branch = getSingleBranch(build);
    if(branch != null){
        env.put(GIT_BRANCH, branch);
    }
}

環境変数GIT_BRANCHが設定されていますが、xmlビルドスクリプトに値がないようです。

<property environment="env"/>
<echo>GIT_BRANCH = ${env.GIT_BRANCH}</echo>

その場合は、問題7554が原因である可能性があります。

GIT_BRANCHビルドに複数のブランチが選択されている場合は設定されません

現在のビルドがどのブランチにあるかを特定しようとすると、ビルドするGIT_BRANCHブランチが1つ以上選択されている場合、環境変数が設定されていないことがわかりました。

これは機能リクエストほどのバグではないと思いますGIT_BRANCH。envvarは単一のブランチがある場合にのみ設定されるため、複数のブランチがある場合は関係ありません。このコンテキストで複数のブランチのenv変数をどのようにフォーマットするかわかりません。

GIT_BRANCH現在建設中の支店に設定するのではないかと思いました。ビルドがマスター上にある場合と同様に、マスターが含まれます。

これは、たとえば、このビルド中にビルドされたブランチを別のリモートにプッシュするのに役立ちます。または、ビルドする正しいブランチセットを使用して別のビルドをトリガーします。

ここで説明するNPEのミラーの種類

代替テキスト

何らかの理由で、GitプラグインはGIT_BRANCH環境変数にnull値を渡し始めました。
これにより、MavenプラグインのSystem.getProperties().putAll(systemProps)呼び出しが失敗しました。

解決策は、" "または空の文字列masterの代わりに""をデフォルトのGitブランチとして使用することでした。**

于 2010-10-04T19:52:05.483 に答える
2

このソリューションを共有していただき、ありがとうございます。

ローカルブランチを設定するためのこのオプションのダイアログを見つけるのに苦労しました-そしてこれが2015年にも現在のアプローチであることを他の人に示すために、ジェンキンスの現在のGUIダイアログのスクリーンショットを添付します。

ここに画像の説明を入力してくださいここに画像の説明を入力してください

于 2015-01-20T01:28:12.410 に答える