StashのPullRequestのrefspecが変わるタイミング

今回は、Atlassian社の有償製品の1つStashについてです。
公式ブログにも書いてある通り、PullRequest元や、PullRequestがMergeされた後のrefspecをStash側で提供しています。
これを使って、Jenkins上でPullRequestのテストを行った時に問題が発生しました。

問題


その問題とは、StashからJenkinsへ渡されるPullRequest元のCommit Hashが、Stash側が提供しているPullReqhestのrefspecには存在せず参照出来ないといったものです。
以下の様なエラーが発生しました。



これだけでは理解するのは難しいと思いますが、
要点をまとめると、Jenkinsでfetchしたrefspecが更新されていないという現象です。

解決策


私が確認したわけではありませんが、どうやらPullRequestの詳細画面を開いたタイミングでStash内部のPullRequestのrefspecが更新されているようです。
そこで画面を開いた時の処理を追ってみたところ、Merge可能かが確認出来るEndpointにリクエストを投げていました。
このEndpointにリクエストが投げられ、StashがPullRequest元と先をMerge可能かを検証するタイミングで、PullRequestのrefspecを更新しているようでした。
そのため、Jenkinsがfetchする前に先ほどのEndpointにリクエストを投げると、StashがPullRequestのrefspecが更新し、Jenkinsがうまく参照出来るrefspecをfetch出来るようになります。

こういうのって結構ハマっている人多そうだなぁ。。。
うーん、RepositoryServicePullRequestServiceにcanMergeだったかというメソッドあったし、プラグインでそれ呼べばいんじゃね?と思う月曜日でした。

※ Git初心者なので間違っているところがあれば指摘お願いします。

コメント

このブログの人気の投稿

ElasticIPを複数利用する時の注意

新生活始まります

Deviseのメールを非同期で送信する