BitBuckbt の Pipeline で S3 にアップロードする
フロントエンドを Elm で実装、バックエンドに Rails、という構成でシステムを構築している。 開発は BitBucket で行っているので、Pipeline を使ってテストとリリースをしてみる。
CONTENTS
bitbucket-pipelines.yml を作成
BitBucket のリポジトリ画面で、メニューから Pipelines を選択する。 Pipeline の設定が表示されるので、言語を選択して Pipeline を有効にする。
image: node:10.11.0-stretch
pipelines:
default:
- step:
caches:
- node
script:
- npm install
- npm test
フロントエンドは Elm で実装しているので、ここでは node の設定を選択した。 image には DockerHub にあるやつを指定できる。
default のステップでは、master へコミットされた場合に実行するコマンドを書いておく。 ここではテストを実行するようにして、master が壊れていないことを確認できるようにした。
試しに何かマージしてみて、動作を確認しておこう。
タグをつけたら本番環境にリリース
image: node:10.11.0-stretch
pipelines:
default:
- step:
caches:
- node
script:
- npm install
- npm test
tags:
"*":
- step:
caches:
- node
script:
- npm install
- npm test
- npm run elm-install
- ./bin/build.sh
tags の項目を追加すると、タグをつけた時に実行するステップを定義できる。 ここではリリースコマンドを実行するようにした。
S3 バケットの設定
S3 バケットへアクセスするために、ポリシーを作成してユーザーをアタッチしておく必要がある。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SID",
"Effect": "Allow",
"Action": [
"s3:DeleteObject",
"s3:GetBucketLocation",
"s3:GetBucketWebsite",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::バケット名",
"arn:aws:s3:::バケット名/*"
]
}
]
}
このユーザーのアクセスキーとシークレットキーが必要なのでコピーしておくこと。
S3 バケットにアップロード
S3 バケットへアップロードするために、s3cmd を使用した。
apt-get update apt-get install -y s3cmd echo "[default]" > $HOME/.s3cfg echo "access_key = $AWS_ACCESS_KEY" >> $HOME/.s3cfg echo "secret_key = $AWS_SECRET_KEY" >> $HOME/.s3cfg s3cmd sync --acl-private --verbose ./public/ "$AWS_S3_URL"
まず s3cmd をインストールして、設定を行う。
アクセスキーとシークレットキーは環境変数で設定しておく必要がある。 リポジトリ画面で、Settings を開くと、Pipelines の項目に Environment variables がある。 鍵マークをクリックして登録すると、あとでこの画面から読み出せなくできるので、機密情報はこれで登録する。
試しにタグをつけてみて、正しくリリースされるか確認しておこう。
まとめ
BitBucket の Pipeline を使用してフロントエンドのリリースを行う方法をまとめてみた。