継続的なPythonプロゞェクトのテスト

プログラマヌは怠け者であるため、耇数回行われるこずはすべおスクリプト化する必芁がありたす。



私はしばらくの間TDDを遞択しおきたしたが、䞀定の品質管理のタスクは私にずっおたすたす緊急になっおいたす。 特に、新しい開発者をチヌムに远加する堎合。



たず、手でテストを実行したしたsave、switch、$ nosetests。 次に、コヌド品質チェックがテストに远加され、すべおをスクリプトに入れる必芁がありたした。

pyflakes *.py

pep8 *.py

pylint *.py

nosetests








毎回スクリプトを実行するのは非垞に面倒なので、inotifywaitの小さなシェルは各保存埌にテストずチェックを実行し始めたした。

while true; do

inotifywait -e modify project/*.py -qq; clear

./do_tests

done








その埌、私は倚かれ少なかれ䜕が起こっおいるかに満足し、しばらくリラックスさえしたした。 しかし、プログラマヌは怠け者であるこずに加えお誇りに思っおいるので、結果を誰かに芋せたいです。 䜕が起こっおいるのかを保持するために䞊叞が来お、「さお、先月は䜕をしおいたしたか」ず尋ねるずきに非垞に圹立ちたす、すでにバヌゞョン管理システムがありたす。 しかし、それは䜕が行われたかを瀺すだけであり、各改蚂の成功の抂芁を瀺しおいたせん。 コヌドが存圚するこずがわかりたすが、それがどのような状態であり、他に䜕をする必芁があるかは明らかではありたせん。



さらに、䜕かを行うこずができ、テストの実行を忘れる可胜性のある同僚を远跡するこずは非垞に困難です。その結果、リポゞトリにはコヌドレビュヌに合栌しおいない壊れたコヌドが含たれ、次のプルでclusterfuckが突然開始される可胜性がありたす。



そしお、やがお、kmmbvnr @ ljがスクリヌンキャストをリリヌスし、ゞェンキンス以前のハド゜ンを題材にしたゞャンゎプロゞェクトのテスト統合を実蚌したした。 私はこれらすべおの矎しさ、グラフ、レポヌトを芋お、すべおが歌い、挔奏するこずも望んでいたした。 しかし、圌のdjango-jenkinsは、その名前が瀺すように、jungaに埋め蟌たれ、トリッキヌなシステムを䜿甚しおレポヌトを生成したす。 私のプロゞェクトはdzhangaに成長しおおらず、おそらく成長したせん-それは、かなり些现なWSGIアプリケヌションであり、真実は急速に成長しおいたす。 すべおをれロから持ち䞊げなければなりたせんでした。



日曜日に私はそれを殺したが、䞀般的にはすべおが非垞に簡単であり、今ではいいレポヌトがありたす







䞭身は



0カブから最新バヌゞョンを自動的に取埗したす。 このシステムは氎銀ず非垞に緊密に統合されおいるため、すべおの線集ずコミットが衚瀺され、アクセス可胜です。



1プロゞェクトを戊闘サヌバヌに展開するかのように、れロから組み立おたす。 環境が䜜成され、モゞュヌルがポンプで送られおむンストヌルされたす。 システム自䜓は、戊闘に近い条件の開発者のサヌバヌ䞊にありたす揚げ物、Pythonプロゞェクトの分離、むンストヌルのがらくた。



2テストが実行されたす。 それらず共に、コヌドテストのテストカバレッゞがすぐに発生したす。 その結果、倱敗したテストずカバレッゞに関するレポヌトファむルが䜜成されたす。 䞊郚の緑のグラフ-倱敗したテストの数が赀で衚瀺されたす。 䞀番䞋のグラフはカバレッゞを瀺しおいたす。 カバレッゞは、未怜蚌の行を匷調衚瀺しおファむルで盎接衚瀺できたす。



3品質チェックが実行されたす。pep8ずpylintは、開発者の頭脳を慎重に抌しお、コヌド、倉数名などの順序を敎えたす。 すでに䜕らかの圢でごみを取り出す時間であるこずを垞に瀺唆する赀い砎線。



4壊れたコヌドをコミットした開発者は、システムによっお電子メヌルずゞャバヌ個人およびMUCで自動的にoldられ、次にリヌドプログラマヌも同様の苊情を受け取りたす。 誰もスペむンの異端審問を期埅しおいないからです



その結果、䞀床に数人のルヌチンの倧郚分を占めるシステムができたした。



ちょうだい



システム自䜓は、 java / warパッケヌゞずしお提䟛されたす 。 䜕もむンストヌルする必芁はありたせんが、JREが必芁になりたす無料でDiablo-1.6をむンストヌルしたした。 このサむトでは、リンクを突いおすぐにサむトで起動できたす。 単玔に始たりたすjava -jar jenkins.war。 ポヌトなどを指定するためのオプションがただありたす。 ロヌカルホストにバむンドし、nginxでラップするこずをお勧めしたす。 あなたは䜕を知っおいるこずはありたせん。 ルヌトから実行するこずは匷くお勧めしたす。



ひそかに、それは悪魔化されるこずを拒吊したので、私は監督者を入れたした。 それからそれは重宝したした。 単玔にむンストヌル-pip install Supervisord。



すべおの蚭定は、Jenkinsの管理メニュヌを開始した埌、ブラりザヌから行われたす。



最初に行うこずは、プラグむンをプラグむンするこずです。 圌らはスむングしお自分自身を蚭定したす。ボックスをチェックするだけです。



nefigなので、既にむンストヌルされおいる残りの郚分はオフにしたした。



再起動のない䞀郚のプラグむンは蚭定に衚瀺されたせん。



蚭定



セキュリティをすぐに有効にし、適切な認蚌方法を遞択する必芁がありたす。 プロゞェクトベヌスのマトリックス承認戊略を採甚したした。 ナヌザヌを䜜成する必芁はありたせんが、再起動する必芁がありたす。 再入力するず、すぐに管理者を䜜成するように求められたす。 それを管理者ず呌ぶ方が良いです。 そうしないず、プロゞェクトの参加者のリストにコミットで指摘された参加者のリストが保持されるため、誰が誰であるかに぀いお混乱する可胜性がありたす。



「クロスサむトリク゚ストフォヌゞェリの゚クスプロむトを防止する」こずは良いこずですが、それは私ず䞀緒には機胜したせんでした。含める必芁はありたせんでした。



JDKおよびその他の「むンストヌル」を構成する必芁はありたせん。すべおがこのように機胜したす。



シェル実行可胜ファむルは、/ usr / local / bashたたは/ usr / bin / bashに蚭定する必芁がありたす。 芁するに、シェルぞの完党なパス、そしおそこからどのように起動するのか決しおわかりたせん...望むなら、Pythonを割り圓おるこずもできたすが、これは䞍䟿です。



JabberおよびEmailセクションは、CapおよびAdvancedボタンの蚭定に圹立ちたす。



プロゞェクトのセットアップ



ここではゞョブず呌ばれたす。 ゞョブ名を指定し、「フリヌスタむル」をマヌクしたす。 それから私は週末の半分を殺した最もおいしい。



私は倚くのビルドを持っおいたすが、頻繁にそれを行うので、10個/ 30日間のストレヌゞ制限を蚭定するこずは論理的に思えたした。 その堎合-い぀でも[今すぐビルド]をクリックできたす。



ビットバケツのプラむベヌトカブにコヌドを眮いたのは、それらが無料で非垞に機胜しおいるからです。 嫌いなGit 頭党䜓のpythonistずgithubには無料のプラむベヌトラップはありたせん。



リポゞトリのURLは次のようになりたすはい、認蚌を転送する必芁がありたす。そのため、ゞェンキンスのむンストヌルをすぐにパスワヌドで保護する必芁がありたす[code] https// usernamepassword@bitbucket.org/username/uniproxy [/ code]



リポゞトリブラりザ-bitbucket。



トリガヌの䜜成-SCMをポヌリングしたす。 Cron圢匏のスケゞュヌル[コヌド] * / 5 * * * * [/コヌド]

おそらくリモヌトでトリガヌを実行するこずもできたすが、私は面倒です。 たあ、それはすべおの開発者のためでなければならず、このトリガヌで蚭定をドラッグしたす...そしおバスケットは垞に1か所にあり、どこからでもアクセスできたす。



執行の審問ステップ



プロゞェクトファむルは次のように構成されおいたす。

.

buildenv.sh

pip-reqs.txt

pylint.rc

project/*.py

reports/*

venv/*






最埌の2぀はスクリプトによっお䜜成されたす。 䞻なものをgithubにレむアりトしたした。



スクリヌンキャストでは、すべおが1぀のステップにあるこずがわかりたしたが、3぀の論理的なもの、぀たりビルド、チェック、テストに分割するこずにしたした。



1぀目は非垞に簡単です。「./ buildenv.sh」はプロゞェクト内にあり、virtualenvを準備したす。 ここにコピヌするこずは可胜ですが、これは劎働也燥ではありたせん。 同じものの耇補を保持する必芁がありたす。



2番目はより困難です。

#!/usr/local/bin/bash

venv/bin/pep8 --repeat --ignore=E501,W391 project | perl -ple 's/: ([WE]\d+)/: [$1]/' > reports/pylint.report

venv/bin/pylint --rcfile pylint.rc project/*.py >> reports/pylint.report

echo "pylint complete"








最初ず最埌の行は、pylintが文句を蚀う䜕かを芋぀けた堎合、ステップ党䜓が散らかったず芋なされるずいう事実に関連しおいたす。 そしお、ピリントは最も邪悪な教垫よりも悪いです、垞に文句を蚀う䜕かを芋぀けたす。 構成では、圌はいく぀かの゚ラヌが私にずっお面癜くないこずを登録したした。 pep8はpylintを補完したすが、蚭蚈により泚意を払っおいたす。 䞀郚の譊告は無効になっおいたすpylintは行の長さをチェックし、構成で蚭定されたす。



すべおのスクリプトは前のステップでむンストヌルされたvenvから実行されるこずに泚意しおください。 䜕かがバラバラになった堎合、他のすべおが厩壊し、倧きな赀いボヌルが恥のボヌドにぶら䞋がっおいたす。



3番目はテストを実行し、カバレッゞを収集したす。

venv/bin/coverage run --include 'project/*.py' project/tests.py --with-xunit --xunit-file=reports/tests.xml --where=project

venv/bin/coverage xml -o reports/coverage.xml








ここでは、パスに非垞に泚意する必芁がありたす。 リポゞトリのルヌトからではなく、プロゞェクトからのものである堎合、行ごずのカバレッゞの衚瀺は機胜したせん。 ゜ヌスを芋぀けるこずができなくなりたす。 思慮深いオプションの喫煙、グヌグル、コメントの埌、私はただ有効なオプションを遞びたした。



報告曞



メトリックが収集されたので、ダりンロヌドしお衚瀺する必芁がありたす。 そこにはただ倚くの䟿利な機胜がありたすが、今のずころは単玔に矎しいグラフのためにそれを悪甚しおいたす。 最初のアセンブリの前に、そのようなレポヌトファむルは存圚しないず蚀われたすが、これは怖いこずではありたせん。



「Publish JUnit test result report」を含めたす。JUnitではありたせんが、nosetests ** / reports / tests.xmlを瀺したす。これは、「reportsディレクトリのカブ/ゞョブのルヌトから」ずいう意味です。



次の項目は「違反の報告」であり、そこにはパむリントがありたす。 フィヌルドの名前が「XMLファむル名パタヌン」であり、pylintが非xmlを生成しないずいう事実にもかかわらず、私たちはたた、個人レコヌドでずさんな開発者のコ​​ヌドを批刀するあらゆる方法でpep8ずペアリングするファむル** / reports / pylint.reportを瀺したす。 昚日曞いたものを芚えおいたずしおも、朝になっお仕事に取り掛かるのに倧いに圹立ちたす。私は来お、違反のスケゞュヌルを芋お、修正したした。



さお、最埌。 「** / reports / coverage.xml」の「Cobertura Coverage Reportの公開」。 Coberturaが䜕であるかはわかりたせんが、Pythonカバレッゞの圢匏を正しく理解しおいたす。



パむリントずカバレッゞを䜿甚するず、「倩気」の境界を蚭定できたす。これはプロゞェクトの党䜓的な状態に圱響したす。 デフォルト倀が適合するようです。



コヌダヌは誇り高い鳥です-蹎らないで、飛びたせん



最埌に、電子メヌルずゞャバヌによる通知があり、奜みに合わせおカスタマむズできたす。 統合サヌバヌのメむン構成サヌバヌで最初に構成する必芁があるのは、それ以倖の堎合は機胜したせん。



行きたしょう



蚭定が蚘録され、アセンブリに送信できたす。 [今すぐビルド]ボタンを䜿甚しお手動で実行するか、コミットしおカブに䜕かをプッシュしたす。 ビルド履歎のサむドバヌの䞋郚に、新しいタスクず進行状況スラむダヌが衚瀺されたす。クリックするず、珟圚のビルドの「コン゜ヌル出力」セクションに移動し、ラむブを芋るこずができたす。 すべおが終了するず、ステヌタスにあらゆる皮類のものが衚瀺されたす。



ボヌナス



venvを再䜜成するたびに、pypiを䜿甚しおすべおのモゞュヌルがダりンロヌドされ、非垞に長時間実行されたす。 たた、亀通です。 少し怜玢した埌、pypi Collective.eggproxyで、pypi.python.org / simpleを暡倣したキャッシュプロキシリポゞトリを芋぀けたした。 `eggproxy_run`のように始たりたす。 助けがなく、デフォルトでは、すべおを/ var / wwwに入れたすが、これは良くありたせん。 サむトのドックを読んだ埌、蚭定ファむルを䜜成しおパスずポヌトを蚭定する方法を孊習できたす。 たた、悪魔にされたくなかったので、ゞェンキンスが監督者の腕に送られた埌。



buildenv.shは、このプロキシの存圚/䞍圚に適応するようにすでにトレヌニングされおいたす。そこではすべおが簡単です。



クレゞット



kmmbvnr @ ljテストを開始しお楜しむ方法 。 Jenkinsずの統合に加えお、 django-anyも説明されおいたす。 すべおのdzhangistsを読んで䜿甚するこずを匷くお勧めしたす。



Hudsonを䜿甚しおpython CIサヌバヌをセットアップするこずは、正しい解釈をベヌスにした最新の投皿であり、この解釈に基づいおいたす。



プロゞェクトのテストでも、 WSGIアプリケヌションの単玔なラッパヌが䜿甚されたした 。これにより、 WSGIコンテナヌなしでテストずデバッグが可胜になり、䞍必芁なhemoのないブラりザヌでの手動䜜業が可胜になりたした。



All Articles