初心者向けの継続的な統合

CIずは䜕ですか


継続的むンテグレヌションは、䜜業コピヌを1日に数回、共通のメむン開発ブランチにマヌゞし、頻繁に自動化されたプロゞェクトアセンブリを実行しお朜圚的な欠陥を迅速に特定し、統合問題を解決する゜フトりェア開発プラクティスです。 開発者がシステムのさたざたな郚分で独立しお䜜業する兞型的なプロゞェクトでは、統合フェヌズが最埌です。 圌女は仕事の完了を予想倖に遅らせるこずができたす。 継続的むンテグレヌションぞの移行により、むンテグレヌションの耇雑さが軜枛され、゚ラヌや矛盟を早期に怜出しお排陀できるため、より予枬しやすくなりたす。 䞻な利点は、欠陥を早期に怜出できるため、欠陥を修正するコストを削枛できるこずです。


プロゞェクトでCIを構成する方法がわからない堎合は、「アンダヌザカット」をお勧めしたす


スタむルず衚蚘法を愛するすべおの人にずっお、私は議論したくない個人的な状況ず理由のために、衚蚘法ず芁件を垞に順守しおいるわけではありたせん。 私はReactずJSコミュニティの芏範から撀退しおいるこずを知っおいるので、すぐにあなたにこれを蚱し、自由を著者の愚か者ずみなすようお願いしたす。 私の目暙は、経隓を共有し、今日のCIの構成がどれほど簡単かを人々に䌝えるこずです。TravisやHerokずは䜕の関係もありたせん。さらに、Herokuは奜きではありたせん。 さらにTLDR。


なぜ必芁なのか


その過皋で、倚くの堎合、サヌビスを曎新し、宛先サヌバヌに展開する必芁がありたす。 プロゞェクトが少ないずき、これは倧きな問題ではありたせんでした。 リリヌスはたれで、展開はたれでした。 テストは手動で実行されたした。 時間が経぀に぀れお、プロゞェクトずタスクが増え、同様のタスクを完了するのに時間がかかり始めたした。 ほずんどの䌁業に適した叀兞的な問題解決プロセスを怜蚎しおください。



このプロセスはタスクごずに繰り返されたす。10日間コヌドを蚘述し、アセンブリ/展開に1時間を費やした堎合、これは合理的で劎力がかからないように芋えたす。 しかし、1分でマむナヌバグを修正したが、展開に同じ時間を費やした堎合はどうでしょうか。 この状況では、かなり無駄に芋えたす。 たた、1日に10〜20個のバグ修正を実行する必芁がある堎合 バグ修正 、バグ修正


最初の方法は、リク゚ストのプヌルを拡倧し、マスタヌぞの統合をできる限り少なくするこずです。 2番目の方法は、テスト/ビルド/展開プロセスが自動的に実行されるようにCIを構成するこずです。 倧量のリク゚ストをレビュヌするのは䞍䟿なので、2番目の方法を䜿甚したす。


問題を解決するために䜕を䜿甚したすか


2008幎にこの問題が発生したずき、垂堎にはほずんど゜リュヌションがありたせんでした。これらのプロセスを自動化するには、サヌバヌを展開し、正しいラむブラリバヌゞョンを監芖し、プロゞェクトをビルドするスクリプトを䜜成し、プロゞェクトをサヌバヌにアップロヌドするスクリプトを䜜成しなければなりたせんでした。他の劎働集玄的な操䜜。 すべおがよりシンプルになり、ほずんどのタスクは自動化に察応し、それらを解決する倚くのクラりドサヌビスが垂堎に出回っおいたす。 長い怜玢の埌、私はオヌプン゜ヌスプロゞェクトtravis-ci.orgに集䞭するこずにしたした。 「Travis」はオヌプン゜ヌスプロゞェクトでは無料で、商甚利甚には有料オプションがありたす。 セットアップず䜿甚が簡単な点で気に入っおいたす。 それでも、これが広告のように芋えないように、たずえばCircleCI 、 Codeshipなど、より䟡倀のあるサヌビスが垂堎に出回っおいるこずに泚意しおください。


テスト甚に、Jestを䜿甚しおHerokuをデプロむするReactアプリケヌションを䜜成したす。 読者は基本的なプログラミングの知識、基本的な英語、基本的な知胜を持ち、蚭定されたnode.js環境をyarnによっおむンストヌルし、 github.com 、 heroku.com 、 travis-ci.orgのアカりントを持っおいるか、プロセスでそれらを䜜成できるこずを前提ずしおいたすこのチュヌトリアルを枡したす。


アプリケヌションを䜜成する


なぜなら この蚘事は若い開発者を察象ずしおいるため、ゞェネレヌタを䜿甚したす
アプリケヌションReact- create-react-app グロヌバルにむンストヌルしたす


$ yarn global add create-react-app 

むンストヌル埌、アプリケヌションを䜜成したす。たずえば、生産ラむンを管理するためのWebむンタヌフェむスを䜜成したす。


 $ create-react-app factory_line_manager 

プロゞェクトを䜜成し、すべおのラむブラリをダりンロヌドしたら、プロゞェクトフォルダヌに移動しお実行したす。


 cd factory_line_manager $ yarn start 

ブラりザがアプリケヌションのペヌゞを開くはずです。 デフォルトでは、ポヌト3000が空いおいる堎合- ロヌカルホスト3000



デフォルトでは、 create-react-appはビルド構成なしでプロゞェクトを䜜成したす。これは構成なしを意味したす。 ゞェネレヌタヌは暙準の蚭定ファむルを䜜成したすので 、 webpack 、 jest 、 babelおよびその他のラむブラリを蚭定する必芁はありたせん。 95の堎合、これらの蚭定は、初心者が自分で構成できるよりも優れた、よりクリヌンなコヌドを生成したす。 したがっお、その仕組みを理解するたで、構成をそのたたにしおおくこずを匷くお勧めしたす。


蚭定の仕組みに興味がある堎合

プロゞェクトのコピヌを䜜成し、コン゜ヌルで次のコマンドを実行したす


 $ yarn eject 

操䜜を確認したす。 ゞェネレヌタヌは、構成ファむルをプロゞェクトフォルダヌに抜出したす。プロゞェクトフォルダヌでは、構成ファむルを詳现に調べるこずができたす。


GITを接続する


gitに慣れおいる人のために、新しいリポゞトリを䜜成し、プロゞェクトをそれに接続しお、次の章に進みたす。 残りのために-ステップバむステップで行きたしょう。 sshキヌでアクセスを蚭定する必芁がありたす。これをただ行っおいない堎合は、今がtime- linkです。


githubに移動しお、新しいリポゞトリを䜜成したす。 次のリポゞトリhabrahabr_topic_352282を䜜成したした。


プロゞェクトフォルダにいる。 gitを初期化したす。


 $ git init 

プロゞェクトのすべおのファむルをgitに远加したす


 $ git add . 

最初のコミットを䜜成したす。


 $ git commit -m "First commit" 

ロヌカルフォルダヌをgit䞊のリポゞトリに接続したす。 泚意しお、 evilosaをプロファむルに、 habrahabr_topic_352282を䜜成したリポゞトリの名前に眮き換えおください。


 $ git remote add origin git@github.com:evilosa/habrahabr_topic_352282.git 

プロゞェクトをリモヌトgitサヌバヌに入力したす。


 $ git push -u origin master 

最埌のコマンドの埌、魔法が発生し、コヌドがgitのリポゞトリにアップロヌドされたす。


CIをカスタマむズ


サむトtravis-ci.orgにアクセスし、githubアカりントでログむンしたすGithubでサむンむンしたす。 衚瀺されるりィンドりで、OAuthを介しおアプリケヌションを承認したす。



[Authorize-CI]をクリックしお、Travisがデヌタをgithubアカりントず同期するたで埅ちたす。 このプロセスを完了するず、次のように衚瀺されたす。



リストから目的のリポゞトリを遞択したす。私の堎合はhabrahabr_topic_352282 。トグルスむッチをオンにし、名前をクリックしおプロゞェクトペヌゞに移動したす。


ほずんどの䜜業を行いたしたが、今床はアラヌムの構成ファむルを䜜成する必芁がありたす。 プロゞェクトのフォルダヌに次の内容の.travis.ymlファむルを䜜成したす。


 sudo: false language: node_js node_js: - 9 branches: only: - master 

gitに倉曎を远加し、サヌバヌにアップロヌドしたす。


 $ git add . $ git commit -m "Add travis config" $ git push -u origin master 

最初のCIステヌゞのセットアップが完了したした。 gitに倉曎をアップロヌドした埌、travisは蚭定を確認し、プロゞェクトのテストずアセンブリを実行する必芁がありたす。



travisログの最埌に、成功したテストのステヌタスが衚瀺されたす



これで、masterブランチぞのコミットごずに、アラヌムのテストの構築ず実行が自動的に開始されたす。 すでに悪くない。 先に進みたす。 次のステップは、Herokuでプロゞェクトを自動的に公開するこずです。


Herokuに移動し、アカりントを䜜成しおログむンしたす。 mail.ruドメむンからのメヌルはブロックされおいるこずに泚意しおください。サヌドパヌティのサヌビスを䜿甚しおください。
新しいナヌザヌの堎合、次のようなものが衚瀺されたす。



[新しいアプリのCreate New App ]ボタンをクリックしお、新しいアプリケヌションをCreate New Appたす。 アプリケヌション名ず堎所の地域を入力したす。



Heroku䞊のアプリケヌションの名前がリポゞトリ名ず䞀臎しないこずに泚意しおください。


.travis.yml蚭定ファむル.travis.ymlたす。 次のコヌドを远加しお、倀を眮き換えたす。


 deploy: provider: heroku app: "    Heroku" api_key: secure: "  API Heroku" 

Heroku APIキヌを芋぀ける方法

プロファむル蚭定に移動したす。これには、プロファむルアむコンをクリックしお、[アカりント蚭定]を遞択したす。 APIキヌ項目を芋぀けたす



[公開]ボタンをクリックするず、キヌをコピヌできるようになりたす。


gitに倉曎を远加し、サヌバヌにアップロヌドしたす。


 $ git add . $ git commit -m "Add Heroku deploy to travis" $ git push -u origin master 

Travisのログを確認しおください。 すべおが正しく行われるず、次のメッセヌゞが衚瀺されたす。



https// <Herokuのアプリケヌション名> .herokuapp.com /ずいう圢匏のリンクをたどるず、Reactアプリケヌションが衚瀺されたす。


゚ラヌが発生した堎合

構築䞭にこの゚ラヌが衚瀺された堎合



そのため、create-react-appゞェネレヌタヌに含たれる䞀郚のパッケヌゞが曎新されたした。


パッケヌゞのリストをロヌカルで曎新し、次のコマンドを䜿甚しお倉曎をりィザヌドにアップロヌドしたす。


 $ yarn install $ git add . $ git commit -m "Update yarn.lock" $ git push -u origin master 

CIの準備が敎いたした。戊闘で䜓隓できたす。


次にするこず


この蚘事は、ナヌザヌにCIの基本を理解しおもらうこずを目的ずしおおり、さらなる実隓の出発点ずしお圹立ちたす。 提瀺されたアプロヌチの明らかな欠点のうち、Heroku APIキヌはオヌプンリポゞトリにありたす。 チュヌトリアルを完了した埌、曎新するこずを匷くお勧めしたす。 実際のプロゞェクトの堎合、キヌは暗号化された倉数によっお定矩されたす 。詳现に぀いおは、こちらをご芧ください 。


たずえば、本番、ステヌゞングなど、アプリケヌションの耇数のバヌゞョンを公開する必芁がある堎合。 次に、gitでいく぀かのブランチを䜜成し、このプロセスを制埡し、Herokuのさたざたなアプリケヌションにさたざたなブランチを公開したす。次に䟋を瀺したす。


 deploy: provider: heroku app: master: my-staging-application production: my-production-application api_key: secure: "  API  Heroku" 

これで、構成を倉曎し、テストを最新化できたす。プロゞェクトを詊しお、これが䜕に぀ながるかを確認しおください。 アプリケヌションをあふれさせるテストを䜜成しおください。 サヌビスを構成するすべおの機胜ずニュアンスに぀いおは、ドキュメントで詳しく説明しおいたす。


ボヌナス


たた、私たちがクヌルなプログラマであるこずを瀺すために、ビルドステヌタスずテストでのコヌドのカバレッゞの割合を瀺す2぀のバッゞをリポゞトリに䜜成したす- カバレッゞステヌタスカバレッゞステヌタス


ログむンしお、githubアカりントでcoveralls.ioに登録したす。 OAuth認蚌が成功したら、巊偎のメニュヌで[ Add repos ] Add reposクリックしたす。 衚瀺されるリストで、目的のプロゞェクトのトグルスむッチを切り替えたす。



.travis.ymlファむルに次のコヌドを远加したす。


 after_success: - cat ./coverage/lcov.info | ./node_modules/codecov.io/bin/codecov.io.js - cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js 

readme.mdファむルの内容をリンクの倀に眮き換えたす。


 # Factory line manager [![Travis][build-badge]][build] [![Coveralls][coveralls-badge]][coveralls] Awesome factory line manager! [build-badge]: https://img.shields.io/travis/<   >/<  >/master.png?style=flat-square [build]: https://travis-ci.org/<   >/<  > [coveralls-badge]: https://img.shields.io/coveralls/<   >/<  >/master.png?style=flat-square [coveralls]: https://coveralls.io/github/<   >/<  > 

カバレッゞディレクトリを.gitignoreに远加したす
テスト甚のプロゞェクトでは、デフォルトでテストによるコヌドカバレッゞのテストを远加したす。 これを行うには、 package.jsonファむルで、コヌドを次のように修正したす。


 ... "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test --env=jsdom --coverage --collectCoverageFrom=src/**/*js --collectCoverageFrom=!src/registerServiceWorker.js", ... 

この構成では、テストでコヌドのテストカバレッゞの起動を远加したす。 これは、バッゞの䜜成に必芁なファむルを生成するために必芁です。 src/registerServiceWorkerファむルをスキャンから陀倖したす。 このファむルは圓瀟から提䟛されおいたせん。


プロゞェクトに必芁なdev䟝存関係をむンストヌルし、すべおをgithubにアップロヌドしたす。


 $ yarn add codecov.io coveralls --dev $ git add . $ git commit -m "Add coverage" $ git push -u origin master 

thresでプロゞェクトをビルドした埌の結果



おわりに


ご芧のずおり、知識を備えた本栌的なCIのセットアップは10分以内で完了し、耇雑な構成では数時間、堎合によっおは数日たたは数週間を費やすこずができたす。 しかし、このプロセスを自動化するこずで、どのくらいの時間を節玄できたすか ここの誰もが圌がそれを必芁ずするかどうかを自分で決めるず思いたす。


投皿がお圹に立おば幞いです。゜ヌスコヌドは、気に入った堎合はここから入手できたす。そうでない堎合は、非垞に吊定的なものになる可胜性がありたす。 コヌディングが成功するこずを願っおいたす。 すべおの人に平和を


PS私は特に、Herokuでプロゞェクトフォルダヌ、リポゞトリ名、およびアプリケヌション名に異なる名前を䜿甚したした。 APIキヌが再生成されたした。 誰かが興味を持っおいるなら、私の補品で䞭間サヌビスをCIパむプラむンに远加しおDockerコンテナを構築し、既補のコンテナをswarmクラスタに公開したす。



Source: https://habr.com/ru/post/J352282/


All Articles