Jenkinsでクローンしてきたgitのブランチに名前を付ける

More than 1 year has passed since last update.

やりたかったとこ

図1.png

gitlabにある特定のプロジェクトを、バックアップ先としてAWSのCodeCommitにもプッシュしたい。

なので方法としてはJenkins先生を使って、

  1. Gitlabの変更を検知して、Jenkins先生がGitlabをクローンする
  2. クローンしたworkspaceをCodeCommitにPush

そんなに難しくなさそうと思ったけど、はまった。

ここではまった

Jenkins先生はdetached Headの状態でリモートレポジトリをcloneしてくる。
なので、workspaceに行ってブランチ名を確認すると…

$ git branch
* (detached from 62ehoge)

のようにブランチ名でなく(detached from "Commit ID")になってる。

当たり前だけど、これで他のレポジトリにmasterブランチとしてプッシュしても

$ git push <another-repo> master
error: src refspec master does not match any.
error: failed to push some refs to <another-repo>

ってかんじでmasterブランチなんてねーよ!と言われる。
cloneしてきたときにjenkins内でbranchの名前をつけるにはどうればいいのか。

いろいろ調べて、stackoverflowのこの投稿で発見。日本語での記事は見つからなかったのでここに投稿します。

Additional Behavioursで指定できる

jenkins先生のjobの設定画面でGitセクションの下の方、[Additional Behaviours] -> [Check out to specific local branch]とし、branchnameに好きな名前を入れる。
仮にリモートからmasterブランチしかcloneしないなら、jenkins内でもmasterで名前つけてしまっていいと思う。

Additional Behavioursは全部英語なので読み飛ばしてましたけど奥が深いですなあ。

これでjobを実行してcloneしてきたWorkspaceに行くと

$ git branch
* master

というかんじでmasterというブランチ名になっている。
あとはビルド後のジョブとかで「シェルの実行」で他のレポジトリにpushしてしまえばいい。