ブログBLOG

FTPソフトを使わず、GitHub Actionsでサーバーに自動デプロイ

更新日:
投稿日:
2022年12月19日

日々のウェブ制作や更新作業で必要なFTPでのアップロード作業。
少しだけなら大した手間ではないのですが、何回も繰り返したり、ディレクトリが分かれた複数ファイルのアップロードになると、結構面倒に感じることがあります。

そんなときに便利なのが、ファイル管理をするGitのツール。
コミットやマージなどの処理をしたときに自動的にファイルにサーバーをアップロード(デプロイ)することができます。

弊社ではGitのホスティングサービスに「Bitbucket」を利用しています。
Bitbucketには自動デプロイ用のツール「Pipelines」があるのですが、フリープランだとビルド時間が50分/月までという制限があります。
実際にPipelinesを試してみると、ちょっとした作業で数十分たってしまい、無料枠はすぐに使い切ってしまいそうでした。
$10/月を支払うと1,000分まで使えるようになるので、そのくらい支払えばいいのですが、一方、最も有名なGitホスティングサービスの「GitHub」では、「Actions」という自動デプロイできるツールがあり、こちらはGitHubのフリープランでも最初から2,000分/月まで使えます。
ちょっと魅力的ですね。
なので、自動デプロイをしたいプロジェクトのいくつかを、BitbucketではなくGitHubで運用するようにしてみました。

「GitHub Actions」の使い方はこの記事がとてもわかりやすかったです。
GitHub Actionsで自動デプロイをしてみたい! | TipLib

ほぼこのページの解説どおりにすすめれば実現できたのですが、一か所エラーが出てしまいました。
「secrets」の説明のところで、「FTPアカウント名」が表では「FTP_USER」ですが、YAMLファイルの中では「FTP_USERNAME」と書かれていました。
ここが不整合になっているのですが、ここさえどちらかに合わせてあげればエラーは解消されて、実行できました。

また、こちらの記事も参考になりました。
GitHub Actionsを使ってレンタルサーバに自動デプロイ – helog

こちらもそのまますすめると、一か所エラーが出まして、「FTP-Deploy-Actionの設定」でローカルディレクトリ部分が、

with:
     local-dir: /dist/

と書かれていましたが、local-dirを「/」から指定するとエラーになりました。
「./」と相対パスにするとエラーが解消しました。

以下は実際に弊社環境で自動デプロイをしたときの、GitHubのActionsの画面です。

GitHubのActionsの画面

一番下にある(設定後一番初めにプッシュしたコミット)は、上記で書いたローカルディレクトリのパス設定のエラーが出て、赤いエラー表示で停止しました。
その後パスを修正して2回目にコミットしたところ、無事にサーバーへアップロードされ、緑色の完了マークがつきました。

また、こちらのページにあった、

with:
     protocol: ftps

と「FTPS」のプロトコル指定ができるのも参考になりました。

以上になります。
これはコミットをしたときに単純にサーベーへファイルをアップロードする設定ですが、例えばこのブランチはテストサーバー、このブランチは本番サーバーへアップなど、様々なケースに対応した設定もできるようなので、案件に応じた設定を試していければと思います。

こういう細かい楽をする試みが、大きな楽につながっていくことを期待してます。

【追記】FTPではなくSSHでの自動デプロイもその後試しました。
その際、以下のサイトがとても役に立ちました。

【GitHub Actions】マージされたら自動でサーバー上にデプロイする方法 – ひしもちうぇぶ

ひとつはまったのが、「サーバーへSSH接続するための秘密鍵」の設定。
今回トライしたのはレンタルサーバーの「ヘテムル」。
レンタルサーバー会社でもXサーバーやさくらインターネットでは、コントロールパネルで公開鍵・秘密鍵の生成ができますが、ヘテムルでは基本パスワード認証で、まず公開鍵認証での接続をしなければいけないのですが、これが一手間かかります。

ヘテムルでの公開鍵認証は以下のサイトが役に立ちました。

hetemlで鍵交換方式のssh接続をする
hetemlへ公開鍵認証でSSH接続するには | Ninton」

トップへ戻る