はじめに
表題の通り、この記事は GitHub Actions によるミラーリングで、GitHub にあるレポジトリを CodeCommit へと同期する方法と、その際に詰まったポイントについて書いてあります。
参考にした記事
「そもそもGitHub Actionsを用いたミラーリングってどうするんだろう?」となっている人は以下三つの記事あたりに目を通してもらうと良いかと思います。
- GitHub Actionsを使ってGitHubリポジトリをCodeCommitリポジトリへミラーリングする
- GitHubへのPush時にAWS CodeCommitに任意のブランチを同期する
- 【AWS】GitHubをCodeCommitにミラーリングする
(この記事を参考にするだけでミラーリングに成功する方も多いと思いますが、ググっても解決方法が出なかった詰まりポイントがあったので続けます)
やったこと
上記の記事にあるようにまずローカルで SSH鍵を作成し、作成したキーを AWS の IAMユーザに登録しました。
次にGitHubの該当リポジトリのActions secretsにて
- CONFIG
Host git-codecommit.*.amazonaws.com
User ${IAMで登録したSSHキーID}
IdentityFile ~/.ssh/id_rsa
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
- SSH_PRIVATE_KEY
ローカルで作成した秘密鍵
を登録します。
(自分はマージされたことをトリガーにして、特定のブランチのみでミラーリングを動かしたかったので二つ目の記事を主に参考にしました)
そしてミラーリングしたいリポジトリの /.github/workflows/mirror.yml にて
name: Mirroring
on:
pull_request:
branches:
- test-branch
types: [closed]
jobs:
push_to_codecommit:
runs-on: ubuntu-latest
if: github.event.pull_request.merged == true
env:
TARGET_MIRROR_REPOSITORY: ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test-repository
REF: ${{ github.ref }}
steps:
- uses: actions/checkout@v1
with:
fetch-depth: 0
- name: set-git
run: |
mkdir ~/.ssh
chmod 700 ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
echo "${{ secrets.CONFIG }}" > ~/.ssh/config
chmod 600 ~/.ssh/id_rsa
chmod 600 ~/.ssh/config
- name: push
run: |
git remote add codecommit $TARGET_MIRROR_REPOSITORY
git checkout $REF
git push codecommit $REF
のように記載します。
これで設定は完了しました。
あとはこの mirror.yml にあるように test-branch に何か適当なブランチをマージすればできるはず!
……なんですが、あれ?
Error: Process completed with exit code 255.
というエラーでミラーリングが出来ない、、、
解決方法
色々試してみましたが結果、 Actions secrets に登録した CONFIG を以下のように書き換えると上手くいきました。
Host git-codecommit.ap-northeast-1.amazonaws.com
User ${IAMで登録したSSHキーID}
IdentityFile ~/.ssh/id_rsa
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
つまりHostの部分を
git-codecommit.*.amazonaws.com
から
git-codecommit.ap-northeast-1.amazonaws.com
に修正すると上手くいきました。
ちょっと原因がわかってないのでかっこよくないのですが、
mirror.yml の中で
TARGET_MIRROR_REPOSITORY: ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test-repository
と記載した部分が関わってるのかなと推察しています。
もしこの原因がわかる方がいらっしゃったらぜひコメントなどで教えていただきたいです。