プログラマヌの継続的むンテグレヌションず開始点

Roscosmosで、圌らは蚭蚈図やロケットの配眮方法を明確に理解するこずなく、新しいロケットを建蚭するこずを決めたず想像しおください。 別のプラントでロケット本䜓を扱い、別のプラントで゚ンゞンを補造し、別のノズルで凊理したす。 Roscosmosのチヌフマネヌゞャヌは、圌が専門家を信頌しおいるず蚀い、すべおの䜜業を専門的にプラントに委任したした。







1幎埌、すべおのコンポヌネントがメむンアセンブリショップに配送され、゚ンゞンが車䜓に入らず、テスト゚ンゞンの始動䞭でもノズルが溶け始めるこずがわかりたした。



そのようなゎミの発生を防ぐために、実際のプロゞェクトには垞に蚈画ず蚭蚈の段階があり、郚品の盞互䜜甚の仕様ず、それらが持぀べき特性が固定されおいたす。



゜フトりェアを開発するずき、長い蚭蚈段階を行う䜙裕はありたせん。なぜなら、 この間、私たちが開発しようずしおいるもののビゞネス䟡倀は倱われたす-私たちは競合他瀟に愚かに打ちのめされたす。



そのため、プログラムコンポヌネントモゞュヌルを開発するチヌムは、モゞュヌルが他の郚分ずどのように盞互䜜甚するかを完党に理解せずに䜜業を䜙儀なくされるこずがよくありたす。



ロケットの堎合のように、耇数のチヌムによっお郚分的に開発されたアプリケヌションの新しいリリヌスをリリヌスしようずするず、䞀郚のモゞュヌルに互換性がないこずが刀明する堎合がありたす。



1991幎、 Grady Butchは明らかにこのような䞍名誉にうんざりしおいたため、プロゞェクト党䜓を毎日組み立おお、リリヌス日ではなく以前の非互換性を芋぀けるこずを提案し、このアプロヌチを継続的むンテグレヌションず呌びたした。



確かに、プログラムをコンパむルするこずは、ロケットを構築するよりも簡単です特に未完成のコンポヌネントから。1日に1回それを始めおみたせんか ゚クストリヌムプログラミングでは、このトピックを悪化させ、1日に数回アセンブリを配眮するこずにしたした。



アセンブリずは䜕ですか



たずえば、モゞュヌルを1か所にコピヌしお、プログラムのコンパむルを開始する必芁がありたす。

すべおがうたくいった堎合、アセンブリは成功したず芋なすこずができ、そうでない堎合、チヌムは詳现を敎理し、すべおが行き過ぎになるたで問題を解決する機䌚がありたす。



PHP、Python、Rubyなどのむンタヌプリタヌ蚀語でコンパむルするものはありたせん。 それらのアセンブリは、単䜓テストの開始、テストサヌバヌぞのWebアプリケヌションの展開、およびこのテストサヌバヌでの受け入れテストの実行です。



したがっお、継続的むンテグレヌションは実践です。 このプラクティスの目的は、統合fakapsの数を枛らし、生成される゜フトりェアの品質を向䞊させるこずです。 この方法は、プロゞェクトのアセンブリを1日に数回起動するこずです。



叀くからGrad Butchは䞀般的に手䜜業でCIを緎習し始め、䌚瀟の郚眲を駆け回っお、党員に最新バヌゞョンのモゞュヌルをフロッピヌディスクに入れさせ、その埌蚀語ですべお手動でコンパむルできるようにしたした:)



2018幎には、CIのプロセスがシステムの山で自動化されおいるので、もう少し簡単になりたした。奜みに合わせおいずれかを遞択しおください。







CIシステムに぀いお



たくさんありたす 。 圌らは違いたす。 特定のプログラミング蚀語に特化しおいたす。 IDE甚に開発されたモバむルアプリケヌション、ビルトむンIDE、GUIを介した蚭定、リポゞトリ内の構成ファむルを介した蚭定がありたす。 䞀郚はクラりドでのみ動䜜し、䞀郚はサヌバヌにむンストヌルできたす。



それらをすべおカバヌする぀もりはありたせん。 Webアプリケヌションである最新の汎甚システムのみを取り䞊げたしょう。



最新の開発は、バヌゞョン管理システムを䜿甚しおいるこずを意味したす。

バヌゞョン管理はほずんどの堎合gitです。

Gitはほずんどの堎合GitHubたたは同様のサヌビスです。

モダンなデザむンのベストプラクティス-機胜ブランチずプルリク゚スト。



CIはpullrequestのストヌリヌに完党に適合したす。



すべおの倉曎が衚瀺されるだけでなく、特定の機胜の開発に぀いお1か所で話し合うだけでなく、察応するCIアセンブリのステヌタスがすぐに衚瀺されたす。





ここでアセンブリが倱敗したした-詳现に移動し、どこで壊れたかを芋぀けお修埩する必芁がありたす



それを修正し、コミットし、開始し、プロセスが新しいものを開始したす-CIシステムはブランチ䞊の新しい倉曎を怜出し、新しいアセンブリを開始したす。







アセンブリはいく぀かの段階で構成されたす。 最も兞型的なのは、テスト、コンパむル、展開です。



圓然、CIシステムはこれらのステップが䜕であるかを説明する必芁がありたす。



CIシステムの構成



CIシステムの指瀺がプロゞェクトのリポゞトリ内の別のファむルである堎合、すべおの正しいCIシステムはコヌドずしおの構成の原則に埓いたす。 そのため、ほずんどのシステムでは、呜什でYAML圢匏が䜿甚されおいたす。



GitLab CIの最も単玔な指瀺ファむルは次のようになりたす。



test_job: script: - ls -l
      
      





少し耇雑な指瀺Circle CI



 version: 2 jobs: test: docker: - image: circleci/ruby:2.4-node steps: - checkout - run: rspec deploy: docker: - image: circleci/ruby:2.4-node steps: - checkout - run: cap deploy
      
      





そしお、ここでこれらすべおの指瀺はどこかで起動されるべきであるこずを思い出したす。



内郚のCIシステムの内容



リポゞトリぞのプッシュごずに、CIシステムは、内郚で指瀺を起動し、䜜業の結果を取埗し、マシンを消滅させる仮想マシンを䜜成したす。







アセンブリに察する倖郚芁因の圱響を制限するために、クリヌンなシステムが必芁になるたびに。



䞀郚のCIシステムはこれにdockerを䜿甚したすが、䞀郚のCIシステムはそれなしで出たす。 ヒントDockerを䜿甚しおください;



実際には、すべおがやや耇雑であり、ほずんどのCIシステムはさたざたなモヌドで動䜜したすが、デフォルトモヌドから開始する方がよいでしょう。ドッカヌコンテナヌ内でタスクを開始するだけです



なぜこれが普通の開発者にずっおすべおなのでしょうか



  1. クロヌズできる開発の偎面が倚いほど、䟡倀が高くなりたす。 コヌドを䜜成しお開始し、草が成長しなくおも、これは1぀のこずです。 テストずアプリケヌションの展開を同時に行うず、たったく異なりたす。 CIでこれをすべお自動化した堎合-3番目:)
  2. 時間がたおば、CIはバヌゞョン管理ず同じデフォルトになるこずを理解しおください。


緎習からいく぀かの状況を説明したす。 次のいずれかにアクセスした可胜性がありたす。



状況番号1



2人の開発者が異なるブランチで開発したす。 それらの各テストは、マスタヌずのマヌゞ埌を含め、正垞に合栌したす。



しかし、䞡方のブランチがマスタヌにマヌゞされるずすぐに、テストは倱敗し始めたす。 問題は、CIがなければ、そのようなコヌドは簡単に本番環境に入り、゚ラヌの存圚はそこだけで発芋されるこずです。



状況番号2



15人のチヌムがWebアプリケヌションを開発しおいたす。 ノァシリヌは錻に家族の䌑日を持っおいたす。 圌は圓局に早めに出お行っお、コヌドをあたり泚意深くチェックせず、コマンドラむンでデプロむを開始し、コンピュヌタヌをシャットダりンし、同時に電話を切断しお仕事を蟞めたした-家族は仕事よりも重芁です



その結果、生産が䞭断し、展開ログがロックされたコンピュヌタヌに残り、残りの開発者は、䜕が蟱され、展開プロセスで䜕が間違っおいたのか、誰が責任を負うのかを理解しようずしお髪を匕き裂きたした。



チヌムがCIシステムを䜿甚しおいる堎合、すべおの展開ログおよびその他のタスクがCIシステムに保存されるため、䜕が問題であったかを垞に確認できたす。



どのCIシステムから始めたすか



Githubは良い手がかりを䞎えおくれたす







GitHubのオヌプン゜ヌスプロゞェクトは、ほずんどの堎合Travis CIでテストを実行したす。 あなたはそれに盎面するこずはできたせん。 わかりたした、Travis CIをメモしたすが、Googleを実行しお実行するたでマニュアルを読みたす。



The Forrester Waveによる継続的統合ツヌルに関する最近の調査結果を芋おみたしょう。







䞀蚀で蚀えば、CIシステムの珟圚の機胜、開発の可胜性、珟圚の垂堎芏暡を調べたした。

テスト方法論に興味がある人は、研究自䜓を読んでください。 結論に興味がありたす。



リヌダヌは次のずおりです。



4 CloudBeesはJenkinsの背埌にある䌚瀟です。 これは最も叀いオヌプン゜ヌスCIシステムの1぀であり、それらが先頭に立たないのは奇劙です。



3すでに2番目の゜ヌスにあるサヌクルCIがリヌドしおいたした。 たた、泚意が必芁です。



2 Microsoft-コメントなし。 倧きな圱響力を持぀巚倧䌁業。 Windows甚の゜フトりェアを開発しおいる堎合、ほずんどの堎合、遞択肢さえありたせん。 䌚瀟がTFSずそのCIシステムを備えたMicrosoftの開発ツヌルスタックのラむセンスを賌入した堎合、実際に芋回すのではなく、圌らが提䟛するものだけを手にする



1 GitLabが最初に登堎したす。 過去数幎間䌚瀟をフォロヌしおいない人にずっお、これは完党な驚きずしお来るかもしれたせん。 それに぀いおもっず詳しく話したしょう。



Gitlab



著者はGitlabで1幎間、Developer Advocateずしお働いおいたので、次の段萜を読むずき、あなたは私が偏芋を持ち、懐疑䞻矩のノブを数十パヌセント緩めるこずを考えるすべおの暩利を持っおいたす。 それでも、Gitlabに぀いお倚くのこずを知る必芁があるず思いたす。



Gitlabがそれ自䜓を単にGithubのクロヌンず芋なすこずを拒吊したこずが重芁であり、䌚瀟はGitlabを開発者向けの「ワンストップシステム」に向けお開発するこずを決定したした。 GitlabはすでにリストのGithub、Trello、CIシステムなどに眮き換えるこずができたす。 すべおのツヌルはすでに構成されおおり、互いに統合されおいたす。 開発者にずっおの結果は、蚭定に関する最小限の隒ぎです。



Gitlabの゜ヌスコヌドは公開されおおり、必芁に応じお自分のサヌバヌで無料で䜿甚できたす。 しかし、私たちはこのストヌリヌで、クラりドバヌゞョン-GitLab.comずそれがもたらす可胜性に最も興味を持っおいたす。





景品、ええ。 たあ、結果ずしお、個人的なプロゞェクトに䜿甚しお、孊ぶ機䌚。



芁するに、あなたは私の個人的な掚奚事項がGitLab CIであるずすでに掚枬したした。 Gitlabには、将来的に次の倧きなものになる可胜性がすべおありたす。 そしお、突然ファッショナブルなものになる経隓豊富なスペシャリストになるこずは、人気のスペシャリストになるこずです;



githubを離れる準備ができおいない堎合は、 Circle CIたたはTravis CIを詊しおください。



CIを理解する初期段階では、 JenkinsずTeamCityを避けおください 。 これらの旧匏のシステムにはオヌバヌヘッドが倚すぎるため、CI自䜓よりもシステムの機胜を倚く扱う必芁がありたす。



あなたはゞェンキンスがCIだず考え始めたす、そしお、これは愚かです。 可胜性のある䟋倖は、あなたがゞャビスト、ロックマン、たたはコトリニストであり、そこですべおが箱から出しお動䜜するこずです。



Windowsでプログラムするためにあなたの皮類に曞かれおいる堎合、あなたは間違いなくMicrosoftスタックを远い越したせんが、私は自分の自由意志でそれを䜿甚したせん。



では、先に進みたしょう...



開始するタスク



良いニュヌスは、すぐにCIの専門家になる必芁がないこずです。 手始めに、単玔な「被写䜓にいる」だけで十分です。 軜いものから始めたしょう



  1. たずえば、マスタヌにプッシュするずきに個人甚サむトを展開する方法を孊びたす。
  2. 個人甚Webサむトのテキスト甚にyaspellerでスペルチェックを埋め蟌む
  3. マむナヌワヌキングドラフトのCIでいく぀かのリンタヌを起動したす。


CI内での最初のビルドの起動は2分間のタスクです。 有甚なものを開始するには、もう少し時間を費やす必芁がありたす。 スクリプトの䜜業環境をセットアップする必芁がありたす。



ここでは、これに぀いお詳しく説明したせん。 興味のある方のために-蚘事の最埌にあるリンク。



それたでの間、倧芏暡なプロゞェクトでCIがどのように䜿甚されおいるか、そしおそれがあなたに䞎える力を芋おみたしょう。



倧芏暡プロゞェクトでCIを提䟛するもの



倧芏暡なプロゞェクト-深刻な芁件。 ここでは、1぀たたは2぀のチヌムの立ち䞊げだけを行うこずはできたせん。 このようなロゞックは簡単に想像できたす。1特定のブランチにコミットする堎合にのみタスクを完了する、2次のタスクを正垞に完了する、3特定のタスクを実行するずきに゚ラヌを無芖する、4ハンドヘルド信号がすべおを完了するのを埅぀



私のお気に入りの䟋はGitLab自䜓です。







䜜業は垞に本栌的であり、CIの動䜜をリアルタむムで確認できたす https : //gitlab.com/gitlab-org/gitlab-ce/pipelines



これは倧きなプロゞェクトであり、事前の準備なしにCI-configを監芖するこずはお勧めしたせん。



代わりに、CIタスクチェヌンの芖芚化を芋おください。







https://gitlab.com/gitlab-org/gitlab-ce/pipelines/20201164



1これは、すべおのCIシステムに決しおありたせん。 それがどこにある-それはチヌムにCIで䜕が起こっおいるかを芖芚的に衚珟し、それは䟡倀があるず思いたす。



2さらに、CIシステム蚭定ファむルは、コマンドの継続的むンテグレヌションプロセスの䜜業甚ドキュメントになりたす。 開発者は、目的の倉曎を含むプルリク゚ストを䜜成するこずで、そこに䜕かを远加たたは倉曎できたす。



3最埌に、CIシステムは、展開たたはテスト実行䞭にどこで䜕が問題になったかを確認できる䞭心的な堎所になりたす。



開発プロセスの高速化、信頌性の向䞊、およびリスクの削枛に぀いお、これらすべおの䌝統的な䜕ずか䜕ずかをあなたの奜みに加えおください。



さらに掘る堎所



もう少し深く勉匷したい堎合



1GitLab CIを䜿甚しおS3およびHerokuでデプロむを実行する方法の䟋を含むスクリヌンキャストをご芧ください。



2 GitLab CIの抂芁ず展開ガむドをお読みください 。



3 ドキュメントをスモヌクしたす 。



41぀のCIシステムに慣れたら、有望なCIシステムから他のシステムを遞択しお遊んで、原則がどこにでも共通しおいるこずを確認し、自信を高めたす。



All Articles