GitHub Acitons

dev

今や古めの人間になってしまった。定期的に実行したいスクリプトはサーバにアップロードして cron を設定して実行している。しかもアップロードは手動だ。あまりにも時代に追いつけていなさすぎるので何としてでも改善したい。

目指すのは、ローカル環境でコードを書いて確認できたら GitHub のレポジトリに push する。特定のブランチにマージされたら、(ビルドして)実行環境であるサーバの任意の場所に自動的にアップロードされる状態 …というか仕事ではすでに運用しているし、プライベートもちゃんとしようって話。Deploying to a server via SSH and Rsync in a Github Action を参考にして作業を進めていく。

作業手順

GitHub からデプロイ先に SSH できるようにする

デプロイ先のサーバで ssh-keygen を使って鍵を作成して GitHub に登録する。.ssh ディレクトリで次のコマンドを実行。

ssh-keygen -t rsa -b 4096 -C "email_address@example.com"
  • ファイル名は適当なものを設定
  • パスフレーズは指定せず空のままエンターを押す

randomart image が表示され、ディレクトリ配下に指定したファイル名の秘密鍵と .pub の拡張子がついた公開鍵が作成されていればOK。

GitHub リポジトリに作成した鍵を SettingsSecrets and variablesActionsNew repository secret から登録。

rsync コマンドを使えるようにする

rysnc を使ってデプロイしたいのだが、rsync を使うには両サーバに rsync がインストールされている必要がある。GitHub Actions では ubuntu-latest を使う場合デフォルトでインストールされているので問題ない。

デプロイ先の自分のサーバで未インストールの場合はインストールしておく。

workflow の作成

yaml ファイルを作成する。と言ってもリポジトリをチェックアウトしてきて ssh で rsync するだけならやることはほぼ決まっているので参考リンクのソースコードから必要なものをコピペして作った。

まとめと今後の展望

ここまでの設定で、指定のブランチにマージされたらデプロイできるようになった。圧倒的に便利である。

このあとはアプリケーション内の環境変数を AWS を参照するように変更したい。さらに言えばサーバ上の cron で動かすのをやめて AWS Lambda を使えるようにしたいと思う。

タイトルとURLをコピーしました