SlideShare a Scribd company logo
Zuul と OpenStack で作る
気の利いた CI 環境
Akihiro Motoki
Jul 22, 2019
OpenStack Days Tokyo 2019
Who am I ?
● Akihiro Motoki / 元木 顕弘
○ NEC OSS推進センター
○ IRC: amotoki, Twitter: @ritchey98
○ 以前は IPルータ、広域Ethernet装置、迷惑メールフィルタ、 OpenFlow 関連技術などの研究開発
をしていました。
● OpenStack Upstream Developer
○ Neutron: Core reviewer + drivers team
○ Core reviewer of Horizon, OpenStack Client (OSC), I18n
○ API-SIG, OpenStack SDK …
● OpenStack Operator (でした、ちょっと前まで)
● 日本OpenStackユーザー会 – 副会長、勉強会企画チーム
Zuul とは?
“Stop Merging Broken Code”
https://zuul-ci.org/index.html
● Project Gating ツール (CI ツール)
● コードの変更に対するテストを実行するためのインフラ
● もとは OpenStack 開発での CI を実現するために作られた
● 現在は汎用的な CI ツールになっている
20190722 Building handy CI with zuul and OpenStack
Zuul の特徴
● Cross Project Testing (マージ時)
○ 複数のレポジトリが関係している場合、それぞれのレポジトリではテストが通っていても、組み合わ
せるとテストが失敗することがある
○ 関連があるレポジトリに関しては、マージが指示された順序で、すべての組み合わせを検証
→ どの時点においても動作することを保証
nova
neutron
cinder
1
1
1
2
2
2
1
1 1
N マージ対象
2
3
1
並列実行
2
3
3
失敗したときは戻した組
み合わせで実行
2
2
3
Zuul の特徴
● Cross Project Dependency
○ 複数のプロジェクトにまたがるパッチをマージ前にテスト可能
●
● 例えば、nova と neutron にまたがる機能を開発しているとする
● Nova のパッチは neutron に実装中の機能に依存
● Neutron のパッチをマージする前に nova との組み合わせが動作することを確認し
たい
Awesome network feature support
Depends-On: https://review.example.com/3
Nova パッチのコミットメッセージ
Neutron のパッチの URL
ジョブ定義
● レポジトリ内でのジョブ定義
○ CI システムに各レポジトリのジョブ定義を書く必要がなく、ジョブの分散・自律管理が可能
○ https://opendev.org/openstack/neutron/src/branch/master/.zuul.yaml
● Ansible によるジョブ定義
○ shell script で書く場合に比べるとモジュール化が行いやすい
● ジョブの再利用、継承
○ CI を運用する上で必要となるジョブやロールがあらかじめ準備されている
■ https://opendev.org/zuul/zuul-jobs など外部の定義のインポートもできる
○ パッチのテスト環境への展開や実行ログの保存など
○ OpenStack CI での継承 : http://zuul.openstack.org/jobs
■ 例えば “neutron-functional” でフィルタしてみるとわかりやすい
ジョブ定義の再利用
$ cat playbooks/base/post-logs.yaml
- hosts: localhost
gather_facts: False
roles:
- role: upload-logs
zuul_log_url: "http://localhost:8000"
$ cat zuul.d/jobs.yaml
- job:
name: base
parent: null
pre-run: playbooks/base/pre.yaml
post-run:
- playbooks/base/post-ssh.yaml
- playbooks/base/post-logs.yaml
roles:
- zuul: zuul/zuul-jobs
$ cat playbooks/base/pre.yaml
- hosts: all
roles:
- add-build-sshkey
- prepare-workspace
$ less .zuul.yaml
- job:
name: testjob
parent: base
run: playbooks/testjob.yaml
継承
ジョブ定義も比較的カンタン
Python プロジェクト test1 で “tox -e pep8” を実行したい場合
● tox-pep8 が、 tox 環境の準備を行って、
pep8 環境を実行してくれる
● base ジョブを継承しているので、
ログの保存なども行われる。
$ less test1/.zuul.yaml
- project:
check:
jobs:
- tox-pep8:
vars:
tox_install_siblings: false
gate:
jobs:
- tox-pep8:
vars:
tox_install_siblings: false
Zuul の構造
zuul-executor
zuul-scheduler
Test node
Test node
gerrit
github
ジョブ実行
nodepool
gearman
zookeeper
Test node 作成
Nodepool
● テストノードの管理を行う
○ 負荷に応じてテストノード数を増減
○ テストが終わったノードを削除
● 様々なバックエンドに対応
○ static
○ OpenStack
○ Kubernetes (namespace / pod)
○ OpenShift
○ AWS
Nodepool の OpenStack との連携
● Nodepool 実行ノードに clouds.yaml (OpenStack 認証情報を書いたファイル) を
用意する。
○ 置き場所は以下のいずれか
■ ~/.config/openstack/clouds.yaml
■ /etc/openstack/clouds.yaml
○ https://docs.openstack.org/openstacksdk/latest/user/config/configuration.html
○ clouds.yaml の動作確認は OS_CLOUD 環境変数を設定して openstack コマンドを実行
● Nodepool の設定ファイルにノード情報を記載
○ http://paste.openstack.org/show/754613/
● Nodepool を再起動すると OpenStack 側に VM が自動的に作成される
○ http://paste.openstack.org/show/754612/
Zuul のユーザー
● BMW
○ Zuul で CI/CD をまとめて運用。Zuul プロセスは OpenShift 上で動かすことで可用性を確保
● GoDaddy
● OpenLab
● OpenStack Foundation
○ OpenStack, Airship, StarlingX など
● Ansible CI (openstack module + openstacksdk integration)
○ E.g. https://github.com/ansible/ansible/pull/59292
https://zuul-ci.org/users.html
どんな場面で有効?
● 多くの類似ジョブが存在している CI 環境では有用
○ 成果の再利用、継承
● 複数の互いに関連するプロジェクトがあり、
それらにまたがる開発を行う場合
● Jenkins ジョブ定義で shell script をたくさん書いている場合
● 単純な CI であれば SaaS の CI を利用する方が楽と思われる
○ CircleCI, TravisCI
● CD Foundation の下、Tekton や JenkinsX, Spinaker などの動向も見つつ、
使いやすいものを使っていくがよいと思われる
References
● Zuul Homepage https://zuul-ci.org
● Quick start and Tutorial https://zuul-ci.org/docs/zuul/admin/quick-start.html

More Related Content

PPTX
qpstudy 2014.04 ミドルウェア設計の勘所
PPTX
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
PPTX
トランクベース開発を活用して爆速に開発した話
PDF
Apache Arrow - データ処理ツールの次世代プラットフォーム
PPTX
Istioサービスメッシュ入門
PPTX
NGINXをBFF (Backend for Frontend)として利用した話
PDF
Kali linux
qpstudy 2014.04 ミドルウェア設計の勘所
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
トランクベース開発を活用して爆速に開発した話
Apache Arrow - データ処理ツールの次世代プラットフォーム
Istioサービスメッシュ入門
NGINXをBFF (Backend for Frontend)として利用した話
Kali linux

What's hot (20)

PDF
最近のOpenStackを振り返ってみよう
PDF
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
PDF
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
PDF
DockerとPodmanの比較
PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PDF
10分でわかる Cilium と XDP / BPF
PDF
PostgreSQLアーキテクチャ入門
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PPTX
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
PPTX
OVN 設定サンプル | OVN config example 2015/12/27
PDF
DockerとKubernetesをかけめぐる
PDF
Dockerfile を書くためのベストプラクティス解説編
PPTX
Keycloakの実際・翻訳プロジェクト紹介
PDF
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PDF
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
PDF
Keycloak拡張入門
PDF
Linux女子部 systemd徹底入門
PDF
Linux packet-forwarding
PDF
Ingressの概要とLoadBalancerとの比較
最近のOpenStackを振り返ってみよう
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
DockerとPodmanの比較
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
コンテナ未経験新人が学ぶコンテナ技術入門
10分でわかる Cilium と XDP / BPF
PostgreSQLアーキテクチャ入門
コンテナの作り方「Dockerは裏方で何をしているのか?」
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
OVN 設定サンプル | OVN config example 2015/12/27
DockerとKubernetesをかけめぐる
Dockerfile を書くためのベストプラクティス解説編
Keycloakの実際・翻訳プロジェクト紹介
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
Keycloak拡張入門
Linux女子部 systemd徹底入門
Linux packet-forwarding
Ingressの概要とLoadBalancerとの比較
Ad

Similar to 20190722 Building handy CI with zuul and OpenStack (20)

PDF
Eclipse PDT + MakeGoodによるPHPコードのテスト
PDF
PTLのお仕事とリリースパイプラインの裏側
PPTX
Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014
PDF
OCaml でデータ分析
PDF
Sbtのマルチプロジェクトはいいぞ
PDF
Eclipse PDT + MakeGood による PHP コードのテスト
PDF
Ansible quickstart
PDF
serverless openstack 101
PDF
PythonのGUI_2018 with NSEG
PDF
WebRTC開発者向けプラットフォーム SkyWayの裏側
PDF
2018 07-23
PDF
red-hat-forum-2017-openshift-baremetal-deployment
PDF
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
PDF
PyQtではじめるGUIプログラミング
PPTX
今時のDev opsの取り組み事例集
PDF
Personal Cloud Automation
PDF
Jenkins study jenkins build-cicdi
PDF
書こう! 使おう! 単体テスト
PDF
OpenStack Summit Vancouver YVR Ops
PPTX
UIテストの実行時間の短縮の方法
Eclipse PDT + MakeGoodによるPHPコードのテスト
PTLのお仕事とリリースパイプラインの裏側
Canonicalが支える、さくっと使えるUbuntu OpenStack - OpenStack Day in ITpro EXPO 2014
OCaml でデータ分析
Sbtのマルチプロジェクトはいいぞ
Eclipse PDT + MakeGood による PHP コードのテスト
Ansible quickstart
serverless openstack 101
PythonのGUI_2018 with NSEG
WebRTC開発者向けプラットフォーム SkyWayの裏側
2018 07-23
red-hat-forum-2017-openshift-baremetal-deployment
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
PyQtではじめるGUIプログラミング
今時のDev opsの取り組み事例集
Personal Cloud Automation
Jenkins study jenkins build-cicdi
書こう! 使おう! 単体テスト
OpenStack Summit Vancouver YVR Ops
UIテストの実行時間の短縮の方法
Ad

More from Akihiro Motoki (20)

PDF
Kubernetes Upgrade survey (Dec 2023) results
PDF
20190722 OpenStack community past present future
PDF
20190118-josug-open stack-community-goals
PDF
OpenStack Neutron IPv6 Lessons
PDF
Neutron: br-ex is now deprecated! what is modern way?
PDF
20161129 neutron recent topic
PDF
20150713-OpenStack-5thbirthday-kilo-liberty-and-towards
PDF
20150713 OpenStack Translation in Japan
PDF
neutron_icehouse_update
PDF
Neutron Icehouse Update (Japanese)
PDF
OpenStack Atlanta Summit Report: Neutron, Nova and design summit sessions
PDF
20131211 Neutron Havana
PDF
20131212 Okinawa OpenDays OpenStack
PDF
20131011_openstack-neutron-vyattameeting
PDF
20130724 openstack-3rd-anniversary-amotoki
PDF
OpenStack Contribution Howto
PDF
20121216 OSC Cloud OpenStack Quantum
PDF
Horizon Quantum Integration grizzly
PDF
Horizon quantum-integration-grizzly
PDF
Quantum-grizzly-packet-filtering
Kubernetes Upgrade survey (Dec 2023) results
20190722 OpenStack community past present future
20190118-josug-open stack-community-goals
OpenStack Neutron IPv6 Lessons
Neutron: br-ex is now deprecated! what is modern way?
20161129 neutron recent topic
20150713-OpenStack-5thbirthday-kilo-liberty-and-towards
20150713 OpenStack Translation in Japan
neutron_icehouse_update
Neutron Icehouse Update (Japanese)
OpenStack Atlanta Summit Report: Neutron, Nova and design summit sessions
20131211 Neutron Havana
20131212 Okinawa OpenDays OpenStack
20131011_openstack-neutron-vyattameeting
20130724 openstack-3rd-anniversary-amotoki
OpenStack Contribution Howto
20121216 OSC Cloud OpenStack Quantum
Horizon Quantum Integration grizzly
Horizon quantum-integration-grizzly
Quantum-grizzly-packet-filtering

20190722 Building handy CI with zuul and OpenStack

  • 1. Zuul と OpenStack で作る 気の利いた CI 環境 Akihiro Motoki Jul 22, 2019 OpenStack Days Tokyo 2019
  • 2. Who am I ? ● Akihiro Motoki / 元木 顕弘 ○ NEC OSS推進センター ○ IRC: amotoki, Twitter: @ritchey98 ○ 以前は IPルータ、広域Ethernet装置、迷惑メールフィルタ、 OpenFlow 関連技術などの研究開発 をしていました。 ● OpenStack Upstream Developer ○ Neutron: Core reviewer + drivers team ○ Core reviewer of Horizon, OpenStack Client (OSC), I18n ○ API-SIG, OpenStack SDK … ● OpenStack Operator (でした、ちょっと前まで) ● 日本OpenStackユーザー会 – 副会長、勉強会企画チーム
  • 3. Zuul とは? “Stop Merging Broken Code” https://zuul-ci.org/index.html ● Project Gating ツール (CI ツール) ● コードの変更に対するテストを実行するためのインフラ ● もとは OpenStack 開発での CI を実現するために作られた ● 現在は汎用的な CI ツールになっている
  • 5. Zuul の特徴 ● Cross Project Testing (マージ時) ○ 複数のレポジトリが関係している場合、それぞれのレポジトリではテストが通っていても、組み合わ せるとテストが失敗することがある ○ 関連があるレポジトリに関しては、マージが指示された順序で、すべての組み合わせを検証 → どの時点においても動作することを保証 nova neutron cinder 1 1 1 2 2 2 1 1 1 N マージ対象 2 3 1 並列実行 2 3 3 失敗したときは戻した組 み合わせで実行 2 2 3
  • 6. Zuul の特徴 ● Cross Project Dependency ○ 複数のプロジェクトにまたがるパッチをマージ前にテスト可能 ● ● 例えば、nova と neutron にまたがる機能を開発しているとする ● Nova のパッチは neutron に実装中の機能に依存 ● Neutron のパッチをマージする前に nova との組み合わせが動作することを確認し たい Awesome network feature support Depends-On: https://review.example.com/3 Nova パッチのコミットメッセージ Neutron のパッチの URL
  • 7. ジョブ定義 ● レポジトリ内でのジョブ定義 ○ CI システムに各レポジトリのジョブ定義を書く必要がなく、ジョブの分散・自律管理が可能 ○ https://opendev.org/openstack/neutron/src/branch/master/.zuul.yaml ● Ansible によるジョブ定義 ○ shell script で書く場合に比べるとモジュール化が行いやすい ● ジョブの再利用、継承 ○ CI を運用する上で必要となるジョブやロールがあらかじめ準備されている ■ https://opendev.org/zuul/zuul-jobs など外部の定義のインポートもできる ○ パッチのテスト環境への展開や実行ログの保存など ○ OpenStack CI での継承 : http://zuul.openstack.org/jobs ■ 例えば “neutron-functional” でフィルタしてみるとわかりやすい
  • 8. ジョブ定義の再利用 $ cat playbooks/base/post-logs.yaml - hosts: localhost gather_facts: False roles: - role: upload-logs zuul_log_url: "http://localhost:8000" $ cat zuul.d/jobs.yaml - job: name: base parent: null pre-run: playbooks/base/pre.yaml post-run: - playbooks/base/post-ssh.yaml - playbooks/base/post-logs.yaml roles: - zuul: zuul/zuul-jobs $ cat playbooks/base/pre.yaml - hosts: all roles: - add-build-sshkey - prepare-workspace $ less .zuul.yaml - job: name: testjob parent: base run: playbooks/testjob.yaml 継承
  • 9. ジョブ定義も比較的カンタン Python プロジェクト test1 で “tox -e pep8” を実行したい場合 ● tox-pep8 が、 tox 環境の準備を行って、 pep8 環境を実行してくれる ● base ジョブを継承しているので、 ログの保存なども行われる。 $ less test1/.zuul.yaml - project: check: jobs: - tox-pep8: vars: tox_install_siblings: false gate: jobs: - tox-pep8: vars: tox_install_siblings: false
  • 10. Zuul の構造 zuul-executor zuul-scheduler Test node Test node gerrit github ジョブ実行 nodepool gearman zookeeper Test node 作成
  • 11. Nodepool ● テストノードの管理を行う ○ 負荷に応じてテストノード数を増減 ○ テストが終わったノードを削除 ● 様々なバックエンドに対応 ○ static ○ OpenStack ○ Kubernetes (namespace / pod) ○ OpenShift ○ AWS
  • 12. Nodepool の OpenStack との連携 ● Nodepool 実行ノードに clouds.yaml (OpenStack 認証情報を書いたファイル) を 用意する。 ○ 置き場所は以下のいずれか ■ ~/.config/openstack/clouds.yaml ■ /etc/openstack/clouds.yaml ○ https://docs.openstack.org/openstacksdk/latest/user/config/configuration.html ○ clouds.yaml の動作確認は OS_CLOUD 環境変数を設定して openstack コマンドを実行 ● Nodepool の設定ファイルにノード情報を記載 ○ http://paste.openstack.org/show/754613/ ● Nodepool を再起動すると OpenStack 側に VM が自動的に作成される ○ http://paste.openstack.org/show/754612/
  • 13. Zuul のユーザー ● BMW ○ Zuul で CI/CD をまとめて運用。Zuul プロセスは OpenShift 上で動かすことで可用性を確保 ● GoDaddy ● OpenLab ● OpenStack Foundation ○ OpenStack, Airship, StarlingX など ● Ansible CI (openstack module + openstacksdk integration) ○ E.g. https://github.com/ansible/ansible/pull/59292 https://zuul-ci.org/users.html
  • 14. どんな場面で有効? ● 多くの類似ジョブが存在している CI 環境では有用 ○ 成果の再利用、継承 ● 複数の互いに関連するプロジェクトがあり、 それらにまたがる開発を行う場合 ● Jenkins ジョブ定義で shell script をたくさん書いている場合 ● 単純な CI であれば SaaS の CI を利用する方が楽と思われる ○ CircleCI, TravisCI ● CD Foundation の下、Tekton や JenkinsX, Spinaker などの動向も見つつ、 使いやすいものを使っていくがよいと思われる
  • 15. References ● Zuul Homepage https://zuul-ci.org ● Quick start and Tutorial https://zuul-ci.org/docs/zuul/admin/quick-start.html