Bitbucket Pipelinesというのは、GitHub Actions的な機能のようです。
Bitbucket無料ユーザには50分の無料利用枠がついています。
yosiopp.netのブログのリポジトリにはBitbucketを利用しているのですが、今回はこのBitbucket Pipelinesを利用して「リポジトリにpushしたらブログを自動で更新する」というようなことをしてみます。
Pipelinesの有効化
Bitbucketのリポジトリの設定からPipelinesの設定を行います。
bitbucket-pipelines.ymlの作成
Pipelinesは該当リポジトリのルートディレクトリにある bitbucket-pipelines.yml の設定に基づいて処理を行います。
yosiopp.netはHugoで生成されていて、AWS S3でホスティングされていますので、Hugoでのビルド、およびS3へのアップロードをこの設定ファイルに書くことになります。
image: atlassian/default-image:2
pipelines:
default:
- step:
name: 'Build'
deployment: production
services:
- docker
script:
- docker pull peaceiris/hugo:v0.81.0
- docker run --rm -i -v $BITBUCKET_CLONE_DIR:/src peaceiris/hugo:v0.81.0
artifacts:
- public/**
- step:
name: 'Deploy'
deployment: production
image: atlassian/pipelines-awscli
script:
- aws s3 sync public s3://$WEB_BUCKET/ --delete
- aws cloudfront create-invalidation --distribution-id $WEB_DISTRIBUTION --paths "/*"
最終的に、こんな感じのファイルになりました。
ついでにCloudFrontのInvatidationも行っています。
環境変数の設定
このままでは環境変数が足りず、Pipelinesの実行が失敗します。 Bitbucketのリポジトリ設定からRepository variablesを選択し、以下の環境変数に適切な値を設定します。
| 環境変数 | 値 |
|---|---|
| AWS_ACCESS_KEY_ID | アクセスキーID |
| AWS_DEFAULT_REGION | デフォルトリージョン |
| AWS_SECRET_ACCESS_KEY | 対応するキー |
| WEB_BUCKET | アップロード先のS3バケット名 |
| WEB_DISTRIBUTION | Invalidationする対象のCloudFrontディストリビューションID |
確認
最後に、記事をPUSHして自動的にデプロイされるか確認します。

成功したみたいです。