DUICUO

オープンソースツールを使ったDevOpsパイプライン構築の初心者向けガイド

[[281557]]

DevOps を初めて使用する場合は、最初の DevOps パイプラインを構築するための 5 つの手順を確認してください。

DevOpsは、ソフトウェア開発において発生する遅延、孤立した問題、その他の問題を解決するための標準的な方法となっています。しかし、DevOpsの初心者で、どこから始めればよいかわからない場合には、あまり役に立ちません。この記事では、DevOpsパイプラインとは何かを解説し、作成するための5つのステップを紹介します。このチュートリアルは包括的なものではありませんが、開発を開始し、後で拡張するための基礎を築くことができます。まずは、短いストーリーを一つ挿入してみましょう。

私のDevOpsの旅

私は以前、Citigroup のクラウド チームで開発に携わっていました...サービスとしてのインフラストラクチャサービスとしてのインフラストラクチャ私はシティバンクのクラウドインフラストラクチャをWebアプリケーションを使って管理していますが、開発パイプラインをより効率的にする方法や、ポジティブなチームカルチャーを育む方法を探ることに常に興味を持っています。その答えは、シティバンクのクラウドアーキテクチャとインフラストラクチャエンジニアリング(Project Phoenix)のCTOであるGreg Lavender氏が推薦してくれた本の中にありました。この本はDevOpsの原則を解説していますが、まるで小説のように読みやすいです。

本の最後にある表には、さまざまな企業がリリース環境で展開する頻度が示されています。

会社展開頻度
アマゾン1日23,000回
グーグル1日5,500回
ネットフリックス1日500回
フェイスブック1日1回
ツイッター週3回
典型的な企業1回/9ヶ月

Amazon、Google、Netflix はどのようにしてこれほどの頻度を実現できるのでしょうか? それは、これらの企業がほぼ完璧な DevOps パイプラインを実装する方法を編み出しているからです。

しかし、CitiがDevOpsを導入する前はそうではありませんでした。当時、私のチームは別の…建設段階ステージ環境は理想的ですが、開発サーバーへのデプロイメントは非常に手作業です。すべての開発者がアクセスできるのは、IBM WebSphere Applications Community Editionをベースとした単一の開発環境サーバーのみです。問題は、複数のユーザーが同時にデプロイしようとするとサーバーがクラッシュすることです。そのため、開発者はデプロイメント中に互いに通知する必要があり、非常に手間がかかります。さらに、コードテストのカバレッジが低いこと、手動によるデプロイメントプロセスが煩雑であること、そして定義されたタスクやユーザー要件に基づいてコードデプロイメントを追跡できないことなどの問題もあります。

何か行動を起こさなければならないと気づき、同じ考えを持つ同僚にも出会いました。私たちは協力してDevOpsパイプラインの初期構築に取り組むことにしました。彼は仮想マシンとTomcatサーバーをセットアップし、私はJenkinsをセットアップしてAtlassian Jira、BitBucket、コードカバレッジテストを統合しました。このサイドプロジェクトは大成功を収めました。開発パイプラインをほぼ完全に自動化し、開発サーバーの稼働率をほぼ100%にまで高め、コードカバレッジテストの追跡と改善が可能になり、GitブランチをデプロイメントとJiraタスクに連携させることができました。さらに、DevOps構築に使用したツールのほとんどはオープンソースでした。

JenkinsのドキュメントやAnsibleといった高度な設定を活用していないため、私たちのDevOpsパイプラインがいかに原始的であるかを今になって実感しています。しかし、このシンプルなプロセスは、おそらくパレートの法則(80/20ルールとも呼ばれる)のおかげでうまく機能しています。

DevOpsとCI/CDパイプラインの簡単な紹介

「DevOpsとは何ですか?」と尋ねると、さまざまな答えが返ってくるかもしれません。DevOpsはアジャイルと同様に、様々な分野を包含するように進化してきましたが、ほとんどの人は少なくとも次の点には同意するでしょう。DevOpsとはソフトウェア開発のプラクティス、あるいは…ソフトウェア開発ライフサイクルソフトウェア開発ライフサイクル(SDLC) であり、その中核となる原則は文化の転換です。開発者と非開発者が同じ空気を吸い、以前は手動でしたタスクが自動化され、誰もが自分の得意分野で仕事をし、同時展開がより頻繁に行われ、スループットが向上し、柔軟性が向上します。

DevOps環境の構築には適切なソフトウェアツールだけでなく、いくつかのツールが不可欠です。中でも最も重要なのは、継続的インテグレーションと継続的デプロイメント(CI/CD)です。異なるビルドフェーズ(例:DEV、INT、TST、QA、UAT、STG、PROD)を備えたパイプライン環境では、手動タスクを自動化し、開発者は高品質なコードを作成し、デプロイメントを柔軟かつ広範囲に展開できます。

この記事では、下の図に示すように、オープンソース ツールを使用して実装された DevOps パイプラインを構築するための 5 段階のアプローチについて説明します。

完全なDevOpsパイプライン

雑談はもう十分です、始めましょう。

ステップ1: CI/CDフレームワーク

まず、JenkinsなどのCI/CDツールが必要です。JenkinsはJavaベースのオープンソースCI/CDツールで、MITライセンスの下で提供されています。DevOpsムーブメントを推進するためのツールであり、…ファクトスタンダード事実上の標準

では、Jenkinsとは何でしょうか? 魔法のように強力なリモートコントロールで、様々なサーバーやツールと連携し、オーケストレーションを実行できるツールを想像してみてください。JenkinsのようなCI/CDツールは単体では役に立ちませんが、様々なツールやサーバーと連携することで、驚くほど強力になります。

Jenkins は、DevOps パイプラインを構築するための多くのオープンソース CI/CD ツールの 1 つにすぎません。

名前ライセンス
ジェンキンスクリエイティブ・コモンズとMIT
トラビス CIマサチューセッツ工科大学
クルーズコントロールBSD
ビルドボットGPL
アパッチ・ガンプアパッチ2.0
キャビーGNU

以下は、CI/CD ツールを使用した場合の DevOps の様子です。

CI/CDツール

CI/CDツールはローカルマシンで実行されていますが、まだ他の作業はできません。DevOpsの道のりを一緒に歩みましょう。

ステップ2: ソースコード管理

CI/CDツールが特定の機能を実行できることを確認する最善(そしておそらく最も簡単)な方法は、ソースコード管理(SCM)ツールと統合することです。なぜソースコード管理が必要なのでしょうか?アプリケーションを開発しているとしましょう。Java、Python、C++、Go、Ruby、JavaScriptなど、どの言語を使用してアプリケーションを構築する場合でも、プログラミングは必要です。記述するコードはソースコードと呼ばれます。最初のうちは、特に一人で作業している場合は、すべてをローカルフォルダーに保存しても問題ないかもしれません。しかし、プロジェクトが拡大し、他の人が関与するようになると、コードの変更を共有するときにマージの競合を回避する方法が必要になります。また、以前のバージョンを復元する方法も必要です。バックアップ、コピー、貼り付けは時代遅れです。あなた(とあなたのチーム)は、より優れたソリューションを求めています。

これがSCMが不可欠となった理由です。SCMツールは、コードをリポジトリに保存することで、バージョン管理と複数ユーザー間のコラボレーションを支援します。

SCMツールは数多くありますが、Gitが最も標準的で適切なツールです。Gitの使用を強くお勧めしますが、ご希望であれば他のオープンソースツールもご利用いただけます。

名前ライセンス
ギットGPLv2 および LGPL v2.1
転覆アパッチ2.0
同時バージョンシステム (CVS) GNU
ベスタLGPL
気まぐれなGNU GPL v2+

SCM を使用すると、DevOps パイプラインは次のようになります。

ソース管理

CI/CDツールは、ソースコードのチェックインとチェックアウトを自動化し、チームメンバー間のコラボレーションを促進できます。素晴らしいと思いませんか?しかし、これを数十億人が利用し、高く評価できる実用的なアプリケーションにするにはどうすればよいでしょうか?

ステップ3: 自動ビルドツール

素晴らしい!これでコードをチェックアウトし、変更をソース管理に送信できるようになりました。また、ソース管理での共同作業に友人を招待することもできます。ただし、アプリケーションはまだビルドされていません。Webアプリケーションにするには、コンパイルして、デプロイ可能なパッケージまたは実行ファイルにパッケージ化する必要があります(JavaScriptやPHPなどのインタープリタ型プログラミング言語ではコンパイルは不要です)。

これが自動ビルドツールの開発につながっています。どのビルドツールを選ぶにせよ、それらはすべて共通の目標を持っています。それは、ソースコードを目的の形式にビルドし、クリーンアップ、コンパイル、テスト、特定の場所へのデプロイといったタスクを自動化することです。ビルドツールはプログラミング言語によって異なりますが、ここでは検討に値する一般的なオープンソースツールをいくつかご紹介します。

名前ライセンスプログラミング言語
メイヴンアパッチ2.0ジャワ
アリアパッチ2.0ジャワ
グラドルアパッチ2.0ジャワ
バゼルアパッチ2.0ジャワ
作るGNU該当なし
うなり声マサチューセッツ工科大学JavaScript
ゴクッマサチューセッツ工科大学JavaScript
ビルダーアパッチルビー
レーキマサチューセッツ工科大学ルビー
AAP GNUパイソン
SConsマサチューセッツ工科大学パイソン
ビットベイクGPLv2パイソン
ケーキマサチューセッツ工科大学C#
航空自衛隊海外駐在員(MIT)リスプ
陰謀団BSDハスケル

素晴らしいですね!これで、自動ビルド ツールの構成ファイルをソース コード制御管理システムに配置し、CI/CD ツールでビルドできるようになりました。

ビルド自動化ツール

どれも素晴らしいですね。でも、どこに展開すればいいのでしょうか?

ステップ4: Webアプリケーションサーバー

ここまでで、実行可能またはデプロイ可能なパッケージが完成しました。真に有用なアプリケーションが何らかのサービスやインターフェースを提供するには、アプリケーションを配布するためのコンテナが必要です。

Webアプリケーションの場合、Webアプリケーションサーバーがコンテナとなります。アプリケーションサーバーは、デプロイ可能なパッケージ内のプログラミングロジックを検出し、ユーザーインターフェースにレンダリングし、ソケットを開いて外部にWebサービスを提供するための環境を提供します。他の環境では、サービスアプリケーションをインストールするためにHTTPサーバー(仮想マシンなど)も必要になります。さて、これらの内容は皆さんが自力で学ぶことになると思います(コンテナについては後ほど説明します)。

ここにはオープンソースの Web アプリケーション サーバーが多数あります。

名前プロトコルプログラミング言語
トムキャットアパッチ2.0ジャワ
桟橋アパッチ2.0ジャワ
ワイルドフライGNU Lesser Publicジャワ
グラスフィッシュCDDLとGNUの非公開ジャワ
ジャンゴ3条項BSDパイソン
竜巻アパッチ2.0パイソン
ガニコーンマサチューセッツ工科大学パイソン
Pythonペーストマサチューセッツ工科大学パイソン
レールマサチューセッツ工科大学ルビー
ノード.jsマサチューセッツ工科大学ジャバスクリプト

DevOps パイプラインはほぼ使用準備が整いました。よくできました!

Webアプリケーションサーバー

ここで作業を止めてさらに統合を進めることもできますが、コードの品質はアプリケーション開発者にとって非常に重要です。

ステップ5: コードカバレッジテスト

コードテストウェアの実装もまた、面倒な作業になり得ますが、開発者はプログラム内のすべてのバグを早期に発見し、コードの品質を向上させてエンドユーザーの満足度を確保する必要があります。幸いなことに、コードをテストし、改善のための提案を提供するオープンソースツールが数多く存在します。さらに、ほとんどのCI/CDツールはこれらのツールを統合し、テストプロセスを自動化できます。

コード テストは、テストの作成と実行を支援する「コード テスト フレームワーク」と、コード品質の向上を支援する「コード品質改善ツール」の 2 つの部分に分かれています。

コードテストフレームワーク

名前ライセンスプログラミング言語
ジュニットEclipseパブリックライセンスジャワ
イージーモックアパッチジャワ
モッキートマサチューセッツ工科大学ジャワ
パワーモックアパッチ2.0ジャワ
パイテストマサチューセッツ工科大学パイソン
仮説モジラパイソン
トックスマサチューセッツ工科大学パイソン

コード品質改善ツール

名前ライセンスプログラミング言語
コベルトゥーラGNUジャワ
コードカバーエクリプスパブリック(EPL)ジャワ
カバレッジ.pyアパッチ2.0パイソン
エマ共通パブリックライセンスジャワ
ジャココEclipseパブリックライセンスジャワ
仮説モジラパイソン
トックスマサチューセッツ工科大学パイソン
ジャスミンマサチューセッツ工科大学JavaScript
カルママサチューセッツ工科大学JavaScript
モカマサチューセッツ工科大学JavaScript
冗談マサチューセッツ工科大学JavaScript

前述のツールとフレームワークのほとんどは、C++ と C# が独自のプログラミング言語であるため (GCC はオープンソースですが)、Java、Python、JavaScript 用に作成されていることに注意してください。

コード カバレッジ テスト ツールを使用したので、DevOps パイプラインはチュートリアルの冒頭に示した図のようになるはずです。

オプションの手順

容器

前述したように、アプリケーションを仮想マシン (VM) またはサーバーにデプロイすることもできますが、コンテナーの方が優れたソリューションです。

コンテナとは何でしょうか?簡単に言うと、仮想マシン(VM)はオペレーティングシステムのリソースを大量に消費し、アプリケーションのサイズを大きくします。一方、コンテナはアプリケーションの実行に必要なライブラリと設定はごくわずかです。VMが依然として重要な用途を持つことは明らかですが、コンテナはアプリケーションサーバーを含むアプリケーションのデプロイにおいて、より軽量なソリューションを提供します。

コンテナには他にも選択肢がありますが、Docker と Kubernetes がより広く使用されています。

名前ライセンス
ドッカーアパッチ2.0
Kubernetesアパッチ2.0

詳細については、Opensource.com の Docker と Kubernetes に関する他の記事を参照してください。

  • Dockerとは何ですか?
  • Docker入門
  • Kubernetes とは何ですか?
  • Kubernetes の実践をゼロから学ぶ

ミドルウェア自動化ツール

私たちのDevOpsパイプラインは、主にアプリケーションの共同構築とデプロイに重点を置いていますが、DevOpsツールを使えば他にも様々なことを実現できます。例えば、次のようなことが挙げられます…インフラストラクチャ管理インフラストラクチャ・アズ・コードIaC(ミドルウェア自動化ツールとも呼ばれる)ツールは、ミドルウェアのインストール、管理、その他のタスクを自動化するのに役立ちます。例えば、自動化ツールは、Webサーバー、データベース、監視ツールなどのアプリケーションを適切な構成で取得し、アプリケーションサーバーにデプロイすることができます。

検討する価値のあるオープンソース ミドルウェア自動化ツールをいくつか紹介します。

名前ライセンス
アンシブルGNUパブリック
ソルトスタックアパッチ2.0
シェフアパッチ2.0
人形ApacheまたはGPL

その他のミドルウェア自動化ツールについては、Opensource.com の他の記事を参照してください。

  • Ansible クイックスタートガイド
  • Ansible自動デプロイメント戦略
  • 構成管理ツールのトップ5

その後の展開

これは、DevOpsパイプライン全体における氷山の一角に過ぎません。まずはCI/CDツールから始め、チームの作業を効率化するために自動化できる他のツールも検討してみてください。また、チームの連携を強化するオープンソースのコミュニケーションツールも検討してみてください。