HowToDjangoプロゞェクトずTeamCityの継続的な統合

はじめに


開発の過皋で、新しい機胜を䜜成したす。倚くの堎合、幅広いストロヌクで叀いコヌドに觊れるようになり、その䜜業のロゞックを砎壊したした。 そのため、叀いコヌドの単䜓テストず統合テストを䜜成し、起動を自動化する必芁がありたした。 私の手ですべおのテストを远いかけるのは、なんずなく悲しい。 Jenkinsの最近のCI DjangoチュヌトリアルずDjangoのかなり叀いWebtestチュヌトリアルを思い出しおください 。 その結果、ゞェンキンスを育おようず詊みられたしたが、どういうわけか圌は私のバりンドを離陞せず、私はTeamCityを眪深い出来事ずしお思い出したした。 「私はPyCharmで曞いおおり、それにアプロヌチを芋぀けたので、おそらく机が1぀しかないのでTeamCityを指揮したす」 および詳现、以前のマニュアルずは異なりたす:)

合蚈 TeamCity統合サヌバヌを䞊げ、自動環境曎新を䜿甚しお仮想 python環境で錻 テストずwebtestテストでDjangoプロゞェクトをテストするためのガむダンスが必芁な人-catぞようこそ

ご泚意 TeamCityには、ドキュメントによるずsun / oracleバヌゞョンのJVMが必芁です...

理論


virtualenvを䜿甚したPython仮想環境

開発甚PCのシステムはプロゞェクトのすべおの芁件を満たしおいたすが、これはテスト甚のサヌバヌの堎合ずはほど遠いPythonでも2.6であり、最終的に2.7が必芁でしたので、必芁なものを静かにむンストヌルするために環境仮想化の䞖話をしなければなりたせんでした、さらに、 root暩限たたはsudo erが必芁なくなりたす。

仮想環境を䜜成するには、 virtualenvをむンストヌルするか、アヌカむブからvirtualenv.pyをダりンロヌドしお抜出する必芁がありたす。 2番目のオプションを䜿甚したす。 これは、スヌパヌナヌザヌのパワヌを䜿甚するこずをたったく思いずどたらせたす。 はい、ただシステムにpythonをむンストヌルする必芁がありたす。

 python virtualenv.py -p python2.7 .env 


ここで、 -p python2.7は必芁なバヌゞョンのpythonを蚭定したす埮劙な点は、必芁なバヌゞョンのpythonをシステム自䜓にむンストヌルする必芁がありたすが、「デフォルトpython」ではないため、スクリプトはそれらを匕き出しおむンストヌルするこずはできたせん .env環境が配眮される.envディレクトリ。 さらに、環境からpythonずモゞュヌルを䜿甚するには、 .env/bin/pythonを介しおそれらを呌び出す必芁がありたす.env/bin/pythonこれを怠writeに曞くず、実行できたす

 source .env/bin/activate 


PATH環境倉数を眮き換えたす。

ファブリックによる自動化

タヌゲットシステムにむンストヌルされたpythonに加えお、 ファブリックモゞュヌルも必芁です。 ぀たり、テストサヌバヌで、 sudo pip install fabricたたはsudo easy_install fabricを実行する必芁がありたす。むンストヌル䞭に、アセンブリのためにpython-devからpython-dev゜ヌトを必芁ずするpycryptoをプルするため、最初にむンストヌルする必芁がありたす。 Fabricを䜿甚するず、ロヌカルたたはリモヌトSSH経由システムでアクションを実行するスクリプトをPythonで実行できたす。 むンストヌル埌、 fabアプリケヌションがシステムに衚瀺され、callフォルダヌでfabfile.pyファむルが怜玢され、指定されたスクリプトが実行されたす。

䟋

 fab test 


実行するず、 fabfile.pyファむルからtest機胜が実行されたす。

ゞャンゎの錻ずりェブテスト

次に、テスト自䜓に぀いお少し説明したす。 Djangoには独自のナニットテストず機胜テストテストクラむアントを䜿甚がありたすが、それらには耇数の欠点がありたす。 䞀般に、私は機胜テストのためにナニットテストずりェブテストのために錻を䜿い始めたした。 はじめに、webtestに぀いおの蚘事ぞのリンクを瀺したした。それがどのように機胜するかをよく瀺しおいたす。 テストには次のモゞュヌルが必芁ですその埌、 pip -rを介した自動むンストヌル甚のモゞュヌルのリストずずもに、このリストをファむルに远加したす。

 coverage>=3.0 nose webtest django-nose django-webtest 


さらに、 django_nose djangoプロゞェクトのINSTALLED_APPS settings.pyファむルに远加するか、同じファむルでTEST_RUNNER = 'django_nose.NoseTestSuiteRunner'指定する必芁がありたす。

泚意 south䜿甚する堎合south 、 django_noseその埌に远加する必芁がありたす。

実際、Dzhangovskyテストシステムで既に蚘述されおいるナニットテストがある堎合-それらに觊れるこずはできたせん、すべおがそのように動䜜したす。 webtestを䜿甚しお機胜テストを䜜成する方法に぀いおは、䞊蚘の蚘事をご芧ください 。

テストは通垞​​どおり開始されたす。

 python manage.py test 


このコマンドは、テストのあるファむル、クラス、および関数の名前に"test"ずいう単語が含たれおいる堎合、noseテストずwebtestテストの䞡方を実行したす-これはnoseからのボヌナスです。 さらに、 noseはカバレッゞを䜿甚しおテストのコヌドカバレッゞを蚈算できたすテストはコヌドではなく、生成されたペヌゞを介しお機胜するため、機胜的なwebtestテストを理解しおいたせん。 Django-noseでは、 オプションを䜿甚しお錻テストを実行できたす。 これを行うには、プロゞェクトのsettings.pyファむルにsettings.pyたす。 䟋

 NOSE_ARGS = [ '--nocapture', '--with-coverage', '--cover-html', '--cover-html-dir=%s' % os.path.join(PROJECT_PATH, 'cover', 'unit'), '--cover-package=django_dir' ] 


このスペルを䜿甚するず、HTML圢匏のテストカバレッゞレポヌトを生成し、プロゞェクトのcover/unitサブディレクトリに配眮できたす。

緎習する


プロゞェクト構造

私のプロゞェクトのフォルダヌ構造は次のずおりです。

 . .. project_dir project_dir/django_dir project_dir/build project_dir/build/pipreq.txt project_dir/fabfile.py project_dir/virtualenv.py 


project_dirは、仮想環境のあるディレクトリ、ファクトリファむル、その他の䟿利なものなど、あらゆる皮類の䟿利なものが含たれおおり、既にdjango_dirサブディレクトリにあるプロゞェクト自䜓はdjangoにありたす。 すべおはproject_dirから始たりたすが、仮想環境を備えたディレクトリなど、いく぀かの䟋倖はありたすが、バヌゞョン管理システム私の堎合はGIT に入れたす。

テスト実行

実際、私たちの目暙は、リポゞトリ内の倉曎を怜出した埌方法を知っおいる TeamCityを教えお、曎新されたdjangoプロゞェクト方法は知らないをテストし、結果に぀いお説明するこずですここで圌も少し助けが必芁です。

実際には、実隓の玔床のために、テスト自䜓に加えお、環境党䜓をチェック/曎新するこずが望たしいため、倉曎を受け取った埌にTeamCityを起動する小さな工堎を䜜成したす。

コヌドproject_dir/fabfile.py 

 # -*- coding: utf-8 -*- from fabric.api import local def test(): """  . """ local('python virtualenv.py -p python2.7 .env') #    local('./.env/bin/pip install -q -E .env -r build/pipreq.txt') #    #   build/pipreq.txt local('./.env/bin/python django_dir/manage.py test --noinput') #   


virtualenv.pyはプロゞェクトのルヌトにあるため、システムにむンストヌルする必芁はありたせん。

project_dir/build/pipreq.txt必須コンテンツ

 django coverage>=3.0 nose teamcity-nose webtest django-nose django-webtest ...      /... 


前述のteamcity-noseがファむルにリストされおいるこずに泚意しおください 。このモゞュヌルは、テストの結果をTeamCityに䌝えるのに圹立ちたす。 構成や接続は必芁ありたせん。TeamCityが操䜜䞭に䜜成するTEAMCITY_PROJECT_NAME環境TEAMCITY_PROJECT_NAMEが芋぀かるず、自動的に起動したす。

実際、すべおが自動テストの準備ができおいたす。 開始するには、次のコマンドを実行するだけです

 fab test 


プロゞェクトのルヌトで。

TeamCityをむンストヌルしお構成する

あたり気にしたせんでしたが、ダりンロヌドペヌゞから tar.gzオプションをダりンロヌドしたした 。 このすべおの幞犏の重量は、䞋品な333MBです。 しかし、統合サヌバヌ自䜓に加えお、 Tomcatも含たれおいたす 。これにより、サヌバヌ蚭定やその他のがらくたによるhemoから私たちを救いたす。

TeamCityには、誰かが気に入らないかもしれないプロパティ冒頭に蚘茉がありたす-動䜜するには、尊厳/ OracleバヌゞョンのJVMが必芁です。

Ubuntuでそれを取埗する方法は、䟋えばここで読むこずができたす 。

実際、ダりンロヌド埌、このものを機胜する堎所に解凍したすデフォルトでは、デヌタ自䜓は、サヌバヌが実行されおいる.BuildServerホヌムディレクトリの.BuildServerサブディレクトリに保存されたす。 サヌバヌはコマンドbin/runAll.dh start 、それに応じおbin/runAll.dh stopがbin/runAll.dh stopされたすアヌカむブが解凍されたフォルダヌにいる堎合。 サヌバヌはデフォルトでポヌト8111で実行されたすが、ポヌト9090で起動するbuild agentもありたす。 最初はconf/server.xmlで、2番目はbuildAgent/conf/buildAgent.dist.properties サンプルおよびbuildAgent/conf/buildAgent.properties 特定の゚ヌゞェントで倉曎できたす。

他のすべおの蚭定これから説明したすは、Webむンタヌフェヌスを介しお行われたす。 䞀般に、teamcityを起動しおブラりザヌに移動したすhttp// localhostロヌカルで起動された堎合は8111。 システムの容量に応じお、ラむセンス契玄たたはメッセヌゞが衚瀺されたす。



ラむセンス契玄に眮き換えられるたで埅぀必芁がありたす。

次に、管理者アカりントを䜜成するように求められたす。 その埌、TeamCityシステム自䜓が衚瀺されたす。

ここでは、プロゞェクトの䜜成に興味がありたす。 名前ず説明-すべおがそこに簡単です。 プロゞェクト蚭定ペヌゞに移動した埌。



[ VCSルヌト ]タブVCS-バヌゞョン管理システムで、新しいリポゞトリを指定する必芁がありたす。 システムがテスト甚のコヌドを取埗する堎所をより正確に瀺したす。 デヌタを入力する必芁がある長いフットクロスがありたす。 すべおのフィヌルドに眲名があり、ヘルプペヌゞぞのリンクがあるため、そこに超人的なものはありたせん。 接続の状態をすぐに確認できたす。

次に、[ 党般 ]タブで、新しいBuid Configurationを䜜成する必芁がありたす-これはテストの基瀎です。



ビルドカりンタヌ - ビルドの番号付けを開始する番号、たたは次のビルドに割り圓おられるビルドの番号。 あなたは安党に1眮くこずができたす、ここではスクリヌンショットは新鮮ではありたせん:)

最初のペヌゞの重芁なフィヌルドのうち、アセンブリ/テストの結果ファむルを芋぀ける方法をシステムに䌝えるアヌティファクトパスがありたす。 私たちの堎合、これらはテストカバレッゞに関するレポヌトです。 私の堎合、 django_dir/cover/**/* 。 2番目のペヌゞで、以前に定矩したリポゞトリを遞択したす。

[ ビルドステップの远加 ]をクリックしお、最初のそしおこの堎合は唯䞀のビルドステップこの堎合はテストを䜜成する必芁がありたす。



実際には、画面に衚瀺される必芁な蚭定セット。 保存したす。

次に、垂盎メニュヌの右偎で[ ビルドのトリガヌ ]を遞択し、リポゞトリが倉曎されたずきにアセンブリの起動を远加したす。



最埌に、プロゞェクト自䜓の蚭定に戻り、[ レポヌトタブ ]タブに移動しお新しいタブを䜜成したす。



これにより、TemCityはむンタヌフェむスにレポヌトを衚瀺できたす。



指定されたファむルが指定された堎所にある堎合、タブが衚瀺されたす。その堎所にない堎合は、蚭定を確認し、レポヌトが実際にあるべき堎所にあるかどうかを確認したす。

それだけです。 プロゞェクトのトップメニュヌに残り、 プロゞェクトに移動しお最初の実行のためにビルドで[ 実行 ]をクリックしたす 。

かわいらしさ

すべおのマネヌゞャヌはグラフィックスが倧奜きです。なぜなら、衚瀺するものを埗るには、いく぀かの写真を䜜成する必芁があるからです。 残念ながら、これらの写真は、XML構成に倉曎を加えるこずで、真のプログラマヌ管理方法によっお远加されたす。 マニュアルはこちらにありたす 。 この堎所では、開発者はかなり䌑んでいるず感じおいたすチェスロボのフォヌムを䜜成できたす 。 なぜなら buildTypeId最も重芁なパラメヌタヌの1぀を芋぀ける明確な方法は芋぀かりたせんbuildTypeId 。 最も簡単な方法は、ブラりザのアドレスバヌを調べるこずです。 localhost:8111/viewType.html?tab=buildTypeStatusDiv& buildTypeId=bt2 localhost:8111/viewType.html?tab=buildTypeStatusDiv& buildTypeId=bt2

2぀のグラフの構成を提䟛したす。

 <?xml version="1.0" encoding="UTF-8"?> <settings> <report-tabs> <report-tab title="Coverage" basePath="/unit/" buildTypeId="bt2"> <revisionRule name="lastFinished" revision="latest.lastFinished" /> </report-tab> </report-tabs> <custom-graphs> <graph title="Build Duration" defaultFilters="showFailed" seriesTitle="key"> <!--     --> <valueType key="BuildDuration" title="main test" buildTypeId="bt2"/> </graph> <graph title="Test Passes" defaultFilters="showFailed" seriesTitle="key"> <!--   --> <valueType key="FailedTestCount" title="fail" buildTypeId="bt2"/> <valueType key="PassedTestCount" title="pass" buildTypeId="bt2"/> </graph> </custom-graphs> </settings> 


これは~/.BuildServer/config/django_dir/plugin-settings.xmlファむルです。 ファむルぞの倉曎はその堎で取埗されたす。

次のようになりたす。



カバレッゞレポヌトは次のずおりです。



アセンブリリスト



アセンブリの詳现



おわりに


「マルチブック」をおaびしたすが、それはたさにその通りです。 私はそれを利甚可胜にしたかった。 その結果、自動化されたテストモゞュヌル化ず統合が行われ、さらに、必芁なモゞュヌルの存圚ずプロゞェクトの「リフト可胜性」もチェックされたす。 TemaCityがさたざたなアセンブリの結果に反応しお解䜓するこずは、良心に任せたす。 このパヌトでは、喜ぶべきこずがありたす-暙準的な石鹞通知、およびjabberによる通知、およびリリヌスプッシュの䜜成の䞡方です。

良い開発を

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


All Articles