今年はGoogle Cloud Platform(GCP)を使ってみようと思っているので、GCPUGの勉強会に参加してきた。
02/05はGoogle Container Builder(GCB)の話だった。
URL | https://gcpug-tokyo.connpass.com/event/75961/ |
会場 | 六本木ヒルズ 森タワー 18F メルカリ |
日時 | 2018/02/05(月) 19:00 〜 21:30 |
ハッシュタグ | #gcpug |
TL;DR
- Google Cloud BuilderはシンプルなコンテナーイメージをビルドするGCPのサービス
- 1日120分も無料でビルドできる
- シンプルにコンテナをビルドするだけ。GCP使っていなかったり、テストや複雑なビルドをしたいならば他のCIのほうが良いかも
- ビルドの1ステップ1ステップをステップごとに異なるビルド用のコンテナの上で
docker run
していることを理解してないとハマる - GCPのドキュメントは基本的にAPIリファレンスを読むとわかりやすい。人間用のドキュメントを読んでいてもあまりわからない。
- GCPUGのGCPノウハウは以下のリポジトリにある
- もっと話したい人はGCPUG Slack #g-tools_jaチャンネルで
Cloud Tools Introduction by sinmetal
https://goo.gl/6WVrR5
@sinmetal
GCPのサービスの中でToolカテゴリは4つある。その中の2つの話
Google Container Builder
- Build Triggerと併用すれば簡単なCIも出来る。Container Registoryに成果物のイメージとビルドログがでてくる。
- 他のCIのようにビルドするブランチを指定したり、ブランチ別のビルドも設定出来る。
- 毎日120分無料でビルドできる。
- ビルドソースはSource Resistories、GitHub、GitBucketから取得、もしくはローカルからtarにしてプッシュできる(GitLabは非対応)
- ビルドステップはDockerfile, cloud.yamlで定義する
- 1ステップ1ステップを毎回新しいコンテナで実行するのが特徴
- ツールは公式で用意されているコンテナイメージで使ったほうがよい。
gcloud bulds submit
コマンドでローカルから実行できる- fビルド行為をローカルで実行して動作確認することもできる
- 認証情報などをCloud KMSと連携して扱えるのも魅力
- サードツールへの通知やビルドステータスによるマージブロックなどしたかったらPub/Sub、Functionsなどと組み合わせて自作する必要がある
- (Slack通知についてはLTの方が触れていたので後述)
Google Cntainer Registr(GCR)
- GCRは非公開のDockerレジストリ。
- GCPのIAMと連携してコンテナイメージを管理できる
- 実際に作成されたコンテナイメージはストレージの中にある
Google Source Resistories
- Private Git Repository。それ以上でも以下でもない。
- Issue管理やPull Request機能といった機能はない
- Cloud Debuggerと連携することができる
- GitHub レポジトリや Bitbucket レポジトリとも連携できる
終わりに
この辺の話をしたいときはGCPUG Slack #g-tools_jaで!
GCBに限らずGCPUGのノウハウはこのリポジトリで共有されている
https://github.com/gcpug/nouhau
Google Container Builder と友だちになるまで
https://www.slideshare.net/lestrrat/google-container-builder-87244724
@lestrrat
- GCBは基本的にGoogle Container Resistoryにコンテナを突っ込むためにビルドするサービス
- 以下の3つの理由がないと使わないほうが良い。ちゃんとテストを流したいなどがあるなら別のCIを使ったほうがよい
- コンテナイメージをビルドしたい(だけ)
- GCP上にリソースが全部ある
- もうリモートデバッグしたくない
GitlabにあるmonorepoをGCBでgcr.ioにデプロイするときの知見
- GitlabにあるmonorepoをGCBでビルドすることに。テストは別で行っていて、デプロイ先はgcr.ioだった
- (GitLabは連携できないので)ローカルで
google cloud builds
コマンドをすると指定したフォルダーがtarになって送信される。(最初のステップに必要なものだけあればよい)- 全部ストレージに保存されるからデカイmonorepoあげるとヤバい。
cloud.yaml
を使ってビルドする。GCBのビルドは以下のイメージ
for step in config.steps
docker run step.image step.args
done
- ビルドで使うイメージは基本的に公式イメージで。ただし1コマンドだけ実行しているようでもラッパースクリプトが動いているので注意
- 各ステップで情報を引き回したいときは
Volume
でコンテナにマウントした中に保存しておく - デバッグしたいときは
entorypoint
でbashを動かす。APIリファレンスまで見に行かないと載ってない - どうしてもひとつのステップで複数のコマンドを使いたいときは自作コンテナでビルドする
- gcloud、helm、kubectl…なんてことは公式ビルド用コンテナではできない
- gcr.ioに上げておけば自作コンテナイメージでビルドもできる
- 困ったらローカルで実行してみるのが一番。クラウド上と同じ挙動をしてくれた
- googleのドキュメントは基本的にAPIリファレンスを読むとわかりやすい。人間用のドキュメントを読んでいてもあまりわからない。
LT
GitLab Runnerの話
- GitLab Runner
- GitLabもGoogle Cloud Resitoryを使っていたが今はGitLab Container Registry
- どちらもベンダーロックインを避けられる。スレーブを用意すればマルチOSでビルドできるのもGitLab Runnerの魅力
- GCE上で実行した場合はStack Driverとも連携出来る。
- GitLab実践ガイドも最近発売されたとのこと
Google Cloud BuilderとSlack連携の話
- GCBのStatusをSlack通知
- GCBのビルドステータスが変化したときに通知がいく。Slack以外はGCPのサービスで実現できる
- GCB -> Pub/Sub -> Funstionsという流れでSlackに通知する。それぞれが有効になっていればGCPのWeb UIから設定可能
- 詳細は公式チュートリアルがある
- 公式チュートリアルのFuctionsのままだと
build.id
だけで何の結果だかわからないのでもう少し作り込む必要があり。- Tweetによると、この辺叩けば出来るんじゃないかとのこと Method: projects.builds.get
google assistantアプリもリリースしているらしい。
えいえい おこった?💕 #gcpug pic.twitter.com/UkbhWpZMYe
— みゅず (@mu248321) 2018年2月5日
怒ってないよ - Google Assitant アプリ
https://assistant.google.com/services/a/uid/0000001a6f41b0be?hl=ja
クソアプリって名前はリジェクトくらうとのこと。
参加して
GCPUG主催イベント初参加だった。悪い言い方をするとGCBは他のCIツールと比べて機能が少ないようだ。
ただ、コンテナイメージのビルドするのにステップごとに新しいコンテナを利用するという仕組みはすごい新鮮で驚きだった。
ビルド自体をステップごとにコンポーネント化するという考えは複雑化や属人化を避けることも可能なのかな?
GKEの上でGoのアプリでも動かしたいなと思っているので、ある程度使いこなせてきたらデプロイ用のコンテナ生成をGCBでやってみるのもいいのかもしれない。
GCPは結構ドキュメントの日本語がちゃんとされていて、これから動かし始めようと思っている英語が不得意の自分的には(パット見)結構安心していたのだが、けっこう大事なところが書かれていなかったりするらしい。
困ったらAPIリファレンスまで読んでみる、という本筋以外の知見も得られて良かった。
(某窓の会社のリファレンスサイトもサンプルリポジトリのコードみないと使い物にならないので、個人的にはまあそんなものなのかなとも思っている)
Circle CI2.0もローカルでビルドを実行して試せるが、クラウド上の挙動を再現できていないこともあると会社の人が言っていた気がする。
(自分も使っているが、go test
してCodecovに結果流すくらいはローカルで出来る)
Using the CircleCI Command Line Interface (CLI)
https://circleci.com/docs/2.0/local-jobs/
他にも以下のカンファレンスついても案内があった。
JAPAN CONTAINER DAYS V18.04
2018.04.19(Thu)
http://containerdays.jp/
builderscon tokyo 2018
2018年9月6日(木), 2018年9月7日(金), 2018年9月8日(土)
http://2018.tokyo.builderscon.io/