Submit Search
Upload
Google container builderと友だちになるまで
•
3 likes
•
4,056 views
L
lestrrat
Follow
GCPUG Tokyo February 2018
Read less
Read more
Internet
Report
Share
Report
Share
1 of 95
Download now
Download to read offline
Recommended
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
lestrrat
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyo
Ryuichi Ueda
家に帰るまでが遠足です
家に帰るまでが遠足です
Cryolite
Nginx lua
Nginx lua
Moriyoshi Koizumi
HHVM Hack
HHVM Hack
Masaaki Yonebayashi
2017年夏のPerl
2017年夏のPerl
charsbar
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
charsbar
Recommended
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
lestrrat
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyo
Ryuichi Ueda
家に帰るまでが遠足です
家に帰るまでが遠足です
Cryolite
Nginx lua
Nginx lua
Moriyoshi Koizumi
HHVM Hack
HHVM Hack
Masaaki Yonebayashi
2017年夏のPerl
2017年夏のPerl
charsbar
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
charsbar
Introduction to cython
Introduction to cython
Atsuo Ishimoto
いまさら聞けないRake入門
いまさら聞けないRake入門
Tomoya Kawanishi
2017年春のPerl
2017年春のPerl
charsbar
CMSとPerlで遊ぼう
CMSとPerlで遊ぼう
Daiki Ichinose
Spectacular Future with clojure.spec
Spectacular Future with clojure.spec
Kent Ohashi
Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)
Teloo
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
C++でHello worldを書いてみた
C++でHello worldを書いてみた
firewood
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura
PHPの今とこれから2014
PHPの今とこれから2014
Rui Hirokawa
about Thrift
about Thrift
Naoya Ito
Rake
Rake
Tomoya Kawanishi
PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5
Yahoo!デベロッパーネットワーク
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
Yahoo!デベロッパーネットワーク
Titanium Mobile
Titanium Mobile
Naoya Ito
GraphQL入門
GraphQL入門
Kent Ohashi
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
Yuya Takeyama
URLで遊ぼう
URLで遊ぼう
Hiraku Nakano
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
Masahiro Wakame
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
Yoshifumi Kawai
GitLab + Dokku で作る CI/CD 環境
GitLab + Dokku で作る CI/CD 環境
Kazuhiro Nishiyama
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
More Related Content
What's hot
Introduction to cython
Introduction to cython
Atsuo Ishimoto
いまさら聞けないRake入門
いまさら聞けないRake入門
Tomoya Kawanishi
2017年春のPerl
2017年春のPerl
charsbar
CMSとPerlで遊ぼう
CMSとPerlで遊ぼう
Daiki Ichinose
Spectacular Future with clojure.spec
Spectacular Future with clojure.spec
Kent Ohashi
Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)
Teloo
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
C++でHello worldを書いてみた
C++でHello worldを書いてみた
firewood
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura
PHPの今とこれから2014
PHPの今とこれから2014
Rui Hirokawa
about Thrift
about Thrift
Naoya Ito
Rake
Rake
Tomoya Kawanishi
PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5
Yahoo!デベロッパーネットワーク
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
Yahoo!デベロッパーネットワーク
Titanium Mobile
Titanium Mobile
Naoya Ito
GraphQL入門
GraphQL入門
Kent Ohashi
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
Yuya Takeyama
URLで遊ぼう
URLで遊ぼう
Hiraku Nakano
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
Masahiro Wakame
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
Yoshifumi Kawai
What's hot
(20)
Introduction to cython
Introduction to cython
いまさら聞けないRake入門
いまさら聞けないRake入門
2017年春のPerl
2017年春のPerl
CMSとPerlで遊ぼう
CMSとPerlで遊ぼう
Spectacular Future with clojure.spec
Spectacular Future with clojure.spec
Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
C++でHello worldを書いてみた
C++でHello worldを書いてみた
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
PHPの今とこれから2014
PHPの今とこれから2014
about Thrift
about Thrift
Rake
Rake
PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
Titanium Mobile
Titanium Mobile
GraphQL入門
GraphQL入門
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
URLで遊ぼう
URLで遊ぼう
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
Similar to Google container builderと友だちになるまで
GitLab + Dokku で作る CI/CD 環境
GitLab + Dokku で作る CI/CD 環境
Kazuhiro Nishiyama
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介
Kiwamu Okabe
Gitの紹介
Gitの紹介
Shoot Morii
Vyatta 改造入門
Vyatta 改造入門
Masakazu Asama
Capistrano
Capistrano
Yasuharu Fukuda
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
Kazuhiro Hara
mbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミング
Kiwamu Okabe
GitHub APIとfreshで遊ぼう
GitHub APIとfreshで遊ぼう
虎の穴 開発室
いいこんぶGitマニュアル
いいこんぶGitマニュアル
Kaito Yuuki
Dockerと継続的インテグレーション
Dockerと継続的インテグレーション
Yahoo!デベロッパーネットワーク
Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイ
Kazuhiro Hara
Goで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティ
yaegashi
Chef+serverspec+werckerでインフラCIする話
Chef+serverspec+werckerでインフラCIする話
Masayuki Morita
Git (運用編)
Git (運用編)
Naomichi Yamakita
Metahub for github
Metahub for github
Suguru Oho
Git (実践入門編)
Git (実践入門編)
Naomichi Yamakita
GitHub Actions + Cloudflare API
GitHub Actions + Cloudflare API
Takahiro Kudo
GitHub最新情報キャッチアップ 2023年6月
GitHub最新情報キャッチアップ 2023年6月
Kazumi IWANAGA
コンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundry
Kazuto Kusama
Similar to Google container builderと友だちになるまで
(20)
GitLab + Dokku で作る CI/CD 環境
GitLab + Dokku で作る CI/CD 環境
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介
Gitの紹介
Gitの紹介
Vyatta 改造入門
Vyatta 改造入門
Capistrano
Capistrano
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
mbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミング
GitHub APIとfreshで遊ぼう
GitHub APIとfreshで遊ぼう
いいこんぶGitマニュアル
いいこんぶGitマニュアル
Dockerと継続的インテグレーション
Dockerと継続的インテグレーション
Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイ
Goで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティ
Chef+serverspec+werckerでインフラCIする話
Chef+serverspec+werckerでインフラCIする話
Git (運用編)
Git (運用編)
Metahub for github
Metahub for github
Git (実践入門編)
Git (実践入門編)
GitHub Actions + Cloudflare API
GitHub Actions + Cloudflare API
GitHub最新情報キャッチアップ 2023年6月
GitHub最新情報キャッチアップ 2023年6月
コンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundry
More from lestrrat
Future of Tech "Conferences"
Future of Tech "Conferences"
lestrrat
ONIの世界 - ONIcon 2019 Winter
ONIの世界 - ONIcon 2019 Winter
lestrrat
Slicing, Dicing, And Linting OpenAPI
Slicing, Dicing, And Linting OpenAPI
lestrrat
Oxygen Not Includedをやるべき4つの理由
Oxygen Not Includedをやるべき4つの理由
lestrrat
Rejectcon 2018
Rejectcon 2018
lestrrat
Builderscon tokyo 2018 speaker dinner
Builderscon tokyo 2018 speaker dinner
lestrrat
筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーション
lestrrat
iosdc 2017
iosdc 2017
lestrrat
シュラスコの食べ方 超入門
シュラスコの食べ方 超入門
lestrrat
OSSの敵になるのもいいじゃない
OSSの敵になるのもいいじゃない
lestrrat
Coding in the context era
Coding in the context era
lestrrat
Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)
lestrrat
Opening: builderscon tokyo 2016
Opening: builderscon tokyo 2016
lestrrat
Kubernetes in 20 minutes - HDE Monthly Technical Session 24
Kubernetes in 20 minutes - HDE Monthly Technical Session 24
lestrrat
小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016
lestrrat
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれ
lestrrat
Don't Use Reflect - Go 1.7 release party 2016
Don't Use Reflect - Go 1.7 release party 2016
lestrrat
How To Think In Go
How To Think In Go
lestrrat
On internationalcommunityrelations
On internationalcommunityrelations
lestrrat
Yapceu 2015 yapc asia tokyo behind the scenes (w/o notes)
Yapceu 2015 yapc asia tokyo behind the scenes (w/o notes)
lestrrat
More from lestrrat
(20)
Future of Tech "Conferences"
Future of Tech "Conferences"
ONIの世界 - ONIcon 2019 Winter
ONIの世界 - ONIcon 2019 Winter
Slicing, Dicing, And Linting OpenAPI
Slicing, Dicing, And Linting OpenAPI
Oxygen Not Includedをやるべき4つの理由
Oxygen Not Includedをやるべき4つの理由
Rejectcon 2018
Rejectcon 2018
Builderscon tokyo 2018 speaker dinner
Builderscon tokyo 2018 speaker dinner
筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーション
iosdc 2017
iosdc 2017
シュラスコの食べ方 超入門
シュラスコの食べ方 超入門
OSSの敵になるのもいいじゃない
OSSの敵になるのもいいじゃない
Coding in the context era
Coding in the context era
Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)
Opening: builderscon tokyo 2016
Opening: builderscon tokyo 2016
Kubernetes in 20 minutes - HDE Monthly Technical Session 24
Kubernetes in 20 minutes - HDE Monthly Technical Session 24
小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれ
Don't Use Reflect - Go 1.7 release party 2016
Don't Use Reflect - Go 1.7 release party 2016
How To Think In Go
How To Think In Go
On internationalcommunityrelations
On internationalcommunityrelations
Yapceu 2015 yapc asia tokyo behind the scenes (w/o notes)
Yapceu 2015 yapc asia tokyo behind the scenes (w/o notes)
Google container builderと友だちになるまで
1.
Google Container Builder
と 友だちになるまで GCPUG Tokyo Container Builder Day February2018 Daisuke Maki @lestrrat (HDE inc)
2.
• @lestrrat • Perl/Go
hacker, author, father • Author of github.com/peco/peco • Organizer for builderscon
3.
<宣伝> http://blog.builderscon.io/entry/call-for-sponsors-2018 スポンサー募集中!!!
4.
Google Container Builder(GCB)
5.
6.
Google Cloud Container
Builder を使用すると、Google Cloud Storage、Google Cloud Source Repositories、 GitHub、BitBucket にあるアプリケーション ソースコード から Docker コンテナ イメージを作成できます。 Container Builder で作成したコンテナ イメージは Google Container Registry に自動的に格納されます
7.
「なるほどわからん」
8.
GCBとは? ソースコード step 1 step
2 … step N Google Container Registry Google Source Repository その他 …
9.
GCBとは? • ソースコードを送る • 指定された「ステップ」実行する •
ステップから成果物をどこか(例:gcr.io)に送る
10.
「これ知ってる」 CIサービスだ!
11.
補足 • GCP的にはCIサービスではない • やろうと思えばテストもある程度できる •
あくまで「構造が似ている」という意味
12.
Should I Use
GCB いきなりですが…
13.
GCBを使うべき理由 • コンテナイメージをビルドしたい • GCP上にリソースが全部ある •
もうリモートデバッグしたくない (後述)
14.
GCBを使わない理由 • コンテナを使ってない • テストを(真面目に)走らせたい •
GCPのサービスを使っていない
15.
実践!GCB
16.
背景 • ソースコードはGitlabにあるmonorepo • テストは別で行う •
イメージデプロイ先はasia.gcr.io
17.
GCBリクエスト gcloud container builds
submit … GCBビルドは「リクエスト」から始まる
18.
GCBリクエスト • docker buildコマンドのようにコンテキストを受け取る gcloud
container builds submit source
19.
GCBリクエスト • コンテキストはGoogle Storageに保存される •
GSRからのキックの場合は、clone結果が保存 される?(試してない)
20.
ソースコード step 1 step
2 … step N Google Container Registry Google Source Repository … GitlabはGSRでサポートされない…
21.
ソースコード step 1 step
2 … step N Google Container Registry Google Source Repository … GitlabはGSRでサポートされない…
22.
GCBリクエスト • 毎回monorepoを全部Google Storageに保存す るの…
嫌だ… • → 後述
23.
ステップ • リクエストを受け取った後、cloudbuild.yaml 内のステップを順番に実行する
24.
ステップ https://cloud.google.com/container-builder/docs/api/build-steps https://cloud.google.com/container-builder/docs/how-to/writing-build-requests
25.
ステップ https://cloud.google.com/container-builder/docs/api/build-steps https://cloud.google.com/container-builder/docs/how-to/writing-build-requests 「わかるよーな…わからんよーな…」
26.
ステップ • CIサービスでは「コマンド」を指定していく スタイルが多い • GCBは「コンテナ」を指定してく
27.
GCBステップの「原理」 for step in
config.steps docker run step.image step.args done
28.
ステップ実行のイメージ • git clone
コンテナ • go build コンテナ • docker push コンテナ
29.
ステップのコンテナイメージ • よく使うものについてはGoogleが用 意してくれている →
https://github.com/ GoogleCloudPlatform/cloud-builders • gcloud, git, go等
30.
ステップ詳細
31.
ソースの取得 • Gitlabからプライベートなレポジトリを クローンする(コードをアップロードしない) • Gitlabの認証を行う必要がある
32.
認証 • 認証トークンのようなデータはレポジト リに入れたくない • Google
Key Management Services (KMS) • KMSについては… 詳しくはWebで!
33.
KMSからキーを得る - name: 'gcr.io/cloud-builders/gcloud' args: -
kms - decrypt - --ciphertext-file=gitlab-deploy.enc - --plaintext-file=/root/.ssh/id_ed25519 - --location=global - --keyring=cloudbuild - --key=gitlab volumes: - name: 'ssh' path: /root/.ssh
34.
KMSからキーを得る - name: 'gcr.io/cloud-builders/gcloud' args: -
kms - decrypt - --ciphertext-file=gitlab-deploy.enc - --plaintext-file=/root/.ssh/id_ed25519 - --location=global - --keyring=cloudbuild - --key=gitlab volumes: - name: 'ssh' path: /root/.ssh gcloudを使うための コンテナを指定じゃ
35.
KMSからキーを得る - name: 'gcr.io/cloud-builders/gcloud' args: -
kms - decrypt - --ciphertext-file=gitlab-deploy.enc - --plaintext-file=/root/.ssh/id_ed25519 - --location=global - --keyring=cloudbuild - --key=gitlab volumes: - name: 'ssh' path: /root/.ssh gcloudコマンドの引数 じゃ。/root/.ssh以下 に解読結果を残すぞ!
36.
KMSからキーを得る - name: 'gcr.io/cloud-builders/gcloud' args: -
kms - decrypt - --ciphertext-file=gitlab-deploy.enc - --plaintext-file=/root/.ssh/id_ed25519 - --location=global - --keyring=cloudbuild - --key=gitlab volumes: - name: 'ssh' path: /root/.ssh 解読結果を残すためのスト レージじゃ。あとでマウン トして読み込めるぞい
37.
.ssh/configを設定する • .ssh/configで gitlab.comで使うキーを 設定する •
諸事情により、後ほど説明
38.
キーを使ってgit cloneする - name:
'gcr.io/cloud-builders/git' args: - clone - —depth=1 - —branch=master - --single-branch - git@gitlab.com:myaccount/myrepo.git volumes: - name: 'ssh' path: /root/.ssh
39.
キーを使ってgit cloneする - name:
'gcr.io/cloud-builders/git' args: - clone - —depth=1 - —branch=master - --single-branch - git@gitlab.com:myaccount/myrepo.git volumes: - name: 'ssh' path: /root/.ssh gitを使うためのコ ンテナじゃ
40.
キーを使ってgit cloneする - name:
'gcr.io/cloud-builders/git' args: - clone - —depth=1 - —branch=master - --single-branch - git@gitlab.com:myaccount/myrepo.git volumes: - name: 'ssh' path: /root/.ssh 前のステップで作ったキー を読み込むためにボリュー ムをマウントするぞ
41.
キーを使ってgit cloneする - name:
'gcr.io/cloud-builders/git' args: - clone - —depth=1 - —branch=master - --single-branch - git@gitlab.com:myaccount/myrepo.git volumes: - name: 'ssh' path: /root/.ssh git コマンドの引数 じゃ。~/.sshのキーを 勝手に使ってくれるぞ
42.
依存関係 • まだ glide •
43.
公式イメージ - name: gcr.io/cloud-builders/glide id:
glide:myrepo waitFor: - checkout-done env: - PROJECT_ROOT=myproject/myrepo # おまじない args: - install 注:公式イメージからコミュニティレポジトリに移動されているので、 多分イメージはそのうちなくなる
44.
公式イメージ使えば簡単だと思った? 残念でした!
45.
問題 • 我々はmonorepoを使っている • つまり、ワークスペース直下にglide.yamlがあるわけで はない) •
オフィシャルのステップは、コマンドそ のものではなく、ラッパースクリプトをかま している
46.
問題 • 正しいディレクトリにcdできれば… • あれ、どうやって任意のコマンドを実行 するの? •
まさか… イメージをそのために作る?
47.
そもそも…
48.
デバッグどうするの • lsしたりenvしたり、環境を確認したい • 適時echoをはさんだりしたい •
主コマンド以外どうやって実行するの?
49.
entrypoint - name: gcr.io/cloud-builders/glide entrypoint:
…
50.
entrypoint - name: gcr.io/cloud-builders/glide entrypoint:
…
51.
entrypoint docker run —entrypoint=…
image
52.
entrypoint docker run —entrypoint=…
image
53.
愚痴 • entrypointについて、ビルドステップの ドキュメントに一切説明がない (https:// cloud.google.com/container-builder/docs/build-config) •
APIの説明まで行くと解説がある (https:// cloud.google.com/container-builder/docs/api/reference/ rest/v1/projects.builds#Build)
54.
entrypoint=bash - name: gcr.io/cloud-builders/glide entrypoint:
bash args: — -c — | echo “Hello, World!”
55.
entrypoint=bash - name: gcr.io/cloud-builders/glide entrypoint:
bash args: — -c — | echo “Hello, World!” bash -cを通して任意 のスクリプトを実行で きるのじゃ!
56.
cd && glide
installでいいと思った? 残念でした!
57.
問題 • cd …
&& glide install はだめ • 「正しいGoのファイル配置」をゴニョゴニョして あげる必要がある
58.
OSS FTW
59.
glide Dockerfile FROM gcr.io/cloud-builders/go:debian RUN
GOPATH=/go && curl https://glide.sh/get | sh COPY glide.bash /builder/bin/ ENV PATH=/builder/bin:$PATH ENTRYPOINT ["glide.bash"]
60.
glide Dockerfile FROM gcr.io/cloud-builders/go:debian RUN
GOPATH=/go && curl https://glide.sh/get | sh COPY glide.bash /builder/bin/ ENV PATH=/builder/bin:$PATH ENTRYPOINT ["glide.bash"]
61.
glide Dockerfile . /builder/prepare_workspace.inc prepare_workspace
|| exit /go/bin/glide "$@"
62.
glide Dockerfile . /builder/prepare_workspace.inc prepare_workspace
|| exit /go/bin/glide "$@"
63.
問題 • cd …
&& glide.bashもだめ • /workspace直下にいる事を前提としたスクリプト になっている…
64.
正解 - name: gcr.io/cloud-builders/glide id:
glide:myrep env: - PROJECT_ROOT=myproject/myrepo entrypoint: bash args: - '-c' - | . /builder/prepare_workspace.inc prepare_workspace || exit cd subdirectory /go/bin/glide install
65.
正解 - name: gcr.io/cloud-builders/glide id:
glide:myrep env: - PROJECT_ROOT=myproject/myrepo entrypoint: bash args: - '-c' - | . /builder/prepare_workspace.inc prepare_workspace || exit cd subdirectory /go/bin/glide install glide.bashをバラして 自分で記述したの じゃ!
66.
ここまでのおさらい • ステップはイメージ • 認証関連は
KMS 使おう • イメージの中では主コマンド実行以外にも色々やっている • デバッグはentrypoint=bash • 主コマンド以外色々やりたかったらentrypoint=bash
67.
これだけでやりたい事は ほぼ全てできるはずです
68.
その他細かいこと
69.
変数 • 全てのユーザ変数は “_”で始まる必要がある •
展開がわかりにくいので、「なるたけ使わな い」が吉と見た。
70.
.ssh/configを設定する - name: 'gcr.io/cloud-builders/git' entrypoint:
bash args: - '-c' - | chmod 600 /root/.ssh/id_ed25519 cat <<EOF >/root/.ssh/config Hostname gitlab.com IdentityFile /root/.ssh/id_ed25519 EOF mv known_hosts /root/.ssh/known_hosts volumes: - name: 'ssh' path: /root/.ssh
71.
.ssh/configを設定する - name: 'gcr.io/cloud-builders/git' entrypoint:
bash args: - '-c' - | chmod 600 /root/.ssh/id_ed25519 cat <<EOF >/root/.ssh/config Hostname gitlab.com IdentityFile /root/.ssh/id_ed25519 EOF mv known_hosts /root/.ssh/known_hosts volumes: - name: 'ssh' path: /root/.ssh このコンテナを使う 意味は特にないぞ い。
72.
.ssh/configを設定する - name: 'gcr.io/cloud-builders/git' entrypoint:
bash args: - '-c' - | chmod 600 /root/.ssh/id_ed25519 cat <<EOF >/root/.ssh/config Hostname gitlab.com IdentityFile /root/.ssh/id_ed25519 EOF mv known_hosts /root/.ssh/known_hosts volumes: - name: 'ssh' path: /root/.ssh よくあるヤツじゃ。
73.
.ssh/configを設定する - name: 'gcr.io/cloud-builders/git' entrypoint:
bash args: - '-c' - | chmod 600 /root/.ssh/id_ed25519 cat <<EOF >/root/.ssh/config Hostname gitlab.com IdentityFile /root/.ssh/id_ed25519 EOF mv known_hosts /root/.ssh/known_hosts volumes: - name: 'ssh' path: /root/.ssh このファイルも/root/.ssh で後ほど使うのでマウント じゃ。
74.
スクリプトで複数ステップ • デプロイは gcloud,
gsutil, helm, kubectlをいっぺんに 使ったスクリプトを使いたい • GCBには個別のイメージはあるが、全部一緒のものはない
75.
自分で作ればよし!
76.
スクリプト実行 - name: asia.gcr.io/$PROJECT_ID/cloud-sdk entrypoint:
bash args: - -c - | cd myrepo ./deploy/scripts/deploy.sh
77.
スクリプト実行 - name: asia.gcr.io/$PROJECT_ID/cloud-sdk entrypoint:
bash args: - -c - | cd myrepo ./deploy/scripts/deploy.sh 自分で作ったイメー ジじゃ
78.
スクリプト実行 - name: asia.gcr.io/$PROJECT_ID/cloud-sdk entrypoint:
bash args: - -c - | cd myrepo ./deploy/scripts/deploy.sh この中で色々使うの じゃ。
79.
イメージの準備 FROM alpine:3.6 AS
helm RUN apk add --update --no-cache ca-certificates git ENV FILENAME helm-v2.7.2-linux-amd64.tar.gz RUN apk add --update -t deps curl tar gzip RUN curl -L http://storage.googleapis.com/kubernetes-helm/${FILENAME} | tar zxv -C /tmp FROM google/cloud-sdk:alpine COPY --from=helm /tmp/linux-amd64/helm /bin/helm RUN gcloud components install kubectl docker-credential-gcr gsutil
80.
イメージの準備 FROM alpine:3.6 AS
helm RUN apk add --update --no-cache ca-certificates git ENV FILENAME helm-v2.7.2-linux-amd64.tar.gz RUN apk add --update -t deps curl tar gzip RUN curl -L http://storage.googleapis.com/kubernetes-helm/${FILENAME} | tar zxv -C /tmp FROM google/cloud-sdk:alpine COPY --from=helm /tmp/linux-amd64/helm /bin/helm RUN gcloud components install kubectl docker-credential-gcr gsutil マルチステージDockerfile でまずhelmを取得しておい て、あとでコピーじゃ
81.
イメージの準備 FROM alpine:3.6 AS
helm RUN apk add --update --no-cache ca-certificates git ENV FILENAME helm-v2.7.2-linux-amd64.tar.gz RUN apk add --update -t deps curl tar gzip RUN curl -L http://storage.googleapis.com/kubernetes-helm/${FILENAME} | tar zxv -C /tmp FROM google/cloud-sdk:alpine COPY --from=helm /tmp/linux-amd64/helm /bin/helm RUN gcloud components install kubectl docker-credential-gcr gsutil こちらではすでにビル ドされているcloud- sdkをまるっと使うぞ
82.
イメージの準備 FROM alpine:3.6 AS
helm RUN apk add --update --no-cache ca-certificates git ENV FILENAME helm-v2.7.2-linux-amd64.tar.gz RUN apk add --update -t deps curl tar gzip RUN curl -L http://storage.googleapis.com/kubernetes-helm/${FILENAME} | tar zxv -C /tmp FROM google/cloud-sdk:alpine COPY --from=helm /tmp/linux-amd64/helm /bin/helm RUN gcloud components install kubectl docker-credential-gcr gsutil kubectl等もこのタイ ミングでgcloudからイ ンストールじゃ
83.
イメージの準備 FROM alpine:3.6 AS
helm RUN apk add --update --no-cache ca-certificates git ENV FILENAME helm-v2.7.2-linux-amd64.tar.gz RUN apk add --update -t deps curl tar gzip RUN curl -L http://storage.googleapis.com/kubernetes-helm/${FILENAME} | tar zxv -C /tmp FROM google/cloud-sdk:alpine COPY --from=helm /tmp/linux-amd64/helm /bin/helm RUN gcloud components install kubectl docker-credential-gcr gsutil gcr.ioにpushするなら これをいれておくとよ いぞ!
84.
GCB奥義
85.
ローカル環境で実行
86.
CIで開発の憂鬱 • ジョブを送る →
待つ • 失敗する • 手元に環境がないので適当にあたりをつ けてデバッグ用コードをしこむ • 最初に戻る
87.
待つの辛い (一度gitlabで10時間待たされた…)
88.
GCB • ほとんど待ち時間はない • が、リソースを消費する •
デバッグならローカルでてきたほうが嬉しい
89.
ローカルで動くGCB gcloud components install
container-builder-local
90.
ここまで説明してきた事が 全部ローカルで実行可能! 最高です
91.
まとめ
92.
The Good Parts •
ローカル環境で爆速で開発できる • ローカル環境で爆速で開発できる(2回目) • 下手にCIサービスのキャッシュとかに振り 回されるより効率的な環境を作れる • Googleのサービスと絡めやすい
93.
The Bad Parts •
Moving Partsが増える • コンテナイメージの管理等 • UIとはなんだったのか • ドキュメントとはなんだったのか • entrypointのトリックを知らないとデバッグ が無理
94.
Questions?
95.
参考 • https://medium.com/@lestrrat/taming-google- container-builder-22a6dded155c
Download now