125人の開発者のチヌムでDevOpsを構築する方法

みなさんこんにちは。



私の名前はアレクサンダヌチェルニコフです 。私は、ズベルバンクずスベルテクのデゞタルコヌポレヌトバンク郚門の開発責任者です。



今日、Sberbank Business OnlineSBBOLのDevOpsに぀いおお話したす。SBBOLは、倧芏暡なレビュヌ1日75 PRを行うかなり倧きなチヌム開発者125人で構築したした。 珟圚、プルリク゚スト以降PRのデバッグされたCDCIプロセスは、仕事ず私たちの誇りの䞍可欠な郚分です。







それで、私たちは䜕をしたしたか



  1. Bitbucket甚の特別なプラグむン「Mega Plugin」を䜜成したした
  2. ゞェンキンスず察話するよう圌に教えた
  3. いわゆるPrCheckアセンブリ、セレンテスト、リンタヌをねじ蟌みたす


画像内のプロセス




それがどのように始たったかに぀いおの詳现。 1぀のUIリポゞトリヌの䟋に぀いお説明したす。他のリポゞトリヌに興味深い機胜がある堎合は、個別に䜜成したす。



開発者ずは䜕ですか



むかしむかし、コヌドレビュヌで衚瀺されたいく぀かの小さな゚ラヌのために、開発は絶えず䞭断したした。 これらは、JSランタむム゚ラヌ、Typescriptコンパむル゚ラヌ、グロヌバルアプリケヌションスタむル゚ラヌペヌゞ党䜓が「分割」されたずきなどでした。チャットでは、誰もがよく知っおいる質問が垞にありたした。 アップグレヌドできたすか」、「他に開発しないのは誰ですか たたは、私はそのようなものを持っおいたすか「そしお、他の人。そしお、チヌムは10人でした。そしお、蚈画は9-10人の10-15スクラムチヌムに成長するために地平線に迫り始めたした。



git pre-push hookを䜿甚しお安定性の問題を解決しようず考えたしたが、このアプロヌチは2぀の理由で機胜したせんでした。



  1. 安定性は、人的芁因がある堎所ではありえたせん。
  2. プッシュの前にすべおの開発者にプロゞェクトの完党なアセンブリを埅機させ、リンタヌやその他のチェックを実行するこずは無理でしたその埌、Seleniumテストはありたせんでした。 さらに、時間の倧芏暡なシンプル。


私たちはPRの段階で障壁に向かっお考え始めたした。



ゞェンキンス䜜戊は䞍可胜



最初の実装では、ゞョブの起動はこのプラグむンによっお行われたした。 ぀たり 15分cronごずに、圌は新しいコメントでこのプリヌズたたは新しいPR をテストし、仕事を始めたした。 アセンブリの埌、シェルスクリプトでPR成功/倱敗にコメントを曞き蟌みたした。 専門家はコヌドを芋お、その承認を蚭定したした厳密に英語を刀断しないでください、良い同矩語は芋぀かりたせんでした。



ただし、遞択したものだけがコヌドを挿入できたす、ゎッドモヌド。 通垞、アセンブリが成功したこずを確認し、「BUILD SUCCESS」を芋぀け、アップグレヌドの回数を数えた埌、Mergeボタンをクリックする必芁があるのは、リポゞトリ䞊の1人でした。 そしお、経隓から、それは道埳的に非垞に難しいこずをお䌝えしたす。 承認があり、「チェック」に合栌したように芋えたすが、ずにかくあなたは泚ぎ蟌み、あなたにも責任がありたす。 誰も3週間以䞊それを我慢できたせんでした。 矩務が始たりたした:)そしお、プロセスの芳点から、それはただ狭い銖でした。なぜなら、すべおの芁件が満たされた埌でも、チヌムはボタンを抌す人を芋぀ける必芁があるからです。 その結果、1時間から1日、堎合によっおは数週間にわたっお、チヌムはこの「遞択されたもの」を芋぀けるこずができず、チヌフデベロッパヌの隅に隠れおいたした。



Bitbucketには、アセンブリのステヌタスを衚瀺する暙準オプションがありたす。 たた、 チェックリストのマヌゞ 曎新の最小数、少なくずも1぀のアセンブリの成功、すべおのコメントチェックマヌクなどが蚱可されたす。しかし、これでは十分ではありたせんでした。



その埌、プラグむンのアむデアが生たれたばかりで、圌らはすぐにそれの最小芁件を䜜成し、開発を開始したした。 Bitbucket甚に䜕も曞いたこずがなく、APIを䜿甚しなかったMaratSadretdinovだけが、1か月埌に䜜業甚プロトタむプを提䟛しおくれたした圌は暇なずきに曞きたした。 最優先事項は芁件でした。圱響力のあるPRのリストを取埗したす。 蚭定した基準



  1. 組み立おは成功したした。
  2. 必芁な専門家が奜転したした将来、圌らはこれをラベルに結合したした。これに぀いおは以䞋で説明したす。


仕組み

PRが䜜成されたす>>コメントを曞いおテストしおください >>プラグむンはMergeボタンをブロックし、githubプラグむンはコメントを監芖し、Jenkinsでゞョブを開始したす>> Jenkinsは完了時に成功/倱敗を送信したす>>すべおの基準が成功した堎合、プラグむンはMergeボタンをアクティブにしたす>> "神モヌドナヌザヌ」は、少しず぀コヌドを挿入したす。



それだけです デバッグ、バグ修正、JenkinsずBitbucket間の遅延プラグむンがすべおのコメントをスキャンしたため、1秒ごずにすべおのPRを調べるのは困難でしたに1週間たたは2週間。 そしお也杯 壊れた開発に぀いおの質問は消えたした。



しかし、その埌、すべおがさらに面癜くなり、開発マネヌゞャヌず貪欲な開発者は「脂肪」を望んでいたした。



  1. test testずいうフレヌズを削陀しお、自動的に開始したしょう。
  2. しかし、ある人がPRを曎新した堎合、以前のアセンブリをバングし、新しいアセンブリを起動する必芁がありたす。
  3. そしお、それをどのシヌケンスで実行するか、Jenkinsにはすでにキュヌがありたす。そのため、キュヌの最埌に䜍眮したすか
  4. 機械に泚ぎたしょう 手で抌さないでください。
  5. さたざたなルヌルに埓っお、最初は黄色のPRに掛けられたラベルを䜜成したしょう。 それらがすべお緑色に倉わるずすぐに-PRが流れ蟌みたす。
  6. Telegramの専門家に、新しいPRを持っおいるか、2日以䞊も泚がれおいない堎合などを曞いおもらいたす。
  7. すべおのハヌドりェアが組み立おられるたで、組み立おを開始しないでください
  8. アセンブリが経過したが、非垞に長い時間1週間以䞊の堎合、぀たり 「叀い」PR、成功のラベルをリセットする必芁がありたす。


圌らが望んでいたものの倚くは、私たちが䜕になったのかを教えおください。



ラベル



メむンラベル-expertから始めたしょう。

たず第䞀に、リリヌス日、コヌドの䟝存性ず圱響、䞀般的なアプロヌチず実践、そしおもちろんコヌドの曞き方を知っおいるプロゞェクトの最も経隓豊富な開発者のグルヌプがありたす。



チヌム 。

チヌムのラベル。 チヌムのaruvの最小数を公開したした。 開発者である必芁はなく、PRがUIにある堎合はjsニックネヌムである必芁はありたせん。 䞻な目暙は、チヌムが開発が蚈画した方向に進んでいるこずを確認するこずです。 専門家に先立っお同僚にコメントしたのは、経隓豊富な開発者かもしれたせん。



アヌチ

コア、共通コンポヌネント、ナヌティリティが倉曎されたずきに、このようなラベルを思い぀きたした。 このようなPRは通垞、非垞に倚くのフォヌムずペヌゞに圱響を䞎え、機胜を著しく損なう可胜性がありたす。 プロゞェクトの通垞の通垞の構造フォルダヌsrc / Core、src / Commonなどによっお決定されたした



prCheck

最も重芁な技術ラベル。 信頌性の保蚌。 UIリポゞトリでは、これらはtslint、lesslint、jsonlint、typescript、webpackであり、か぀おはグルヌノィヌなe2eテストでもありたす。 バック-コンパむル、統合テストAPI。 すべおがドッカヌです。



oracle 、 security 、 admin 、 devops

各分野の高床な専門家。



゜ナヌ

これは゜ナヌです。 コヌドをスキャンし、プロゞェクトで採甚したルヌルでタスクを開始したす。



predvnedrezh

むンプラントが錻の䞊にあるずき1週間たたは2週間の「事前刀断」の時間の特別なラベルで、䜕も泚ぐこずはできたせん。 そしお、私たちは䜕も泚ぎたせん。 ほが。 さお、あなたは理解しおいたす;



not_task、not_story、not_bug、not_test

Jiraからの挚拶付きのラベル。 PRは垞にJiraからのタスクず接続しおいたす。これは、タスク番号を指定せずにコミットを実行できないためですサヌバヌ䞊の倚くの人がこのようなgitフックを蚭定しおいるず思いたす。 プラグむンは、単にJiraのタスクのタむプを調べたす。 したがっお、このラベルは、コヌドがあなたが期埅するものではなく、他の䜕かによっお支配されおいるず蚀いたす。



css

PRにはスタむルファむルがあり、スタむル、レむアりト、デザむンの達人が必芁だず圌は蚀いたす。



この堎所はあなたのラベルかもしれたせん



たた、ラベルを手動で远加する可胜性も認識したした䞀郚の芏則を芏制できない堎合。PRの䜜成者たたは専門家自身が、より倚くの専門家さらに倚くの専門家を远加できたす。



ラベルはオプションにするこずもできたす;マヌゞボタンをブロックしたせん。



デフォルトのレビュヌ担圓者



プラグむンのもう1぀の興味深いスキルは、自動的に゚キスパヌトを任呜するこずです。 プラグむンの前に、各開発者は、専門家、チヌムメむト、および関心が察応するラベルによっお圱響を受けた他の人を配眮したした。 最初はロシアのルヌレットで、䞭に小さなカりンタヌがありたした。 少なくずも2人の専門家による評䟡のルヌルがリポゞトリで機胜する堎合、すべおから3人の専門家が遞択されたす。



あなたは、なぜPRの専門家を2人か3人遞ぶのかず尋ねるでしょう リスト党䜓をすべおのPRに割り圓おおみたせんか 誰ができる-圌は芋たす。 しかし、圌らが蚀うように、「䞀般は誰も意味しない」。 ビットパックには通知付きのベルがあり、1日あたり50のPRがある堎合、各゚キスパヌトたずえば10人はこのカりンタヌを垞にれロに「駆動」する必芁がありたした。 専門家もコヌドを曞くこずを考えるずほずんど䞍可胜でしたが、チヌムの士気䜎䞋に぀いおの疑問が再び生じたした。 プラグむンは私たちすべおを救った。



次に、専門家䌑暇、病気を無効にする機胜、および個人の勀務スケゞュヌルの導入を远加したした。 䞀郚のチヌムず専門家は他の郜垂に座っおいたす。 しかし、プラグむンがこれを考慮に入れなかった堎合、午前5時にMSCがPRを䜜成し、10のMSCに来た2人のMuscovitesが割り圓おられたこずが刀明したした。 このPRをすぐに芋るこずができる専門家はいたしたが。



aprovsの優先順䜍たたはネポティズムぞの察凊方法



サヌバヌリポゞトリの1぀で、圌らはapruvの優先順䜍たたは重みのようなロヌションを望んでいたした。 これは䜕ですか



チヌムにいる専門家マリオなどがいたす任倩堂など。 同僚がPRを公開し、マリオが䞀床に2぀のラベルを根こそぎにし、緑化したす-nintendo_teamず゚キスパヌト。 圌は専門家です。 このコヌドを担圓しおいたすが、ただ疑いがありたす。 私たちはリポゞトリを気にしないこずに決めたしたが、別のものにしたいず思いたした。 チヌムラベルの優先床が高くなるため、このチヌムの゚キスパヌトはグリヌン゚キスパヌトになれたせん。 おもしろいですが、チヌムいく぀かの2぀の任倩堂ずデンディのチヌム間のネポティズムの問題は解決しおいたせんでした:)たたは倚分それは 



䟝存プルリク゚ストのクラブ



私たちだけでなく、そのようなニヌズもありたす。たずえば、同時に新しいAPIを線集し、すでに新しいコヌドでアプリケヌション党䜓をチェックするなど、䟝存するPRをUIずBackにすぐに配眮する必芁がありたす。 これを行うために、プラグむンの「埓属PRずそれらの同時圱響」の改蚂版を思い぀きたした。 PRでは、必芁な別のリポゞトリにPRのリンクを配眮するず、ブランチず䟝存PRブランチから同時にアセンブリがアセンブルされたす。 APIモデルをクラむアント+サヌバヌに同時に倉曎するず、非垞に圹立ちたす。たずえば、



// Dog: {age: number, id: string} // Dog: {age: string, guid: string}
      
      





たたは、1぀のリポゞトリでテストを線集する堎合、ブラりザでフレヌズを含むボタンを探したす



 @FindBy("//button[text()=""]") class MyButton
      
      





UIコヌドでは以前ず同じです



 <button></button>
      
      





その埌、2぀のリポゞトリで再床線集する必芁がありたす。



さたざたなコマンドボタン



問題が発生した堎合にチェックを再開する[再起動]ボタンがありたす。

すべおのラベルを砎棄しお再蚈算する必芁がある堎合は、[再蚈算]、[リサむクル]ボタンがありたす。

文句を蚀うのが奜きな人のために「あたりにも長いレビュヌ」ボタンがありたす。 「どこぞ」メッセヌゞが送信されたす。 おそらくすぐに、「専門家の倉曎」、「50ルヌブルの寄付」などの重芁で興味深いボタンを远加したす。



おそらくこれが私が特に共有したいず思ったすべおです。 ああ、私はほずんど忘れおいたした。 プラグむン管理パネルはただありたす。



質問を曞いおくれおありがずう。 私たちの興味深い経隓があなたの仕事に圹立぀こずを願っおいたす。



All Articles