🤝

GitHubへのPush時にAWS CodeCommitに任意のブランチを同期する

2021/10/15に公開

以前、GitHubへのPush時にAWS CodeCommitにリポジトリを同期する方法をまとめました。
https://zenn.dev/itouuuuuuuuu/articles/9fd140ee7862f2

しかし、この方法はリポジトリをまるまるミラーリングするため、特定のブランチのみ同期したいという場合は使えません。
今回、GitHubの任意のブランチをCodeCommitの任意のブランチにGitHub Actionsから同期する方法を検討したためメモしておきます。

GitHubのSecretsに必要な情報を登録

GitHubの管理画面で、「Settings」 -> 「Secrets」から、必要な情報を登録します。
github secrets

登録する情報は下記となります。

  • CODECOMMIT_REPO_URL
    CodeCommitのリポジトリのURL

  • CODECOMMIT_SSH_CONFIG
    SSH接続するためのコンフィグ情報

Host git-codecommit.*.amazonaws.com
  User {CodeCommitのSSHキーID}
  IdentityFile ~/.ssh/id_rsa
  StrictHostKeyChecking no
  • CODECOMMIT_SSH_PRIVATE_KEY
    SSHシークレットキー

GitHub Actionsを設定

下記のコードを、GitHub Actionsのワークフローとして登録します。

name: "Deploy: main"

on: [ workflow_dispatch ]

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 5

    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 0

      - name: Extract branch name
        shell: bash
        run: echo "::set-output name=branch::${GITHUB_REF#refs/heads/}"
        id: extract_branch

      - name: Push to AWS CodeCommit
        env:
          CODECOMMIT_HOST: git-codecommit.ap-northeast-1.amazonaws.com # ap-northeast-1の部分は自身のリージョンを指定
          CODECOMMIT_REPO_URL: ${{ secrets.CODECOMMIT_REPO_URL }}
          CODECOMMIT_SSH_CONFIG: ${{ secrets.CODECOMMIT_SSH_CONFIG }}
          CODECOMMIT_SSH_PRIVATE_KEY: ${{ secrets.CODECOMMIT_SSH_PRIVATE_KEY }}
          BRANCH_NAME: ${{ steps.extract_branch.outputs.branch }}
        shell: bash
        run: |
          mkdir ~/.ssh
          echo "$CODECOMMIT_SSH_PRIVATE_KEY" > ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa
          echo "$CODECOMMIT_SSH_CONFIG" > ~/.ssh/config && chmod 600 ~/.ssh/config
          ssh-keyscan "$CODECOMMIT_HOST" >> ~/.ssh/known_hosts && chmod 600 ~/.ssh/known_hosts
          git remote add codecommit "$CODECOMMIT_REPO_URL"
          git push codecommit ${{ env.BRANCH_NAME }}:main -f # mainの部分はCodeCommitの同期したいブランチを指定

GitHub Actionsから同期を実行

GitHub Actionsから、CodeCommitに同期したいブランチを選択して「Run workflow」を実行することで、任意のブランチをCodeCommitのmainブランチにpushできます。
ワークフローの、CodeCommitの同期したいブランチを変更することで、任意のブランチと同期可能になります。

github actions

Discussion