$30 off During Our Annual Pro Sale. View Details »

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

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

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

hhiroshell

May 30, 2019
Tweet

More Decks by hhiroshell

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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/[email protected]: ## gradleによるビルド
    name: gradlew build
    task: build

    View Slide

  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/[email protected]: ## gradleによるビルド
    name: gradlew build
    task: build
    Pipeline
    Step
    Step

    View Slide

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

    View Slide

  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処理対象のファイル群をマウントする
    動作イメージです。正確な構成や動作
    を反映したものではありません。

    View Slide

  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

    View Slide

  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

    View Slide

  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
    動作イメージです。正確な構成や動作
    を反映したものではありません。

    View Slide

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

    View Slide

  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

    View Slide

  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
    動作イメージです。正確な構成や動作
    を反映したものではありません。

    View Slide

  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
    動作イメージです。正確な構成や動作
    を反映したものではありません。

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

  30. Cloud Native Developers JP
    Fin.
    30

    View Slide