🤝
GitHubへのPush時にAWS CodeCommitに任意のブランチを同期する
以前、GitHubへのPush時にAWS CodeCommitにリポジトリを同期する方法をまとめました。
しかし、この方法はリポジトリをまるまるミラーリングするため、特定のブランチのみ同期したいという場合は使えません。
今回、GitHubの任意のブランチをCodeCommitの任意のブランチにGitHub Actionsから同期する方法を検討したためメモしておきます。
GitHubのSecretsに必要な情報を登録
GitHubの管理画面で、「Settings」 -> 「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の同期したいブランチを変更することで、任意のブランチと同期可能になります。
Discussion