🦔

GitHubにpushしたらBitbucketにも自動でpushする方法

commits2 min read

GitHub Actions で、レポジトリをプッシュして同期することができる。少し手間取ったが、ssh-key-action を使うことで、こういった SSH 経由の操作も可能になる。

この記事は個人ブログから移転しました。引越し元の記事からはリダイレクトしています。

使うアクション

https://github.com/marketplace/actions/install-ssh-key

workflow

sync-bitbucket.yml
name: push to bitbucket
on:
  push:
    branches:
      - main
      - master
jobs:
  repo-sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: '0'
          ref: 'main'
      - name: Install SSH key
        uses: shimataro/ssh-key-action@v2
        with:
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          name: bitbucket-key
          known_hosts: ${{ secrets.BITBUCKET_KNOWN_HOSTS }}
          # known_hostsが追加できない問題を修正
          config: |
            Host bitbucket.org
              IdentityFile ~/.ssh/bitbucket-key
      - run: echo "" >> ~/.ssh/known_hosts
      - run: |
          git remote add bitbucket git@bitbucket.org:XXXX/レポジトリ名.git
          git config --global user.email "XXXX@gmail.com"
          git config --global user.name "XXXX"
          git checkout main
          git push -u bitbucket main

ブランチ名が違う場合は注意。

GitHub 側の Secrets の設定

レポジトリ設定の「Secrets」に行く。

SSH_PRIVATE_KEY

$ ssh-keygen -t ed25519 -C 'Sync with Bitbucket' -f $HOME/.ssh/sync_with_bitbucket
$ cat ~/.ssh/sync_with_bitbucket | pbcopy

これで秘密鍵がコピーできるので、SSH_PRIVATE_KEYとして設定する。

BITBUCKET_KNOWN_HOSTS

https://support.atlassian.com/bitbucket-cloud/docs/configure-ssh-and-two-step-verification/

この記事に書いてある。これをBITBUCKET_KNOWN_HOSTSとして設定する。

$ ssh-keyscan bitbucket.org

このコマンドでもわかる。

Bitbucket 側の設定

https://bitbucket.org/account/settings/

上記「Personal settings」に行く。

「SECURITY」→「SSH Keys」を開く。

$ cat ~/.ssh/sync_with_bitbucket.pub | pbcopy

これで公開鍵をコピーできるので、これを Bitbucket 側に追加する。

動作確認

push するたびに発火し、変更内容が Bitbucket にも同期される。

参考

実はこれ、ssh-key-action@v2known_hosts周りの挙動が原因で、ちょっと手こずった。

https://github.com/shimataro/ssh-key-action/issues/142#issuecomment-672799054

jacktuck さんのコメントを参考に、以下を追記したことで、やっと動くようになった。

          known_hosts: ${{ secrets.BITBUCKET_KNOWN_HOSTS }}
+          config: |
+            Host bitbucket.org
+              IdentityFile ~/.ssh/bitbucket-key
+      - run: echo "" >> ~/.ssh/known_hosts
      - run: |
          git remote add bitbucket git@bitbucket.org:XXXX/レポジトリ名.git

また、アクションのベースはこちらの投稿を参考にさせていただいた。

GitHubで編集を提案

Discussion

ログインするとコメントできます