Werckerを120%楽しむための開発者向けビギナーズガイド / Enjoy Wercker!

Werckerを120%楽しむための開発者向けビギナーズガイド / Enjoy Wercker!

Rancher Meetup Tokyo #19(CIについて語ろう会)での発表資料です。
https://rancherjp.connpass.com/event/129147/

36bb9dcd778d2a9621d44e92425d0907?s=128

hhiroshell

May 30, 2019
Tweet

Transcript

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

  2. Cloud Native Developers JP • 早川 博(はやかわ ひろし) • 日本オラクル所属

    – Cloud Nativeな技術スタック担当のSA – Microservices / DevOps • Cloud Native Developers JP オーガナイザー 自己紹介 @hhiroshell 2 ※ 遊舎工房さんの店舗はこちら
  3. Cloud Native Developers JP Wercker | Oracle Container Pipelines Service

    • CI(継続的インテグレーション)のためのサービスのひとつ • オランダ発のスタートアップが発祥。2017年にOracleが買収して サービスを継続 ((((;゚Д゚))))ガクガクブルブル (このスライドはさっと流す) 3
  4. Cloud Native Developers JP 今日伝えたいこと ✓ グラフィカルなGUIがたのしい ✓ パイプラインの仕組みがたのしい ✓

    Stepを使った作り込みがたのしい 4 はたのしい!!!
  5. Cloud Native Developers JP 今日話さないこと • 継続的インテグレーションや継続的デリバリーの一般論 • GitOpsがあーだこーだ •

    Spinnakerのことは忘れました 5
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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/gradlew@0.1.1: ## gradleによるビルド name: gradlew build task: build
  13. 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/gradlew@0.1.1: ## gradleによるビルド name: gradlew build task: build Pipeline Step Step
  14. Cloud Native Developers JP Workflowを実行すると何が起きるのか 14 Wercker実行環境(どこかのクラウドのVM) アプリケーション コード S

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

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

    Pipeline: build S Pipeline: Integration-test S • Workflowの終了 – 処理が終了したBox、Serviceが破棄される – 新たな成果物がある場合はここで保存される xxxx.jar 動作イメージです。正確な構成や動作 を反映したものではありません。
  24. 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
  25. 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
  26. Cloud Native Developers JP Step Store • 自作したStepを公開/共有し合うエコシステム • ストアからStepを取り入れることで効率よくパイプラインを作成

    26 https://app.wercker.com/steps/search?q=rancher
  27. 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
  28. Cloud Native Developers JP Demo 3 BoxとStepをフル活用してみよう • JavaアプリケーションをいろいろなJDKでビルド・テストする –

    JDK 8~11 – GraalVM • 同じStepをBoxを変えて実行していく 28
  29. Cloud Native Developers JP まとめ ✓ グラフィカルなGUIがたのしい ✓ パイプラインの仕組みがたのしい ✓

    Stepを使った作り込みがたのしい 29 はたのしい!!!
  30. Cloud Native Developers JP Fin. 30