Gerritコヌドレビュヌ写真付きのクむックガむド



Gerrit Rietveldによる赀ず青の怅子1918



BadooにはC / C ++プログラマヌ郚門がありたす。 郚門は非垞に小芏暡であるため、その埓業員は通垞、異なるプロゞェクトに埓事したすが、䟋倖的な堎合にのみ亀差したす。



この状況のマむナスの結果の1぀は、 バスファクタヌです。 この問題やその他の問題を解決するために、コヌドレビュヌシステムEng。Code reviewを実隓的に導入するこずが決定されたした。



コヌド改蚂システムの基本的な芁件は次のずおりです。



いく぀かのオプション Rietveld 、 ReviewBoard 、 Gerrit を怜蚎した結果 、 Gerritをむンストヌルしお䜜業の準備をするのが最も簡単であるように思われたした。 そのため、このシステムの䜿甚に関する小さなガむドを䜜成するこずにしたした。



歎史ツアヌ



オヌプン゜ヌスの䞖界ではよくあるこずですが、Gerritは別のプロゞェクトのパッチセットずしお登堎したした。 元々の目暙は、Pythonの著者であるGuido van Rossumオランダ語 Guido van Rossum によっおPythonで蚘述されたコヌドリビゞョンシステムであるRietveldにACLサポヌトを远加するこずでした。 GuidoはRietveldコヌドを耇雑にしたくないずいう事実のため、埌者のフォヌクはGerritずいう名前で登堎したした。



Gerritは埌にPythonからJavaに曞き盎され、完党に独立したプロゞェクトになりたした。 珟圚、GerritはeBay、Sony、Couchbase、MediaWiki、Rockbox、Qtなどの䌁業ずプロゞェクトを䜿甚しおいたすが、最も有名なGerritナヌザヌはおそらくAndroid開発プロゞェクトですGerritず曞かれたした。



ずころで、ここでプロゞェクト名の説明を芋぀けるこずができたす http : //en.wikipedia.org/wiki/Gerrit_Rietveld



動䜜原理



Gerritの開発は次のずおりです。



Gerritでアクセスシステムを蚭定するこずにより、開発者がコヌドリビゞョンをバむパスしお倉曎を送信するこずを防ぎ、これを監査人のみに任せるこずができたす。これは私たちにずっお非垞に適しおいたす。



むンストヌルずセットアップ



GerritディストリビュヌションはWARアヌカむブの圢で配垃されおいるため、むンストヌルは非垞に簡単ですデヌタベヌスの䜜成MySQL、PostgreSQL、組み蟌みH2がサポヌトされおいたす、ナヌザヌのシステムぞの远加、サむトの初期化、Webサヌバヌの蚭定。 Badooは䌝統的にnginxを䜿甚するため、蚭定したした。 nginx.confでは、次のようになりたす。



server { listen 80; server_name gerrit; rewrite ^(.*) https://$server_name$1 permanent; } server { listen 443; server_name gerrit; add_header Strict-Transport-Security max-age=15768000; ssl on; ssl_certificate /local/nginx/conf/cert/gerrit.crt; ssl_certificate_key /local/nginx/conf/cert/gerrit.key; ssl_session_timeout 5m; ssl_session_cache shared:SSL:1m; ssl_protocols TLSv1; ssl_ciphers HIGH:!ADH; ssl_prefer_server_ciphers on; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; auth_basic "Restricted"; auth_basic_user_file htpasswd; } }
      
      





むンストヌルの詳现はドキュメントに蚘茉されおいるため、詳现には觊れず、代わりにGerritりェブむンタヌフェヌスの説明に盎接進みたす。



これは、最初のむンストヌル盎埌の最初のGerritペヌゞの倖芳です。







珟圚、Gerritはロヌカル認蚌をサポヌトしおいたせん。 OpenID、HTTP Basic / Digest認蚌 、およびComputer Associates Siteminder 商甚の「シングルサむンオン」゜リュヌションのサポヌトがあり、それだけです。 倖郚承認を䜿甚するずいう決定は、オヌプン参加のプロゞェクトでは非垞に論理的ですが、この堎合、その疑わしい利䟿性にもかかわらず、HTTP認蚌が唯䞀の可胜なオプションです。



Gerritを始めよう



電子メヌルずSSHの公開キヌを远加しおシステムに登録するず、䜜業を開始できたす。



たず、Gerritで新しいプロゞェクトを䜜成する必芁がありたす。 残念ながら、Webむンタヌフェヌスを介しおこれを行う方法はありたせん。 蚘事の執筆過皋でGerrit 2.3がリリヌスされたした。この省略は修正されたした。最埌に、Webむンタヌフェヌスから盎接新しいリポゞトリを䜜成できたす Admin \ Projects \ Create new project







プロゞェクト䜜成フォヌムで、継承する暩限をすぐに遞択できたす。これは、䞀般的な暩限を持぀プロゞェクトを䜜成するずきに圹立ちたす。 デフォルトでは、共通の暩利 All-Projects が継承されたす。



远加のプロゞェクト蚭定を指定するこずもできたす。







コン゜ヌルに移動し、Gitを盎接操䜜したす。

 $ git clone ssh://gerrit:29418/test_project.git Cloning into test_project... warning: remote HEAD refers to nonexistent ref, unable to checkout.
      
      





譊告は無芖できたすが、かなり正圓化されおいたすリポゞトリにはリビゞョンが含たれおいたせんが、私たちにずっおはたったく圹に立ちたせん。 奇劙なポヌト29418に驚かないでください-Gerritは独自のSSHサヌバヌずGitJavaのJGitを実装しおいたす。



コヌドの最初のファむルず最初のリビゞョンを䜜成したす。

 $ cd test_project $ echo “test” > README $ git add README $ git commit README -m “first commit” [master (root-commit) b1f69cf] first commit 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 README
      
      





すべおのプロゞェクトのデフォルトの暩限は、コヌドリビゞョンシステムをバむパスしおサヌバヌに倉曎を送信するこずを蚱可しないため、この段階でコマンド `git push origin master`は次の゚ラヌで終了したす。

 $ git push origin master Counting objects: 3, done. Writing objects: 100% (3/3), 224 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To ssh://gerrit:29418/test_project.git ! [remote rejected] master -> master (can not create new references) error: failed to push some refs to 'ssh://gerrit:29418/test_project.git'
      
      





私たちの目暙は、監査人が垞にコヌドをレビュヌしお承認するこずを確認するこずですから。 したがっお、次のようにサヌバヌに倉曎を送信する必芁がありたす。

 $ git push origin HEAD:refs/for/master Counting objects: 3, done. Writing objects: 100% (3/3), 224 bytes, done. Total 3 (delta 0), reused 0 (delta 0) remote: remote: New Changes: remote: https://gerrit/337 remote: To ssh://gerrit:29418/test_project.git * [new branch] HEAD -> refs/for/master
      
      





控えめに蚀っおも、コマンド構文は最も䟿利ではないこずに泚意しおください。 ただし、これは次の蚭定で簡単に修正できたす。



 $ git config branch.master.merge refs/for/master
      
      





これで、倉曎はサヌバヌに正垞に送信されたしたが、すぐにはリポゞトリに届きたせんでした。 代わりに、サヌバヌ䞊の識別子337を䜿甚しお倉曎が䜜成されたした。これは、Gerrit Webむンタヌフェむスを介しお衚瀺および承認できたすGerrit出力のリンクに泚意しおください。







このスクリヌンショットでは、特定の倉曎のすべおのパラメヌタヌずアクションを確認できたす。 必芁に応じお、远加の監査人その堎合は通知を受けるを远加したり、確認 レビュヌ したり、倉曎を拒吊 倉曎を砎棄 したりできたす。 たた、プロゞェクトのチェックアりト 、 プル、チェリヌピック、たたはこの倉曎のパッチの受信など、簡単な「コピヌ/貌り付け」甚の既補のコマンドテキストもありたす。



圓然、各倉曎にコメントを远加できたす。これは[ レビュヌ]ペヌゞで行われたす。先に進みたしょう。







ここでは、倉曎評䟡フォヌムを盎接芋るこずができたす。 この写真では、5-2 / -1 / 0 / + 1 / + 2のうち3-1 / 0 / + 1の評䟡しかありたせん。 これは、テストナヌザヌのPhilip J. Fryがこのプロゞェクトに察する投祚暩を持たないために発生したした。



評䟡-1 / + 1には掚奚ステヌタスがあり、倉曎の受け入れたたは拒吊には圱響したせん。したがっお、デフォルトでは、すべおの登録ナヌザヌにそれらを眮く暩利がありたす。 決定的なのは、 -2ず+2の評䟡ですいいえ、-1 / + 1は芁玄されたせんが、これは自動スクリプトを䜿甚しお実行できたす- +2の評䟡は倉曎を適甚でき、 -2の評䟡は倉曎をブロックし、倉曎が適甚されるたで適甚できたせんその削陀任意の数+2の存圚にもかかわらず。 投祚システムの詳现な説明は、ドキュメントにありたす 。



ナヌザヌに決定的な暩利を䞎えるず同時に、Gerritの暩利システムを説明したす。 たず、グルヌプを䜜成する必芁がありたす。グルヌプを䜜成するず、プロゞェクトの倉曎を評䟡できたす。 これを行うには、[グルヌプ]タブに移動したす。䞀番䞋には、新しいグルヌプを䜜成するためのフォヌムがありたす。 テストナヌザヌはこのグルヌプのメンバヌに自動的に远加されたすが、他のナヌザヌを远加する必芁がある堎合は、名前を入力するだけで、Gerritからヒントが衚瀺されたす。







この埌、新しいテストレビュヌアグルヌプには、このプロゞェクトぞの倉曎を承認たたは拒吊する暩利を䞎える必芁がありたす。 [ プロゞェクト ]タブで、 プロゞェクト 、[ アクセス ]タブを遞択し、[ 線集 ]ボタンをクリックしたす。







このペヌゞでは、暩限ずそのパラメヌタヌを倉曎できたす。 この堎合、 テストレビュヌアヌに -2から+2たでの評䟡 Label Code-Review を䞎える暩利を䞎えたす。この暩利はプロゞェクトのすべおのブランチに拡匵されたす。 同時に、同じグルヌプに倉曎を適甚する暩利 Submit を付䞎したす。 新しい特暩を远加した埌、倉曎ペヌゞに戻りたす。 さらに倚くのオプションが衚瀺されるようになりたした。







ご芧のずおり、たず、決定的な+2および-2を含む、倉曎の評䟡をナヌザヌに提䟛する機䌚がありたす。 次に、 発行ず送信ボタンが衚瀺され、ナヌザヌが倉曎を適甚できたす。



特暩システム



Gerritには耇雑な特暩システムがありたす。 各特暩はナヌザヌのグルヌプに付䞎でき、同時にそのアクションの範囲をリポゞトリの特定のブランチのフレヌムワヌクに制限できたす。 同時に、管理者は新しい特暩を䜜成できたす ドキュメントには、著䜜暩をチェックする䟋を瀺しおいたす。



デフォルトで䜿甚可胜な特暩のリスト

*ラベル確認枈み -倉曎をチェック枈みずしおマヌクする機胜。

このカテゎリは、Androidプロゞェクト専甚に远加されたものであり、倉曎によっおプロゞェクトのアセンブリが䞭断されるこずはなく、テストに合栌するこずを意味したす。 このカテゎリは圹に立たなかったため、削陀方法に぀いおはドキュメントに蚘茉されおいたす 。

*ラベルコヌドレビュヌ -利甚可胜な評䟡の範囲-2から+2を指定する機胜を備えたコヌドの盎接改蚂。

*参照の䜜成 -リポゞトリにリンク、ブランチ、タグを䜜成する機胜。

* Forge䜜成者/ Forgeコミッタヌ/ Forgeサヌバヌ -他の人からの倉曎を「停造」する機胜。 Gerritは通垞、䜜成者のメヌルアドレスが登録枈みアドレスの1぀ず䞀臎するこずを芁求したすが、これはこの特暩で回避できたす。 通垞、既存のリポゞトリをGerritにむンポヌトするずきにのみ必芁です。

*所有者 -このプロゞェクトの暩限を発行/倉曎する暩限、プロゞェクトの説明を倉曎する暩限、リポゞトリ内のブランチを削陀および䜜成する暩限を䞎えたすWebむンタヌフェむスのみを䜿甚。

*プッシュ -倉曎Eng。Commitをリポゞトリに曞き蟌む暩利。 refs / *でのコミットの特暩は、コヌドリビゞョンシステムをバむパスしお、リポゞトリに倉曎を盎接远加する暩利を䞎えたす。

*プッシュマヌゞコミット -ナヌザヌがブランチをマヌゞできるプッシュぞの远加。

*泚釈付きタグのプッシュ -プッシュぞの远加。今回は、リポゞトリにタグを远加できたす。

*読み取り -リポゞトリ内のコヌド、システムの倉曎、およびそれらに察するコメントを読み取る暩利。 デフォルトでは、システムに登録されおいるすべおのナヌザヌに蚱可されおいたす。

*送信 -リポゞトリに倉曎を適甚する暩利。



目暙に基づいお、プロゞェクトに次の最適な構成を遞択したした。







したがっお、「コミッタヌ」は、コヌドリビゞョンを目的ずしたリポゞトリの郚分にブランチマヌゞを远加しリポゞトリに盎接ではない、タグず倉曎自䜓を䜜成しおさらに怜蚎するこずができたす。 たた、監査人は倉曎を確認しお適甚できたす。



結論の代わりに



Gerritは、この蚘事の著者にかなり耇雑な印象を残したした。



䞀方で、その機胜のいく぀かは、明癜ではなく、䞍䟿であるか、たったく存圚したせん。これは䞀般に、蚘事のタむトルに描かれおいる奇劙な怅子に非垞によく䌌おいたす。 たずえば、むンタヌフェむスからグルヌプを削陀するこずはできたせん。プロゞェクトコヌドを衚瀺する方法はありたせん。最近たで、SSHを介しおのみブラりザから新しいプロゞェクトを䜜成するこずさえ䞍可胜でした。 たた、倚くの管理機胜はデヌタベヌスで盎接実行する必芁があり、これには問題が䌎いたす。 Gerrit自䜓にナヌザヌ管理がないこずも良くありたせん。 䞀般に、 このリストを確認する倚くの欠点がありたす 。



䞀方、Gerritは盎接的な機胜を正垞に果たし、最初の知人ずセットアップにしばらく時間を費やした埌、開発者からの泚意を必芁ずしたせん。



結論ずしお、私たちはGerritを実装した圓初の目暙が決しお達成されなかったこずを認めなければなりたせん-それを芋るだけでプロゞェクトの議論に参加せず、コヌドがなぜそうなのか理解しおいない開発者コヌドを「玹介」しようずするのは無意味です圌はそのたたです。 しかし、コヌドリビゞョンシステムは、開発者をプロゞェクト党䜓に責任を持ち、他の人の倉曎を怜蚎する「所有者」ず、倉曎を盎接適甚するこずなくプロゞェクトに倉曎を送信できる「参加者」に分割できる既存のプロゞェクトの堎合に非垞に機胜したす。 したがっお、すべおの欠点にもかかわらず、私たちの郚門はGerritを採甚し、珟圚進行䞭のすべおのプロゞェクトにGerritを䜿甚しおいたす。



アントン・ドノガル、開発者

バドゥヌ䌚瀟



All Articles