💡きっかけ
FileZillaのようなFTPソフトを使用して更新ファイルをアップロードするのが面倒で自動的にアップロードする方法を調べました。するとGitHub Actionsを使用すると自動更新が可能との事。
私が実際に実装した手順をまとめます。
🌱手順
0.Hello Worldを表示してみる
まず以下のページを参考にGituhub Actionsを動かしてみましょう。
その後、以下の手順でGithub Actionsで開発中のプロジェクトを自動デプロイします。上記ページのシンプルな方法で一度手順を確認してから実際のプロジェクトでGitHub Actionsを使用するのがおすすめです。
1. 必要情報を確認する
契約しているサーバーのFTP情報を確認します。大抵はサーバー管理画面のFTPサーバー、アカウント情報に記載されています。FTP_TARGET_DIRはアップロード先のサーバー内でのパス情報です。パスの末尾には/スラッシュが必要です(無いと最後には入れてくださいとエラーになります)
| Name | 入力内容 | 備考 |
|---|---|---|
| FTP_HOST | FTPサーバーアドレス | サーバーパネルで確認できます |
| FTP_USER | FTPユーザー名 | サーバーパネルで確認できます |
| FTP_PASS | FTPパスワード | サーバーパネルで確認できます |
| FTP_TARGET_DIR | プロジェクト格納サーバーのパス情報 | ファイルマネージャーなどで確認できます |
2. プロジェクトをGithub連携する
リポジトリ作成後、ローカルプロジェクトをコミットしてGithub上にプロジェクトファイルをアップロードします。
3. GithubにFTP接続情報を設定
- リポジトリページ
- Settings
- Security>Secrets&variables>Actions
- ページ下部のRepositpry Secrets
ここに直接プロジェクトファイルに記録できないサーバー情報を記録します。Gituhub上で暗号化して記録されるので不正利用される心配がありません。
後ほどGitHub Actionsで使用するとYAML形式ファイルではこのRepository Secretsの値を参照して自動デプロイします。
4. ローカルファイルで.github/workflows/deploy.ymlを作成
Github ActionsはYAML形式ファイルを読み込んで自動化処理を実行します。VScodeで.githubファイルとその子ファイルとしてworkflowsを作成してworkflowsに~.yml(~は任意。deploy.ymlなど)を作成します。
workflowsがworkflowになっていると正常に動作しないので注意してください。今回は作成した〜ymlファイルに以下のコードを記述します。
deploy.yml
name: Deploy to StarServer via FTP
on:
push:
branches:
- main # mainブランチにpushしたら実行
jobs:
ftp-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Upload files via FTP
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
with:
server: ${{ secrets.FTP_HOST }}
username: ${{ secrets.FTP_USER }}
password: ${{ secrets.FTP_PASS }}
server-dir: ${{ secrets.FTP_TARGET_DIR }}
local-dir: ./
exclude: |
**/.git*
**/.github/**
**/node_modules/**
**/README.md
5. コミットを実行
mainブランチにコミットしてGithubのActionsページを確認しましょう。最初は3分程度、次回以降からは20秒程度でActionsの動作が完了します。エラーが出る場合はエラーメッセージを確認して内容を修正しましょう。私はプロジェクトのパス情報などを誤っていたので、「Actionsが完了しない」や「Actionsは完了したが、サーバーのデータが越ンされていない」などの状態になりました。
⚠️注意点
Repository Secretsの情報
パス情報が誤っているとActionsが失敗したり、正常に完了してもファイルデータが更新されない(変更内容がサーバーで反映されていない)状態になります。サーバーのファイルマネージャーでパス情報を確認しましょう。FTP_TARGET_DIRは最後にスラッシュが必要です。
gitignoreとサーバーファイル
GitHubやサーバーにはセキュリティ上、アップロードしない方が良いファイルが存在します(データベース接続情報などで)
これらのファイルは適切にファイル構造を整理して最初の段階でGitの追跡ファイルやサーバーへのアップロードファイルから除外しましょう。Github ActionsではYAML形式ファイル内で除外するファイルを指定できます。
サーバーを変更
開発中にアップロードサーバーを別のものに変更したい場合、Repository Secretsで設定した値を変更するとそのサーバーにアップロード先を変更できます。