はじめに
最近GitHub Actionsの学習を始めました。
GitHub Actions×S3で静的ウェブサイトのホスティングを実装中、少し詰まったので記事にしました。ホスティング方法の詳しい解説は行いません。
環境
MacBook Pro intel
macOS Monterey バージョン12.6
GitHub Actions×S3で静的ウェブサイトのホスティング
ひとまずデプロイだけ挑戦してみたかったので、GitHub Actions上ではテストもビルドも行いません。ローカルでビルドした成果物をデプロイします。
name: frontend
on:
push:
branches:
- main
defaults:
run:
working-directory: frontend
jobs:
deploy:
runs-on: ubuntu-latest
steps:
uses: actions/checkout@v3
- name: デプロイ
run: aws s3 cp dist s3://hogehoge-123 --recursive
env:
AWS_ACCESS_KEY_ID: ${{ secrets.FRONTEND_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.FRONTEND_AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ap-northeast-1
エラー
「distディレクトリはありません」と出力されました。
手動でのデプロイは確認済みなのになぜ...working-directoryをfrontend/distに変更してみたり、AWSのクレデンシャルをaws-actions/configure-aws-credentialsで設定してもだめでした。なぜ...
# ローカルのfrontend配下
$ tree -L 1
.
├── Dockerfile
├── README.md
├── dist
├── index.html
├── node_modules
├── package-lock.json
├── package.json
├── public
├── src
└── vite.config.js
本当にdistディレクトリが無かった
最初のエラーの通り本当にdistディレクトリがありませんでした!まずは最初に(ちゃんと)エラーを読みましょう!
name: frontend
on:
push:
branches:
- main
defaults:
run:
working-directory: frontend
jobs:
deploy:
runs-on: ubuntu-latest
steps:
uses: actions/checkout@v3
- name: ディレクトリの確認
run: pwd && ls
原因と解決
原因はdistディレクトリをGit管理外に設定していたからです。管理下に設定すると最初のコードで無事デプロイできました。
当たり前ですがactions/checkoutではGit管理外のファイルを取得することはできません。distディレクトリが管理外であることを忘れていました。
distは基本Gitで管理しない、でもどうやってデプロイする?
ビルド"成果物"です。成果物を差分管理する必要性は低いですし、デフォルトでも管理しない設計になっています。
今回のGitHub Actionsのコードはデプロイしか行っていません。基本GitHub Actions上でビルドを行いGitHub Actions上に生成された成果物をデプロイすることになります。
あとがき
エラー内容は本当でした!(当たり前)
最初からビルドとセットでデプロイしていたら出会えなかったエラーです。私みたいに「GitHub Actions難しそうだし、とりあえずS3のデプロイだけやってみるか!」と思う方は参考になると思います。
余談ですが記事を書く為にエラーの再現中、distをGit管理外に戻せない事象が発生しました。下記の記事を参考に解決しました。