こんにちは松原です。
このEngineer blogですが、HugoというGo言語で実装された静的ファイル作成ツールによってページ作成をしています。
このブログを公開するまでの流れとしては、gitリポジトリからローカルへcloneを行い、Markdown記法でファイルを作成し、HugoコマンドにてHTMLファイルに変換、その後にGCSへとアップロードを行なっています。
今回はCloudBuildを使い、ビルドから公開までを自動化していきたいと思います。
Hugoのイメージを作成
Hugoの公式のDockerイメージはないため、Dockerイメージを作成していきます。
FROM alpine:3.13.0
ENV HUGO_VERSION='0.80.0'
ENV HUGO_NAME="hugo_extended_${HUGO_VERSION}_Linux-64bit"
ENV HUGO_BASE_URL="https://github.com/gohugoio/hugo/releases/download"
ENV HUGO_URL="${HUGO_BASE_URL}/v${HUGO_VERSION}/${HUGO_NAME}.tar.gz"
ENV HUGO_CHECKSUM_URL="${HUGO_BASE_URL}/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_checksums.txt"
SHELL ["/bin/ash", "-eo", "pipefail", "-c"]
RUN apk add --no-cache --virtual .build-deps wget && \
apk add --no-cache \
bash \
libc6-compat \
libstdc++
WORKDIR /hugo
RUN wget --quiet "${HUGO_URL}" && \
wget --quiet "${HUGO_CHECKSUM_URL}" && \
grep "${HUGO_NAME}.tar.gz" "./hugo_${HUGO_VERSION}_checksums.txt" | sha256sum -c - && \
tar -zxvf "${HUGO_NAME}.tar.gz" && \
mv ./hugo /usr/bin/hugo && \
rm -rf /hugo && \
apk del .build-deps
WORKDIR /workspace
ENTRYPOINT ["/usr/bin/hugo"]
CloudBuildで動かすため、WORKDIRはデフォルトの/workspace
にしています。
こちらのDockerfileからDockerイメージを作成し、GCRへpushします。
docker build -t asia.gcr.io/xxxxxxxx/hugo .
docker push asia.gcr.io/xxxxxxxx/hugo
CloudBuildの構成ファイルを作成
次にCloudBuildの構成ファイルを作成します。
先ほど作ったHugoのビルド用のイメージの実行設定と、ビルドによってpublic
配下へ配置された成果物をGCSへアップする設定を行います。cloudbuild.yaml
というファイル名で作成します。
steps:
- name: 'asia.gcr.io/xxxxxxxx/hugo:latest'
args: ["--cleanDestinationDir"]
- name: 'google/cloud-sdk'
entrypoint: "bash"
args:
- "-c"
- |
gsutil -m -h "Cache-Control:public,max-age=3600" rsync -j js,css,html,json,xml -c -r -d -p public gs://xxxxxxxx/public
*gcr.io/cloud-builders/gsutil
を使用しgsutil rsync
を行なってみましたが、オプションの設定がうまく動作しなかったため、 CloudSDK内のgsutilを使うためイメージはgoogle/cloud-sdk
を使用することにしました。
CloudBuildのトリガー設定
次にCloudBuildのトリガー設定です。
Google ConsoleからCloudBuild
>トリガー
の順に遷移し、トリガー作成をします。新しいリポジトリに接続
をクリックします。
リポジトリについては既存のBitbucketのリポジトリをミラーリングします。
トリガー名とブランチ名を設定します。
ビルド構成は先ほど作った構成ファイルcloudbuild.yaml
を指定します。
設定項目は以上なのでトリガーを作成します。
作成されました。
CloudBuildの設定が完了です。
これでBitbucketのリポジトリへのpushをするだけで、 HugoのビルドとGCSへのアップロードをCloudBuildが行なってくれる様になりました。
株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。
grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud (GCP)、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。
お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。