3

Gerrit 2.5サーバーとJenkinsサーバー(Gerrit Triggerを使用)があります。

一部のブランチでは、Jenkins Gerrit Trigger を構成して、ビルドとテストが成功した場合に検証するだけでなく、レビューも承認するようにしました。

私の質問は次のとおりです。Jenkinsによって検証および承認されたレビューが自動的にマージされるように、GerritまたはJenkinsを構成するにはどうすればよいですか?

試した解決策:

  • 「Post Build Task」Jenkins プラグインを使用して、レビューをマージするスクリプトを追加します ( Gerrit で提案されているように - Jenkins の実行後に変更を自動公開する方法)。問題: ビルドが失敗したテストとマージされます。
  • Gerrit の "comment-added" フックを追加して、レビューが検証および承認されたかどうかをチェックし、マージします。問題: 複雑で、特定のブランチからのみ自動送信するようにうまく構成できません。
4

2 に答える 2

3

私が見つけた解決策は、Groovy Postbuild プラグインを使用することです。JUnit ポスト ビルド アクションの後に実行される次のスクリプトは、トリックを実行します。

if(manager.build.result.isBetterThan(hudson.model.Result.UNSTABLE)) {
    def cmd = 'ssh -p 29418 HOST gerrit review --verified +1 --code-review +2 --submit --project $GERRIT_PROJECT $GIT_COMMIT'
    cmd = manager.build.environment.expand(cmd)
    manager.listener.logger.println("Merge review: '$cmd'")
    def p = "$cmd".execute()
    manager.listener.logger.println(p.in.text)
    manager.addShortText("M")
}

もちろん、Jenkins アカウントには +1 検証、+2 レビュー、および送信の権限が必要です。公開鍵認証も設定する必要があります。

Windowsの場合: 次のコマンドを使用して、git ディストリビューションから ssh を実行できます。

"C:\Program Files (x86)\Git\bin\sh.exe" --login -c "ssh -p 29418 HOST ..."
于 2013-07-22T07:30:41.503 に答える
3

これは、gerrit 2.10-rc0 を使用して現在動作しているコマンドです。

if(manager.build.result.isBetterThan(hudson.model.Result.UNSTABLE)) {
    def cmd = 'ssh -p 29418 $host gerrit review --verified +1 --code --review +2 --submit $GERRIT_CHANGE_NUMBER,$GERRIT_PATCHSET_NUMBER'
    cmd = manager.build.environment.expand(cmd)
    manager.listener.logger.println("Merge review: '$cmd'")
    def p = "$cmd".execute()
    manager.listener.logger.println(p.in.text)
    manager.addShortText("M")
}
于 2014-10-16T17:43:59.650 に答える