grasys blog

CloudBuildでブログのビルドから公開までを自動化してみる

文●matsubara/grasys 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

本記事はgrasys が提供する「grasys blog」に掲載されたCloudBuildでブログの自動公開を再編集したものです。

 こんにちは松原です。

 この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が行なってくれる様になりました。

■関連サイト

過去記事アーカイブ

2021年
03月
04月
05月
06月
07月
2020年
04月
05月
08月
09月
10月
11月
12月
2018年
09月
2017年
06月
2014年
07月