Packer で GCP のイメージ作成を CircleCI 経由でやってみる
前に AWS のイメージ作成のやつで、Packer でイメージ作るのを CircleCI でやってみる というのをやったので、その GCP 版をやってみたいと思います。
流れ的には、前回のものとほぼ一緒なので、違う点だけ書いていきます。
前提条件
- CircleCI の Contexts に
GCP
を作成し、AUTH
とPROJECT_ID
を登録 - GCP にサービスアカウントを作成して、GCE とストレージあたりに権限つけ、ダウンロードした キーは base64 エンコードして、CircleCI の Contexts の GCP の
AUTH
に入れておく
ソース
今回は、github に用意してみました。
ファイルは2個です。
{ "variables": {
"project_id": "{{env `PROJECT_ID`}}"
},
"builders": [
{
"type": "googlecompute",
"account_file": "account.json",
"project_id": "{{user `project_id`}}",
"machine_type": "f1-micro",
"source_image_family": "ubuntu-1804-lts",
"region": "asia-northeast1",
"zone": "asia-northeast1-b",
"image_description": "Ubuntu Machine Image",
"image_name": "ubuntu1804",
"disk_size": 10,
"disk_type": "pd-ssd",
"ssh_username": "root"
}
],
"provisioners": [
{
"type": "shell",
"inline": [
"sleep 30",
"sudo apt-get update",
"sudo apt-get install -y nginx"
]
}
]
}
version: 2
jobs:
build:
docker:
- image: hashicorp/packer:1.3.3
working_directory: ~/packer
steps:
- checkout
- attach_workspace:
at: ~/packer
- run:
name: Build
command: |
if [ "${CIRCLE_BRANCH}" == "master" ]; then
echo $AUTH | base64 -d > ./account.json
packer build --force build.json
fi
no_output_timeout: 30m
workflows:
version: 2
build-and-deploy:
jobs:
- build:
context: GCP
前回の時と違うのは、サービスアカウントのキーの扱いですね。
GCP のサービスアカウントのキーは、ダウンロードした JSON を base64 でエンコードしておきます。エンコードしたキーは CircleCI の Contexts に作った GCP の AUTH に登録します。
ちょっと面倒だったのが、base64 の処理で、今回は docker 上で動いてる関係で、オプションが微妙に違っていてエラーが出たりしたとこでした。
ではやっていきます
- github のレポジトリを CircleCI 上で
Set Up Project
します -
Start Building
を押します -
SUCCESS
したら、GCE のイメージを確認します
まぁ、そんなに難しくないですね。
前回と流れはあんまり変わらないと思います。
もしかすると、GCP の権限でひっかかるかもしれないですが・・・
まとめ
GCP でも CircleCI 連携で Packer のイメージ作成ができました。
これで、プッシュすればイメージが作成されるという環境が構築できると思います。
何度プッシュしても大丈夫なように、ビルドオプションに --force
つけてます。