2016. 11. 24 Update !

イマ旬

Pipeline as Code ~ビルドパイプラインをコードで管理~

近年、継続的インテグレーション(CI:Continuous Integration)や継続的デリバリー(CD:Continuous Delivery)の導入が一般的になってきた反面、CI/CDに関するノウハウの属人化が問題になっています。今回は、それらを解決する”Pipeline as Code”をご紹介します。

岩成祐樹
株式会社NTTデータ システム技術本部 生産技術部 
プロジェクトマネジメント・ソリューションセンタ 岩成祐樹

イマ旬の注目キーワード
Pipeline as Code

既存のCI/CDの問題

CI/CDにより、ビルド、静的コード解析、テスト、デプロイが自動化され、デリバリープロセスは大幅に効率化、高速化されました(ここで、デリバリープロセスは、ビルドからリリースまでの一連の流れを指します)。

これらの自動化を実現するためには、JenkinsなどのCI/CDツールが利用されています。CI/CDツールでは、GUIによる操作が中心であるため、誰でも気軽にジョブの作成、実行、閲覧が可能です。

図1:Jenkinsのジョブ設定画面

図1:Jenkinsのジョブ設定画面

しかし、GUIによる設定は、とっつきやすい反面、ジョブの「履歴管理」、「差分管理」、「再利用」が難しいという課題があります。その結果、特定の人しかCI/CDツールの維持メンテができず、デリバリープロセスの単一障害点になってしまうという状況が発生します(しばしば、そういった方は”Jenkinsおじさん”と呼ばれます)。

“Pipeline as Code”というアプローチ

“○○ as Code”という言葉を聞いたことがあるでしょうか?
代表例としてInfrastructure as Codeが挙げられますが、これは”○○の設定をコードで管理する”というアプローチです。このアプローチにより、ソフトウェア開発でのベストプラクティスが適用可能となり、以下のようなメリットがあります。

・設定の履歴が管理可能
・設定の差分確認が容易
・設定の再利用が容易

CI/CDツールにおいても同様に、”Pipeline as Code”が適用され始めています。SaaS系のCI/CDツール(Travis CI、Circle CI など)やJenkins2.0では、簡単なドメイン固有言語(DSL: Domain Specific Language)により、ビルドパイプラインを作成する機能が提供されています。

図2:DSLの一例(Jenkinsの場合)

図2:DSLの一例(Jenkinsの場合)

Pipeline as Codeの今後の課題

Pipeline as Codeにより、ビルドパイプラインの履歴管理、差分管理、再利用が容易になりました。しかし、依然として、新たなDSL、言語、ジョブの書き方を覚える必要があるなど、まだまだ改善の余地があります。

サービス、プロダクトをユーザの元に継続的に届けるためには、CI/CDは欠かすことができません。今後も、CI/CDツールの進化は目が離せません。

※1 CI/CD の解説コラム イマ旬!「リリースサイクルの高速化を実現する"デリバリーアーキテクト"とは?」

http://www.nttdata.com/jp/ja/insights/trend_keyword/2015110901.html

※2 Jenkins

https://jenkins.io/

※3 Infrastructure as Code の解説コラム イマ旬!「Infrastructure as Codeで変わるITインフラ管理」

http://www.nttdata.com/jp/ja/insights/trend_keyword/2013053001.html

※4 Pipeline as Code with Jenkins

https://jenkins.io/solutions/pipeline/

※5 Travis CI

https://travis-ci.org/

※6 Circle CI

https://circleci.com/