Slide 1

Slide 1 text

Cloud Native Developers JP Werckerを120%楽しむための開発者向け ビギナーズガイド @hhiroshell 1

Slide 2

Slide 2 text

Cloud Native Developers JP • 早川 博(はやかわ ひろし) • 日本オラクル所属 – Cloud Nativeな技術スタック担当のSA – Microservices / DevOps • Cloud Native Developers JP オーガナイザー 自己紹介 @hhiroshell 2 ※ 遊舎工房さんの店舗はこちら

Slide 3

Slide 3 text

Cloud Native Developers JP Wercker | Oracle Container Pipelines Service • CI(継続的インテグレーション)のためのサービスのひとつ • オランダ発のスタートアップが発祥。2017年にOracleが買収して サービスを継続 ((((;゚Д゚))))ガクガクブルブル (このスライドはさっと流す) 3

Slide 4

Slide 4 text

Cloud Native Developers JP 今日伝えたいこと ✓ グラフィカルなGUIがたのしい ✓ パイプラインの仕組みがたのしい ✓ Stepを使った作り込みがたのしい 4 はたのしい!!!

Slide 5

Slide 5 text

Cloud Native Developers JP 今日話さないこと • 継続的インテグレーションや継続的デリバリーの一般論 • GitOpsがあーだこーだ • Spinnakerのことは忘れました 5

Slide 6

Slide 6 text

Cloud Native Developers JP • Workflow – CIの一連の処理の全体 – CIがキックされたときに 通して実行される単位 • Pipeline – 複数Stepを連結して意味 のある単位に束ねる – 「結合テスト」、「実行 環境へのデプロイ」など 6 • Step – 処理の最小単位。1回の コマンドの呼び出しや スクリプトの実行に相当 – 実態はコンテナの実行 Werckerのコンセプト Step Step Step Step Step Step Pipeline: build Pipeline: push-to-registry Pipeline: deploy-to-cluster Workflow Step Step Step Pipeline: integration-test branch: master branch: feature

Slide 7

Slide 7 text

Cloud Native Developers JP Workflow • CIの一連の処理の全体。CIがキックされたとき通して実行される単位 • GUIでPipelineを連結することで作成する • Werckerのビジュアル担当 7 Workflow Step Step Step Step Step Step Pipeline: build Pipeline: push-to-registry Pipeline: deploy-to-cluster Step Step Step Pipeline: integration-test branch: master branch: feature

Slide 8

Slide 8 text

Cloud Native Developers JP Demo 1 Workflowが動いているところみてみよう 【参考】 – https://app.wercker.com/hhiroshell/cowweb-for-wercker-demo-1/ – https://app.wercker.com/hhiroshell/cowweb-wercker-party/ 8

Slide 9

Slide 9 text

Cloud Native Developers JP Pipeline • 複数Stepを連結して意味のある単位に束ねる – e.g) ビルド、自動結合テスト、Kubernetesクラスターへのデプロイ …etc • Stepの実行環境となるコンテナがこの単位で決まる • “the heart and soul of Wercker”(ホントにこう書いてあるw) 9 Step Step Step Step Step Step Pipeline: build Pipeline: push-to-registry Pipeline: deploy-to-cluster Workflow Step Step Step Pipeline: integration-test branch: master branch: feature

Slide 10

Slide 10 text

Cloud Native Developers JP Step • 処理の最小単位。1回のコマンドの呼び出しやスクリプトの実行など を行う。実態はコンテナの実行 • Werckerに最強のカスタマイズ性を与える立役者 10 Step Step Step Step Step Step Pipeline: build Pipeline: push-to-registry Pipeline: deploy-to-cluster Workflow Step Step Step Pipeline: integration-test branch: master branch: feature

Slide 11

Slide 11 text

Cloud Native Developers JP PipelineとStepの処理内容の定義 • PipelineとStepの具体的な内容は、wercker.ymlファイルに記述して ソースコードリポジトリに格納する 11 > tree . . ├─ wercker.yml ## アプリケーションのコードと共に、wercker.ymlを格納 ├─ LICENSE ├─ README.md ├─ build.gradle ├─ src │ ├─ main │ │ └─ java… │ └─ test │ └─ java… └─ Dockerfile

Slide 12

Slide 12 text

Cloud Native Developers JP PipelineとStepの処理内容の定義 • BoxでStepの実行環境となるコンテナを指定。PipelineとStepでその環 境で実行される処理内容を記述 12 > cat wercker.yaml box: id: openjdk:8-jdk ## opnejdk:8-jdkをビルド環境として利用 build: steps: - script: ## JDKのバージョン表記を出力 name: JDK Version code: java -version - hhiroshell/[email protected]: ## gradleによるビルド name: gradlew build task: build

Slide 13

Slide 13 text

Cloud Native Developers JP PipelineとStepの処理内容の定義 • BoxでStepの実行環境となるコンテナを指定。PipelineとStepでその環 境で実行される処理内容を記述 13 > cat wercker.yaml box: id: openjdk:8-jdk ## opnejdk:8-jdkをビルド環境として利用 build: steps: - script: ## JDKのバージョン表記を出力 name: JDK Version code: java -version - hhiroshell/[email protected]: ## gradleによるビルド name: gradlew build task: build Pipeline Step Step

Slide 14

Slide 14 text

Cloud Native Developers JP Workflowを実行すると何が起きるのか 14 Wercker実行環境(どこかのクラウドのVM) アプリケーション コード S Pipeline: build S Pipeline: Integration-test S • パイプライン起動前の準備処理 – CI処理対象のアプリケーションのコードが、実行環境にcloneされる 動作イメージです。正確な構成や動作 を反映したものではありません。

Slide 15

Slide 15 text

Cloud Native Developers JP Workflowを実行すると何が起きるのか 15 Wercker実行環境(どこかのクラウドのVM) B Box for build アプリケーション コード S Pipeline: build S Pipeline: Integration-test S • Pipelineの実行の準備 – Pipelineの実行環境となるBox(=コンテナ)を起動する – BoxにCI処理対象のファイル群をマウントする 動作イメージです。正確な構成や動作 を反映したものではありません。

Slide 16

Slide 16 text

Cloud Native Developers JP Workflowを実行すると何が起きるのか 16 Wercker実行環境(どこかのクラウドのVM) B Box for build アプリケーション コード S Pipeline: build S Pipeline: Integration-test S • 最初のStepの実行 – Box内でStepの処理が実行される – この例ではJDKのバージョン表記を出力 動作イメージです。正確な構成や動作 を反映したものではありません。 Step 1 (java –version) S

Slide 17

Slide 17 text

Cloud Native Developers JP Workflowを実行すると何が起きるのか 17 Wercker実行環境(どこかのクラウドのVM) B Box for build アプリケーション コード S Pipeline: build S Pipeline: Integration-test S • 2つ目のStepの実行 – 後続のステップが同じBox内で実行される – この例ではgradleを使ってJavaアプリケーションをビルド 動作イメージです。正確な構成や動作 を反映したものではありません。 Step 2 (gradle build) S Box for build xxxx.jar

Slide 18

Slide 18 text

Cloud Native Developers JP Workflowを実行すると何が起きるのか 18 Wercker実行環境(どこかのクラウドのVM) B Box for build アプリケーション コード xxxx.jar S Pipeline: build S Pipeline: Integration-test S • Pipelineの終了後 – 生成されたファイルを実行環境のファイルシステムに保存する xxxx.jar 動作イメージです。正確な構成や動作 を反映したものではありません。

Slide 19

Slide 19 text

Cloud Native Developers JP Workflowを実行すると何が起きるのか 19 Wercker実行環境(どこかのクラウドのVM) アプリケーション コード S Pipeline: build S Pipeline: Integration-test S • 2つ目のPipelineの起動前 xxxx.jar 動作イメージです。正確な構成や動作 を反映したものではありません。

Slide 20

Slide 20 text

Cloud Native Developers JP Workflowを実行すると何が起きるのか 20 Wercker実行環境(どこかのクラウドのVM) アプリケーション コード xxxx.jar S Pipeline: build S Pipeline: Integration-test S • 2つ目のPipelineの実行の準備 – 新たに次のPipelineためのBoxが起動し、前の成果物を含むファイルがマウント される xxxx.jar 動作イメージです。正確な構成や動作 を反映したものではありません。 B Box for integration test

Slide 21

Slide 21 text

Cloud Native Developers JP Workflowを実行すると何が起きるのか 21 Wercker実行環境(どこかのクラウドのVM) B Box for integration test アプリケーション コード xxxx.jar S Pipeline: build S Pipeline: Integration-test S S Service • 2つ目のPipelineの実行の準備 – Serviceを使って結合テストを行う場合はここで起動する – Serviceも実態はコンテナ。この例ではMySQLをアプリにつないでいる xxxx.jar 動作イメージです。正確な構成や動作 を反映したものではありません。

Slide 22

Slide 22 text

Cloud Native Developers JP Workflowを実行すると何が起きるのか 22 Wercker実行環境(どこかのクラウドのVM) Step 3 (run it) S B Box for integration test アプリケーション コード xxxx.jar S Pipeline: build S Pipeline: Integration-test S S Service • 最後のStepの実行 – 最後のStepの処理を実行する – この例では結合テストのテストコードを走らせる xxxx.jar 動作イメージです。正確な構成や動作 を反映したものではありません。

Slide 23

Slide 23 text

Cloud Native Developers JP Workflowを実行すると何が起きるのか 23 Wercker実行環境(どこかのクラウドのVM) アプリケーション コード S Pipeline: build S Pipeline: Integration-test S • Workflowの終了 – 処理が終了したBox、Serviceが破棄される – 新たな成果物がある場合はここで保存される xxxx.jar 動作イメージです。正確な構成や動作 を反映したものではありません。

Slide 24

Slide 24 text

Cloud Native Developers JP BoxとStep • Box → 実行環境(コンテナ)| Step → 処理内容 – StepはPipelineの実行環境(=Box)内で実際に走る処理 をパッケージ化して可搬性をもたせる入れもの • 実行環境と処理内容を分離してそれぞれに可搬性をもたせていると ころがミソ。組み合わせは自由、そしてBoxもStepも自作可能! • 何をさせてもよい…! – e.g.) Slackクライアントの入ったBoxを使って通知、 hubコマンドでPR発行(GitOps的な)、Terraformで環境払い出し …etc 24 B Box Step S

Slide 25

Slide 25 text

Cloud Native Developers JP Demo 2 最もシンプルな自作Box & Stepを見てみよう • Stepを作成する – Stepのエントリーポイント run.sh – Stepのメタ情報(バージョン情報やインタフェースなど)を定義する step.yml – Stepの作成もWerckerを使ってビルドして行う • Box(=コンテナ)を用意する – run.sh を実行可能なコンテナを探す/見つける 【参考】「WerckerでオリジナルのStepを導入する」http://charleysdiary.hatenablog.com/entry/2018/12/17/011731 25

Slide 26

Slide 26 text

Cloud Native Developers JP Step Store • 自作したStepを公開/共有し合うエコシステム • ストアからStepを取り入れることで効率よくパイプラインを作成 26 https://app.wercker.com/steps/search?q=rancher

Slide 27

Slide 27 text

Cloud Native Developers JP Box & Stepとの戯れこそ至高 • Slackクライアントの入ったBoxを使って通知 • hubコマンドでPR発行(GitOps的な) • Terraformでクラウド環境を払い出し • Hugoで静的ドキュメンテーションサイトをビルド • AWS CLIからS3 + CloudFrontに静的サイトのプレビューをホスト • SSHでリモートのホストに接続してコマンドを実行 • Node.jsアプリのNPMバージョンを検出してビルド時に自動更新 • Skaffoldでfeatureブランチの成果物をレジストリレスにデプロイ …etc 27

Slide 28

Slide 28 text

Cloud Native Developers JP Demo 3 BoxとStepをフル活用してみよう • JavaアプリケーションをいろいろなJDKでビルド・テストする – JDK 8~11 – GraalVM • 同じStepをBoxを変えて実行していく 28

Slide 29

Slide 29 text

Cloud Native Developers JP まとめ ✓ グラフィカルなGUIがたのしい ✓ パイプラインの仕組みがたのしい ✓ Stepを使った作り込みがたのしい 29 はたのしい!!!

Slide 30

Slide 30 text

Cloud Native Developers JP Fin. 30