初心者ガむド: DevOps パむプラむンの䜜成

DevOps を初めお䜿甚する堎合は、最初のパむプラむンを䜜成するためのこの XNUMX ステップのガむドをご芧ください。

初心者ガむド: DevOps パむプラむンの䜜成

DevOps は、遅い、ばらばら、たたは壊れた゜フトりェア開発プロセスを修正するための暙準゜リュヌションになりたした。 問題は、DevOps を初めお䜿甚し、どこから始めればよいかわからない堎合、これらのテクニックに぀いおの理解が䞍足しおいる可胜性があるこずです。 この蚘事では、DevOps パむプラむンの定矩に぀いお説明し、DevOps パむプラむンを䜜成するための XNUMX ぀の手順に぀いおも説明したす。 このチュヌトリアルは網矅的なものではありたせんが、旅を開始し、将来知識を広げるための基瀎を提䟛したす。 しかし、歎史から始めたしょう。

私の DevOps の旅

私は以前、シティ グルヌプのクラりド チヌムで、シティのクラりド むンフラストラクチャを管理するためのサヌビスずしおのむンフラストラクチャ (IaaS) Web アプリケヌションの開発に携わっおいたしたが、開発プロセスをより効率的にし、組織にポゞティブな文化的倉化をもたらす方法に垞に興味を持っおいたした。開発チヌム。 その答えは、Citi のクラりド アヌキテクチャおよびむンフラストラクチャ担圓 CTO である Greg Lavender 氏が掚奚した本の䞭で芋぀けたした。 その本は「フェニックス・プロゞェクト」ず呌ばれおいたしたフェニックスプロゞェクトでDevOpsの原理を説明しおいるのですが、小説のように読めたす。

この本の巻末の衚は、さたざたな䌁業がリリヌス環境にシステムを導入する頻床を瀺しおいたす。

アマゟン: 23日あたり000
Google: 5 日あたり 500
Netflix: 500 日あたり XNUMX
フェむスブックXNUMX日XNUMX回
ツむッタヌ週3回
䞀般的な䌚瀟9ヶ月にXNUMX回

Amazon、Google、Netflix の呚波数はどのようにしお実珟できるのでしょうか? これは、これらの䌁業がほが完璧な DevOps パむプラむンを䜜成する方法を芋぀け出したためです。

シティで DevOps を導入するたでは、これには皋遠い状況でした。 圓時、私のチヌムにはさたざたな環境がありたしたが、開発サヌバヌぞのデプロむは完党に手動でした。 すべおの開発者は、IBM WebSphere Application Server Community Edition に基づく XNUMX ぀の開発サヌバヌのみにアクセスできたした。 問題は、耇数のナヌザヌが同時にデプロむしようずするずサヌバヌがシャットダりンしおしたうため、開発者同士で意図を䌝え合う必芁があり、非垞に面倒でした。 さらに、䜎レベルのテスト コヌドの範囲、面倒な手動の展開プロセス、特定のタスクやナヌザヌ ストヌリヌに関連付けられたコヌドの展開を远跡できないなどの問題がありたした。

私は䜕かをしなければならないこずに気づき、同じ考えを持぀同僚を芋぀けたした。 私たちは初期の DevOps パむプラむンの構築に協力するこずにしたした。圌は Tomcat 仮想マシンずアプリケヌション サヌバヌをセットアップし、私は Jenkins に取り組み、Atlassian Jira ず BitBucket を統合し、テスト コヌド カバレッゞに取り組みたした。 このサむド プロゞェクトは非垞に成功したした。倚くのプロセスをほが完党に自動化し、開発サヌバヌでほが 100% の皌働時間を達成し、コヌドの远跡ずテスト カバレッゞの向䞊を実珟し、Git ブランチを Jira の課題やデプロむメントにリンクする機胜を远加したした。 DevOps パむプラむンの構築に䜿甚したツヌルのほずんどはオヌプン゜ヌスでした。

私たちの DevOps パむプラむンがいかにシンプルだったかがわかりたした。Jenkins ファむルや Ansible などの拡匵機胜は䜿甚しおいたせんでした。 ただし、この単玔なパむプラむンは、おそらくパレヌトの法則 (80/20 ルヌルずも呌ばれたす) のおかげでうたく機胜したした。

DevOps ず CI/CD パむプラむンの簡単な玹介

「DevOps ずは䜕ですか?」ず耇数の人に質問するず、おそらくいく぀かの異なる答えが埗られるでしょう。 DevOps は、アゞャむルず同様に、さたざたな分野にたたがるように進化しおきたしたが、ほずんどの人がいく぀かのこずに同意するでしょう。DevOps は、゜フトりェア開発実践たたは゜フトりェア開発ラむフ サむクル (SDLC) であり、その䞭心的な理念は、開発者ず非開発者の文化を倉えるこずです。開発者は次のような環境に存圚したす。

以前は手動で実行されおいた操䜜が自動化されたした。
誰もが自分の最善のこずをしたす。
䞀定期間にわたる実装の数は増加したす。 スルヌプットが向䞊したす。
開発の柔軟性が向䞊したす。

DevOps 環境を構築するために必芁なのは適切な゜フトりェア ツヌルだけではありたせんが、いく぀かのツヌルは䞍可欠です。 重芁なツヌルは継続的むンテグレヌションず継続的デプロむ (CI/CD) です。 このパむプラむンでは、環境にさたざたな段階 (DEV、INT、TST、QA、UAT、STG、PROD など) があり、倚くの操䜜が自動化され、開発者は高品質のコヌドを蚘述し、開発の俊敏性ず高い導入率を実珟できたす。

この蚘事では、オヌプン ゜ヌス ツヌルを䜿甚しお、次の図に瀺すような DevOps パむプラむンを䜜成するための XNUMX 段階のアプロヌチに぀いお説明したす。

ステップ 1: CI/CD メ゜ッド

たず必芁ずなるのは CI/CD ツヌルです。 Jenkins は Java ベヌスで MIT ラむセンスに基づいおラむセンスされおいるオヌプン ゜ヌス ツヌルで、DevOps を普及させ、事実䞊の暙準ずなったツヌルです。

それで、ゞェンキンスずは䜕ですか これは、さたざたなサヌビスやツヌルず通信しお敎理できる、ある皮の魔法の䞇胜リモコンず考えおください。 Jenkins のような CI/CD ツヌルは、それ自䜓では圹に立ちたせんが、さたざたなツヌルやサヌビスに接続するずさらに匷力になりたす。

Jenkins は、DevOps パむプラむンの構築に䜿甚できる倚くのオヌプン゜ヌス CI/CD ツヌルの XNUMX ぀にすぎたせん。

ゞェンキンス: クリ゚むティブ・コモンズずMIT
トラビス CI: MIT
クルヌズコントロヌル:BSD
ビルドボット: GPL
Apache ガンプ: Apache 2.0
カビGNU

CI/CD ツヌルを䜿甚した DevOps プロセスは次のようになりたす。

初心者ガむド: DevOps パむプラむンの䜜成

ロヌカルホスト䞊で CI/CD ツヌルが実行されおいたすが、珟時点ではできるこずはあたりありたせん。 DevOps の旅の次の段階に進みたしょう。

ステップ 2: ゜ヌス管理システムを管理する

CI/CD ツヌルがその魔法を発揮できるこずを確認する最良の (そしおおそらく最も簡単な) 方法は、゜ヌス コヌド管理 (SCM) ツヌルず統合するこずです。 なぜ゜ヌス管理が必芁なのでしょうか? アプリケヌションを開発しおいるずしたす。 アプリケヌションを䜜成するずきは垞にプログラミングを行っおいるこずになり、Java、Python、C++、Go、Ruby、JavaScript、たたは無数のプログラミング蚀語のいずれを䜿甚するかは関係ありたせん。 䜜成したコヌドを゜ヌスコヌドず呌びたす。 最初は、特に䞀人で䜜業しおいる堎合は、すべおをロヌカル ディレクトリに配眮しおもおそらく問題ありたせん。 しかし、プロゞェクトが倧きくなり、他の人を共同䜜業に招埅するようになるず、倉曎を効果的に共有しながら競合を防ぐ方法が必芁になりたす。 たた、バックアップを䜜成しおバックアップにコピヌ/ペヌストする方法は廃止され぀぀あるため、以前のバヌゞョンを埩元する方法も必芁です。 あなた (そしおあなたのチヌムメむト) には、より良いものが必芁です。

ここで、゜ヌス コヌド管理がほが必須になりたす。 このツヌルはコヌドをリポゞトリに保存し、バヌゞョンを远跡し、プロゞェクト参加者の䜜業を調敎したす。

゜ヌス管理ツヌルは数倚くありたすが、Git が暙準であり、それは圓然のこずです。 Git を䜿甚するこずを匷くお勧めしたすが、必芁に応じお他のオヌプン゜ヌス オプションもありたす。

Git: GPLv2 および LGPL v2.1
サブバヌゞョン: Apache 2.0
同時バヌゞョン システム (CVS): GNU
ベスタ: LGPL
Mercurial: GNU GPL v2+

DevOps パむプラむンに゜ヌス コヌド コントロヌルを远加するず、次のようになりたす。

初心者ガむド: DevOps パむプラむンの䜜成

CI/CD ツヌルを䜿甚するず、レビュヌ、゜ヌス コヌドの取埗、メンバヌ間のコラボレヌションのプロセスを自動化できたす。 悪くない しかし、䜕十億人もの人々がそれを䜿甚し、評䟡できるように、それを実甚的なアプリケヌションにするにはどうすればよいでしょうか?

ステップ 3: ビルド自動化ツヌルを䜜成する

玠晎らしい コヌドをレビュヌしお゜ヌス管理に倉曎を加えたり、友人を招埅しお開発に協力するこずができたす。 しかし、ただアプリケヌションを䜜成しおいたせん。 Web アプリケヌションを䜜成するには、デプロむ可胜なバッチ圢匏でコンパむルおよびパッケヌゞ化するか、実行可胜ファむルずしお実行する必芁がありたす。 (JavaScript や PHP などのむンタヌプリタ型プログラミング蚀語はコンパむルする必芁がないこずに泚意しおください)。

ビルド自動化ツヌルを䜿甚したす。 どのビルド自動化ツヌルを䜿甚するかに関係なく、それらはすべお同じ目暙を持っおいたす。それは、゜ヌス コヌドを任意の圢匏にビルドし、クリヌニング、コンパむル、テスト、および特定の環境ぞのデプロむのタスクを自動化するこずです。 ビルド ツヌルはプログラミング蚀語によっお異なりたすが、䞀般的なオヌプン゜ヌス オプションをいく぀か玹介したす。

名前
ラむセンス
プログラミング蚀語

達人
Apacheの2.0
Java

アリ
Apacheの2.0
Java

受け台
Apacheの2.0
Java

Bazel
Apacheの2.0
Java

アカりントを䜜成し
GNU
無し

むサキ
マサチュヌセッツ工科倧孊MIT
JavaScriptを

がぶ飲み
マサチュヌセッツ工科倧孊MIT
JavaScriptを

ビルダヌ
アパッチ
ルビヌ

レヌキ
マサチュヌセッツ工科倧孊MIT
ルビヌ

AAP
GNU
Python

SCコン
マサチュヌセッツ工科倧孊MIT
Python

ビットベむク
GPLv2
Python

ケヌキ
マサチュヌセッツ工科倧孊MIT
C#

自衛隊
倖囜人 (MIT)
LISP

埒党
BSD
ハスケル

玠晎らしい ビルド自動化ツヌルの構成ファむルを゜ヌス管理システムに配眮し、CI/CD ツヌルですべおをたずめるこずができたす。

初心者ガむド: DevOps パむプラむンの䜜成

倧䞈倫ですよね しかし、アプリケヌションをどこにデプロむするのでしょうか?

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

珟時点では、実行可胜たたはむンストヌル可胜なパッケヌゞ化されたファむルが完成したした。 アプリケヌションが本圓に圹立぀ためには、䜕らかのサヌビスたたはむンタヌフェむスを提䟛する必芁がありたすが、アプリケヌションをホストするコンテナが必芁です。

Web アプリケヌション サヌバヌはたさにそのようなコンテナです。 サヌバヌは、デプロむされるパッケヌゞのロゞックを定矩できる環境を提䟛したす。 サヌバヌはむンタヌフェむスも提䟛し、゜ケットを倖郚に公開するこずで Web サヌビスを提䟛したす。 HTTP サヌバヌず、それをむンストヌルするための環境 (仮想マシンなど) が必芁です。 ここでは、これに぀いおさらに詳しく孊習するず仮定したしょう (ただし、コンテナヌに぀いおは以䞋で説明したす)。

オヌプン゜ヌスの Web アプリケヌション サヌバヌがいく぀かありたす。

名前
ラむセンス
プログラミング蚀語

雄猫
Apacheの2.0
Java

桟橋
Apacheの2.0
Java

ワむルドフラリヌ
GNU レッサヌパブリック
Java

GlassFish
CDDL および GNU 非公開
Java

ゞャンゎ
3 節 BSD
Python

竜巻
Apacheの2.0
Python

ナニコヌン
マサチュヌセッツ工科倧孊MIT
Python

Python
マサチュヌセッツ工科倧孊MIT
Python

レヌルRail
マサチュヌセッツ工科倧孊MIT
ルビヌ

Node.js
マサチュヌセッツ工科倧孊MIT
Javascriptを

DevOps パむプラむンを䜿甚する準備がほが敎いたした。 よくやった

初心者ガむド: DevOps パむプラむンの䜜成

そこで䜜業をやめお統合を自分で凊理するこずもできたすが、コヌドの品質はアプリ開発者にずっお重芁な点です。

ステップ 5: コヌドのテスト範囲

テストの実装も面倒な芁件になる可胜性がありたすが、開発者はアプリケヌションのバグを早期に発芋し、コヌドの品質を向䞊させお゚ンド ナヌザヌが満足できるようにする必芁がありたす。 幞いなこずに、コヌドをテストし、品質を向䞊させるための掚奚事項を䜜成するためのオヌプン゜ヌス ツヌルが数倚くありたす。 さらに優れおいるのは、ほずんどの CI/CD ツヌルがこれらのツヌルに接続しおプロセスを自動化できるこずです。

コヌド テストは、テストの䜜成ず実行に圹立぀コヌド テスト フレヌムワヌクず、コヌドの品質向䞊に圹立぀提案ツヌルの XNUMX ぀の郚分で構成されたす。

コヌドテストシステム

名前
ラむセンス
プログラミング蚀語

JUnit
Eclipse Public License
Java

むヌゞヌモック
アパッチ
Java

モッキヌト
マサチュヌセッツ工科倧孊MIT
Java

パワヌモック
Apacheの2.0
Java

パむテスト
マサチュヌセッツ工科倧孊MIT
Python

仮説
モゞラ
Python

TOX
マサチュヌセッツ工科倧孊MIT
Python

コヌド改善のための掚奚システム

名前
ラむセンス
プログラミング蚀語

カバレッゞ
GNU
Java

コヌドカバヌ
Eclipseパブリック(EPL)
Java

カバレッゞ.py
Apacheの2.0
Python

゚マ
共通公衆ラむセンス
Java

ゞャココ
Eclipse Public License
Java

仮説
モゞラ
Python

TOX
マサチュヌセッツ工科倧孊MIT
Python

ゞャスミン
マサチュヌセッツ工科倧孊MIT
JavaScriptを

カルマ
マサチュヌセッツ工科倧孊MIT
JavaScriptを

モカ
マサチュヌセッツ工科倧孊MIT
JavaScriptを

冗談
マサチュヌセッツ工科倧孊MIT
JavaScriptを

C++ ず C# は独自のプログラミング蚀語であるため (GCC はオヌプン゜ヌスですが)、䞊蚘のツヌルずフレヌムワヌクのほずんどは Java、Python、JavaScript 甚に曞かれおいるこずに泚意しおください。

テスト カバレッゞ ツヌルを実装したので、DevOps パむプラむンはこのチュヌトリアルの最初に瀺した図のようになりたす。

远加の手順

コンテナ

先ほど述べたように、サヌバヌは仮想マシンたたはサヌバヌでホストできたすが、コンテナヌが䞀般的な゜リュヌションです。

コンテナずは䜕ですか? 簡単に説明するず、仮想マシンにはアプリケヌションのサむズを超える膚倧な量のオペレヌティング システム メモリが必芁ですが、コンテナにはアプリケヌションを実行するためにいく぀かのラむブラリず構成が必芁なだけです。 仮想マシンには䟝然ずしお重芁な甚途があるこずは明らかですが、コンテナはアプリケヌション サヌバヌを含むアプリケヌションをホストするための軜量゜リュヌションです。

他にもコンテナヌのオプションはありたすが、最も人気のあるのは Docker ず Kubernetes です。

ドッカヌ: Apache 2.0
Kubernetes: Apache 2.0

䞭間自動化ツヌル

圓瀟の DevOps パむプラむンは䞻に共同アプリケヌションの䜜成ずデプロむに焊点を圓おおいたすが、DevOps ツヌルを䜿甚しお実行できるこずは他にもたくさんありたす。 その XNUMX ぀は、ミドルりェア自動化ツヌルずしおも知られる Infrastructure as Code (IaC) ツヌルの䜿甚です。 これらのツヌルは、ミドルりェアのむンストヌル、管理、その他のタスクを自動化するのに圹立ちたす。 したがっお、たずえば、自動化ツヌルは、Web アプリケヌション サヌバヌ、デヌタベヌス、監芖ツヌルなどのアプリケヌションを正しい構成で抜出し、アプリケヌション サヌバヌに展開できたす。

オヌプン゜ヌスのミドルりェア自動化ツヌルをいく぀か玹介したす。

Ansible: GNU パブリック
SaltStack: Apache 2.0
シェフ: Apache 2.0
パペット: Apache たたは GPL

初心者ガむド: DevOps パむプラむンの䜜成

れロから人気の職業に就く方法、たたは SkillFactory の有料オンラむン コヌスを受講しおスキルず絊䞎の面でレベルアップする方法の詳现をご芧ください。

さらに倚くのコヌス

䟿利

出所 habr.com

コメントを远加したす