GithubへのpushをトリガーとしてCode PipelineでJekyllをビルドしてS3にデプロイする
はじめに
すでにGitHub上にJekyllのコード自体が存在して、ローカルでjekyll buildで _siteに出力されることを確認している
S3上のコンテンツをCloudFrontを使用し配信している。
参照:独自ドメインを使用してS3上の静的ウェブサイトをRoute53を使用し公開する
手順
Code PipelineとCode Buildでパイプラインを作る
パイプラインを作成する
を選択
1.パイプラインの設定を選択する
ここではパイプライン名を設定します (このパイプライン名は変えられなくなるので注意)
次に
を選択
2.ソースステージを追加する
ソースプロバイダー
にGitHub(バージョン2)
を選択する
※GitHub(バージョン1)
は非推奨の為、使用しない
GitHubに接続する
を選択
接続を作成する
接続名(任意)を入力する
auth認証にて接続する
新しいアプリをインストールする
を選択
すべてのリポジトリでもよいが、必要以上に権限は不要かと考え、対象のリポジトリのみとする
Install
を選択
パスワード入力後、先ほどの画面にて接続
を選択
対象リポジトリとブランチを入力
次に
を選択
3.ビルドステージを追加する
プロバイダーを構築するはAWS CodeBuild
を選択
プロジェクトを作成する
を選択
プロジェクトの設定
プロジェクト名(任意)を入力する
環境を以下のように設定する
Buildspec、バッチの設定、ログからオプショナルの部分のチェックを外す
※ログの出力が必要になった際は、再度設定する
CodePipeLineに進む
を選択
戻ると作成したプロジェクトが自動で入力されている
次に
を選択
4.デプロイステージを追加する
以下のように設定する
デプロイする前にファイルを抽出する
のチェックを忘れるとZIPファイルとして出力されてしまう為、注意
次に
を選択
作成内容の確認を行い、パイプラインを作成する
を選択
buildspec.ymlを作成する
CodeBuildでどのような処理をするか指示するファイル(buildspec.yml)を作成し、リポジトリのルートディレクトリに保存する
version: 0.2
phases:
pre_build:
commands:
- export LC_ALL="en_US.utf8"
- bundle install
build:
commands:
- bundle exec jekyll build
artifacts:
base-directory: '_site'
files:
- '**/*'
リポジトリへコミット&プッシュ後、問題なくデプロイされたことを確認した。
おわりに
build、deployは完全に自動化できたが、CloudFrontのキャッシュクリアが必用であることを忘れていた。
S3の更新イベントを使用してLambdakから動作させることが可能そうなのでまた、別の機会に対応する
参考
実は、ローカルのbundlerが古いことにより、エラーが発生した。ローカルのbundlerを最新にし、Gemfile.lock
をupdateすることにより解決
bundlerの最新時、入力コマンド
bundle update --bundler
デフォルトで使用しているコンピュータがbuild.general1.large
の為、このままだと、Codebuildでbuildのたび、1分/0.02$料金が発生する。build.general1.small
であれば1月あたり100分まで無料の為、こちらに変更する
CodeBuildの環境を編集する
より、追加設定
を選択。コンピューティングの欄を3 GB メモリ、2 vCPU
に設定
Subscribe via RSS