やりたかったとこ
gitlabにある特定のプロジェクトを、バックアップ先としてAWSのCodeCommitにもプッシュしたい。
なので方法としてはJenkins先生を使って、
- Gitlabの変更を検知して、Jenkins先生がGitlabをクローンする
- クローンした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してしまえばいい。