Google Cloud Build覚え書き

![Screenshot from 2018-11-27 16-41-25.png](https://qiita-image-store.s3.amazonaws.com/0/90678/86397736-4046-ae06-57bd-e360c38a1559.png)

[Google Cloud Build](https://cloud.google.com/cloud-build/)とは、

- 1日120分まで無料
- 1ステップ1Docker(コンテナ)

、、、いきなり1ステップ1Dockerといわれると:thinking::thinking::thinking:となってしまうのですが、設定ファイルをみると

```yaml:cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/npm'
  args: ['install']
- name: 'gcr.io/cloud-builders/npm'
  args: ['run', 'build']
```

どうやら[Travis](https://travis-ci.org/)や[CircleCI](https://circleci.com/)のようにOSイメージやシェルスクリプトを書くのではなく、ビルドの1ステップ毎に`name`でコンテナを指定していくとのこと。

`gcr.io/cloud-builders/npm`でnpmを使用し、他に[こちらの一覧](https://cloud.google.com/cloud-build/docs/cloud-builders?hl=ja)にはすぐに使える[Official](https://github.com/GoogleCloudPlatform/cloud-builders)コマンドや、自分のプロジェクトで作成する[Community](https://github.com/GoogleCloudPlatform/cloud-builders-community)コマンドが用意されてます。

## ⚡クイックスタート⚡

1. [GCP](https://console.cloud.google.com/)の適当なプロジェクトでCloud BuildのAPIを[有効化](https://console.cloud.google.com/flows/enableapi?apiid=cloudbuild.googleapis.com)
2. [Cloud Shell](https://console.cloud.google.com/cloudshell/editor?shellonly=true)にアクセスして、
3. 設定ファイルを作成し、ビルドコマンドを実行するだけ

```sh
# (必要であれば) 使用プロジェクトの設定
gcloud projects list
gcloud config set project [PROJECT_ID]

# 作業ディレクトリの作成
mkdir ~/gcb-test && cd $_

# 設定ファイルの作成
cat << EOF > cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/npm'
  args: ['--version']
EOF

# ビルドコマンドの実行
gcloud builds submit
```

:desktop: 出力結果 >

```sh
Creating temporary tarball archive of 1 file(s) totalling 65 bytes before compression.
Uploading tarball of [.] to [gs://***.tgz]
Created [https://cloudbuild.googleapis.com/v1/projects/***].
Logs are available at [https://console.cloud.google.com/gcr/builds/***].
---------------- REMOTE BUILD OUTPUT ------------------
starting build "***-***-***"

FETCHSOURCE
Fetching storage object: gs://***...
Copying gs://***...
/ [1 files][  195.0 B/  195.0 B]
Operation completed over 1 objects/195.0 B.
BUILD
Already have image (with digest): gcr.io/cloud-builders/npm
6.4.1
PUSH
DONE
--------------------------------------------------------

ID   CREATE_TIME                DURATION  SOURCE        IMAGES  STATUS
***  2018-11-27T07:16:04+00:00  7S        gs://***.tgz  -       SUCCESS
```

:desktop: [コンソール](https://console.cloud.google.com/cloud-build/builds)に表示される履歴 >

![Screenshot from 2018-11-27 17-06-51.png](https://qiita-image-store.s3.amazonaws.com/0/90678/3541acc9-9cd3-c3c2-f1b1-11add1a51d40.png)

手軽に使えて便利そうです！:star2::star2::star2:

## 独自コマンドの作成

基本`npm build`でなんでもできそうですが、例えば[polymer-cli](https://github.com/Polymer/polymer-cli)を直接使いたい時は、

```sh
# 作業ディレクトリの作成
mkdir ~/gcb-polymer-cli && cd $_

# Dockerの定義ファイル作成
cat << EOF > Dockerfile
FROM gcr.io/cloud-builders/npm

RUN npm install polymer-cli -g --unsafe-perm

ENTRYPOINT ["polymer"]
EOF

# Cloud Buildの設定ファイルの作成
cat << EOF > cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/\$PROJECT_ID/polymer', '.']
images:
- 'gcr.io/\$PROJECT_ID/polymer'
EOF

# ビルドの実行
gcloud builds submit
```

でコマンドがプロジェクトに登録されるので、

```yaml:cloudbuild.yaml
steps:
- name: 'gcr.io/$PROJECT_ID/polymer'
  args: ['--version']
```

として使うことができます。

## 参考URL

- [Google Cloud Buildとは一体何者なのか](https://swet.dena.com/entry/2018/08/20/170836)
- [Google Cloud Build で CI/CD! ~ Firebase Hosting 編 ~](https://medium.com/google-cloud-jp/google-cloud-build-%E3%81%A7-ci-cd-firebase-hosting-%E7%B7%A8-60a86125be41)