WebアプリケーションのリポジトリをBitbucketからGitHubへ移行したので事例としてメモしておく。
動機
Bitbucketの機能面には特に不満や不足はなかったのだけれど、特定の時間帯(多分アメリカのビジネス時間)の応答が非常に遅くてストレスフルでにっちもさっちもいかなかった。これを回避するならまぁGitHub使っとけと言う感じで移行した。
構成
移行対象はPHPのWebアプリケーションで、Bitbucket固有の機能はデプロイをPipelinesで行っていた程度。なのでそれをGitHub Actions移行するだけ。
やっていることは以下程度。
具体的には↓これ。
移行の流れ
事前準備
大体こんな感じのワークフローになった。Bitbucket Pipelinesと大差ない。
name: Deploy Staging on: push: branches: [ staging ] paths: - .github/workflows/deploy-staging.yml - front/** - admin/** jobs: deploy: runs-on: ubuntu-latest timeout-minutes: 10 steps: - uses: actions/checkout@v2 # https://www.webfactory.de/blog/use-ssh-key-for-private-repositories-in-github-actions # https://github.com/webfactory/ssh-agent - uses: webfactory/ssh-agent@v0.5.3 with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - run: cat .github/workflows/deploy/known_hosts >> ~/.ssh/known_hosts - run: chmod +x deployer.phar - name: Deploy admin run: ./deployer.phar -f=./admin/deployer/deploy.php deploy staging -v - name: Deploy front run: ./deployer.phar -f=./front/deployer/deploy.php deploy staging -v
移行
- 関係各位に移行するのでBitbucketを触らないように周知する
bitbucket-pipelines.yml
を削除してBitbucketからのデプロイを止める- GitHubにリポジトリを同期する
- 検証済のGitHub ActionsでのデプロイのPRをマージする
- デプロイの疎通を確認する
ざっくりこんな感じで処理した。
各自の作業環境の切り替えは「Gitに自信がなかったらこれまでと別のディレクトリにCloneしなおして」と案内した。なにしろ自分もそうしている。複数のリモートを切り替えてGitを使えるほど器用ではない。器用な人はそんなにいないと思う。
留意点
移行というよりはサーバにSSHして、サーバから git pull
するデプロイをGitHub Actionsで構成する場合の留意点になる。
大体認証系の設定。他は既に動いているデプロイ構成がそのまま動いた(もちろんデプロイ元リポジトリの設定は変える)。
Actions -> サーバ
- 適当にSSH鍵を作ってGitHubのリポジトリシークレットに登録(
secrets.SSH_PRIVATE_KEY
) - 各サーバの
authorized_keys
に登録 known_hosts
はリポジトリにコミットして実行時に設定
サーバ -> Actions
感想
移行自体は認証情報をしっかり処理すればスムーズだった。 (サーバは大事なペットとして1台ずつ管理しているので漏れがあって慌てて処理した。VPSの管理は大変なのでもうやりたくない)
周辺事情については色々思うところがあった。
GitリポジトリサービスはGitHub寡占になっていると思う。
GitHub以外のリポジトリを使うことは運用面で大きなハンデを抱えた状態になる。些細な例ではあるけれど、最近出てきたAWSのApp Runnerでも連携できるリポジトリはGitHubのみでBitbucketはサポートされていない。そもそもAWS謹製のCodeCommitを差し置いてのGitHubサポートだ。
二番手以降も頑張っていい感じに競争してほしいし、BitbucketはブランチのSyncをWeb上からできたり、Pipelinesにちょこちょこ面白いものがあったり、機能面では使い出があると思う。それが「動作が重い」とどうしようもない理由で移行せざるを得なかったのはとても残念に思う。