рдкрд░рд┐рдЪрдп
рд╡рд┐рдХрд╛рд╕ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╡реНрдпрд╛рдкрдХ рд╕реНрдЯреНрд░реЛрдХ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рддрд░реНрдХ рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдХреЛ рдЫреВрдиреЗ рд▓рдЧрд╛ред рдЗрд╕рдиреЗ рдореБрдЭреЗ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдФрд░ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдФрд░ рдЙрдирдХреЗ рд▓реЙрдиреНрдЪ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рд╣рд╛рдереЛрдВ рд╕реЗ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рдирд╛ рдХрд┐рд╕реА рддрд░рд╣ рджреБрдЦреА рд╣реИред рд╣рд╛рд▓ рд╣реА
рдореЗрдВ рдЬреЗрдирдХрд┐рдиреНрд╕ рдореЗрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ
CI Django рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдФрд░
Django рдореЗрдВ рдмрд╣реБрдд рдкреБрд░рд╛рдиреЗ
рд╡реЗрдмрдЯреЗрд╕реНрдЯ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ ред рдирддреАрдЬрддрди, рдЬреЗрдирдХрд┐рдВрд╕ рдХреЛ рдЙрдард╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдЙрдиреНрд╣реЛрдВрдиреЗ рдореЗрд░реА ubunt рдкрд░ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдФрд░ рдореИрдВрдиреЗ рдЯреАрдордХрд┐рдЯ рдХреЛ рдПрдХ рдкрд╛рдкреА рдкреНрд░рд╕рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛рдж рдХрд┐рдпрд╛ред "рдЬрдм рд╕реЗ рдореИрдВ
PyCharm рдореЗрдВ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рд╢рд╛рдпрдж
TeamCity рдХреА рдХрдорд╛рди рд╕рдВрднрд╛рд▓ рд▓реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдБ рдХреЗрд╡рд▓ рдПрдХ рдбреЗрд╕реНрдХ рд╣реИ!" - рдореБрдЭреЗ рд▓рдЧрд╛ ... рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рд╕рд╣реА рдерд╛, рдФрд░ рдЬрдм рдХрд░реНрдо рдореБрдЭреЗ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдПрдХ рдЕрддрд┐-рдЙрдкрдпреЛрдЧреА рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред (рдФрд░ рдореЗрдЧрд╛-рд╡рд┐рд╕реНрддреГрдд), рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рдореИрдиреБрдЕрд▓ рдХреЗ рд╡рд┐рдкрд░реАрдд :)
рдХреБрд▓: рдЬрд┐рд╕реЗ
рдЯреАрдорд╕рд┐рдЯреА рдПрдХреАрдХрд░рдг рд╕рд░реНрд╡рд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд (рдкрд░реНрдпрд╛рд╡рд░рдг) рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде
рдЖрднрд╛рд╕реА рдЕрдЬрдЧрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ
рдирд╛рдХ рдФрд░
рд╡реЗрдмрдЯреЗрд╕реНрдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде
Django рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛
рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ - рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рдЪреЗрддрд╛рд╡рдиреА! TeamCity рдХреЛ (рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░) JVM рдХреЗ рд╕реВрд░реНрдп / рдУрд░реЗрдХрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...
рд╕рд┐рджреНрдзрд╛рдВрдд
Virtualenv рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкрд╛рдпрдерди рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг
рдореЗрд░реЗ рд╡рд┐рдХрд╛рд╕ рдкреАрд╕реА рдкрд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдкрд░ рдорд╛рдорд▓рд╛ рд╣реЛрдиреЗ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЬрдЧрд░ 2.6 рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЕрдВрддрддрдГ 2.7 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ), рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдВрддрд┐ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдЬреЛ рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣
root
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдпрд╛
sudo
рдПрд░ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
virtualenv рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдпрд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ
virtualenv.py
рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрдкрд░рд╕реБрдЕрд░ рдкрд╛рд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рд╛рдВ, рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЕрдЬрдЧрд░ рдХреЛ рдЕрднреА рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
python virtualenv.py -p python2.7 .env
рдпрд╣рд╛рдБ
-p python2.7
рдЕрдЬрдЧрд░ рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
(рд╕реВрдХреНрд╖реНрдорддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЬрдЧрд░ рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдЬрдЧрд░ рдирд╣реАрдВ рд╣реИ," рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдиреНрд╣реЗрдВ рдЦреАрдВрдЪрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧреА) .env
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬрд┐рд╕рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗ рдЕрдЬрдЧрд░ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ
.env/bin/python
рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
.env/bin/python
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдмрд╣реБрдд рдЖрд▓рд╕реА рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
source .env/bin/activate
рдЬреЛ рдкрд╛рде рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреА рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИред
рдХрдкрдбрд╝реЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рди
рд▓рдХреНрд╖реНрдп рдкреНрд░рдгрд╛рд▓реА рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдЕрдЬрдЧрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ
рдХрдкрдбрд╝реЗ рдореЙрдбреНрдпреВрд▓ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдкрд░реАрдХреНрд╖рдг рд╕рд░реНрд╡рд░ рдкрд░, рдЖрдкрдХреЛ
sudo pip install fabric
рдпрд╛
sudo easy_install fabric
pycrypto
рд╣реЛрдЧрд╛, рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдпрд╣
pycrypto
рдЬрд┐рд╕реЗ
python-dev
рд╕реЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рд╕реЙрд░реНрдЯ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдлреИрдмреНрд░рд┐рдХ рдЖрдкрдХреЛ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдпрд╛ рд░рд┐рдореЛрдЯ (SSH рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдЬрдЧрд░ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рдмрд╛рдж, рд╕рд┐рд╕реНрдЯрдо рдкрд░
fab
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЬреЛ рдХреЙрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ
fabfile.py
рдлрд╝рд╛рдЗрд▓ рдХреА
fabfile.py
рдХрд░реЗрдЧрд╛ рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
fab test
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛
fabfile.py
рдлрд╝рд╛рдЗрд▓ рд╕реЗ
test
рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред
Django рдореЗрдВ рдирд╛рдХ рдФрд░ рд╡реЗрдмрдЯреЗрд╕реНрдЯ
рдЕрдм рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ред Django рдХреЗ рдЕрдкрдиреЗ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг (рдЯреЗрд╕реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд▓рд┐рдЦреА рдЧрдИ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдФрд░
рд╡реЗрдмрдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП
рдирд╛рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдкрд░рд┐рдЪрдп рдореЗрдВ, рдореИрдВрдиреЗ рд╡реЗрдмрдЯреЗрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рддрдм рд╣рдо рдЗрд╕ рд╕реВрдЪреА рдХреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ
pip -r
рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реВрдЪреА рд╣реИ):
coverage>=3.0 nose webtest django-nose django-webtest
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
django_nose
рдХреЛ рдЖрдкрдХреЗ django рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА
INSTALLED_APPS
settings.py
, рдпрд╛ рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
,
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред
рдЪреЗрддрд╛рд╡рдиреА! рдпрджрд┐
south
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ
django_nose
рдмрд╛рдж
django_nose
рдХреЛ
django_nose
рд╣реЛрдЧрд╛ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдЧрд░ рд╡рд╣рд╛рдБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Dzhangovsky рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ - рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЫреВ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдХреИрд╕реЗ рд╡реЗрдмрдЯреЗрд╕реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд
рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:
python manage.py test
рдпрд╣ рдХрдорд╛рдВрдб рдирд╛рдХ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╡реЗрдмрдЯреЗрд╕реНрдЯ рдкрд░реАрдХреНрд╖рдг рджреЛрдиреЛрдВ рдХрд░реЗрдЧрд╛, рдпрджрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓реЛрдВ, рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд╛рдо рдореЗрдВ
"test"
рд╢рдмреНрдж рд╣реИ - рдпрд╣
nose
рд╕реЗ рдПрдХ рдмреЛрдирд╕ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
nose
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб
рдХрд╡рд░реЗрдЬ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП
рдХрд╡рд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рд╡рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ
webtest
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╕реАрдзреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрддреНрдкрдиреНрди рдкреГрд╖реНрдареЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ)ред
Django-nose
рд╣рдореЗрдВ
рдирд╛рдХ рдкрд░реАрдХреНрд╖рдг
рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА
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 рд╣реИ )ред
рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрди
рджрд░рдЕрд╕рд▓, рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж
рдЯреАрдорд╕реАрдЯреА рдХреЛ рд╕рд┐рдЦрд╛рдирд╛ рд╣реИ (рдХрд┐ рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐) рд╣рдорд╛рд░реЗ рдЕрджреНрдпрддрди рдХрд┐рдП рдЧрдП рдбреЗрдЬреИрдВрдЧреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ (рдЬрд┐рд╕реЗ рд╡рд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреИрд╕реЗ) рдФрд░ рд╣рдореЗрдВ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдВ (рдпрд╣рд╛рдВ рдЙрдиреНрд╣реЗрдВ рдереЛрдбрд╝реА рдорджрдж рдХрд░рдиреЗ рдХреА рднреА рдЬрд░реВрд░рдд рд╣реИ)ред
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рдпреЛрдЧ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐, рд╕реНрд╡рдпрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреВрд░реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдЬрд╛рдВрдЪ / рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдЫреЛрдЯрд╛ рдХрд╛рд░рдЦрд╛рдирд╛ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЯреАрдорд╕рд┐рдЯреА рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ред
рдХреЛрдб
project_dir/fabfile.py
:
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
virtualenv.py
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ рд╣реИ, рддрд╛рдХрд┐ рдЗрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред
project_dir/build/pipreq.txt
рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рд╛рдордЧреНрд░реА:
django coverage>=3.0 nose teamcity-nose webtest django-nose django-webtest ... /...
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╕реВрдЪреАрдмрджреНрдз
рдЯреАрдорд╕рд┐рдЯреА-рдирд╛рдХ рдХреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдореЙрдбреНрдпреВрд▓ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЯреАрдорд╕рд┐рдЯреА рддрдХ рдкрд╣реБрдВрдЪрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдХрдиреЗрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рддрдм рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдпрд╣
TEAMCITY_PROJECT_NAME
рджреМрд░рд╛рди
TEAMCITY_PROJECT_NAME
рдкрд░реНрдпрд╛рд╡рд░рдг
TEAMCITY_PROJECT_NAME
рдкрд╛рддрд╛ рд╣реИред
рджрд░рдЕрд╕рд▓, рдСрдЯреЛрдореИрдЯрд┐рдХ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:
fab test
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВред
рдЯреАрдорд╕рд┐рдЯреА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рдореИрдВрдиреЗ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЬреЛ рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ - рдореИрдВрдиреЗ рдмрд╕
рдбрд╛рдЙрдирд▓реЛрдб рдкреГрд╖реНрда рд╕реЗ tar.gz рд╡рд┐рдХрд▓реНрдк
рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ ред рдЗрд╕ рд╕рднреА рдЦреБрд╢реА рдХрд╛ рд╡рдЬрди рдЕрд╢реЛрднрдиреАрдп 333MB рд╣реИред рд▓реЗрдХрд┐рди рд╕реНрд╡рдпрдВ рдПрдХреАрдХрд░рдг рд╕рд░реНрд╡рд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдореЗрдВ
рдЯреЙрдордХреИрдЯ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рдЕрдиреНрдп рдмрдХрд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдмрд╡рд╛рд╕реАрд░ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ред
рдЯреАрдорд╕рд┐рдЯреА рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ (рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд) рдЬреЛ рдХрд┐рд╕реА рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ - рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдЬреЗрд╡реАрдПрдо рдХреА рдПрдХ рдЧрд░рд┐рдорд╛ / рдУрд░реЗрдХрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЗрд╕реЗ
рдЙрдмрдВрдЯреВ рдкрд░ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдпрд╣рд╛рдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЛ рдЕрдирдкреИрдХ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдбреЗрдЯрд╛ рд╕реНрд╡рдпрдВ рдХреЛ
.BuildServer
рд╣реЛрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ
.BuildServer
рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдХреЗ рддрд╣рдд рд╕рд░реНрд╡рд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ)ред рд╕рд░реНрд╡рд░ рдХрдорд╛рдВрдб
bin/runAll.dh start
,
bin/runAll.dh stop
рддрджрдиреБрд╕рд╛рд░ рдорд╛рд░рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рд╣рдо рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ
bin/runAll.dh stop
рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рд╣реИрдВ)ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░ рдкреЛрд░реНрдЯ
8111
рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ
build agent
рднреА рд╣реИ рдЬреЛ рдкреЛрд░реНрдЯ
9090
рдкрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдХреЛ
conf/server.xml
, рджреВрд╕рд░реЗ рдореЗрдВ
buildAgent/conf/buildAgent.dist.properties
(рдирдореВрдирд╛) рдФрд░
buildAgent/conf/buildAgent.properties
(рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдЬреЗрдВрдЯ) рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдиреНрдп рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛) рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рдЯреАрдорд╕рд┐рдЯреА рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ (http: // localhost: 8111 рдЕрдЧрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рд╕рд┐рд╕реНрдЯрдо рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рдпрд╛ рддреЛ рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╕рдордЭреМрддрд╛ рджреЗрдЦреЗрдВрдЧреЗ рдпрд╛ рд╕рдВрджреЗрд╢:

рдФрд░ рдЖрдкрдХреЛ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдПрдЧреНрд░реАрдореЗрдВрдЯ рд╕реЗ рдмрджрд▓ рди рджрд┐рдпрд╛ рдЬрд╛рдПред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЦреБрдж TeamCity рд╕рд┐рд╕реНрдЯрдо рджреЗрдЦреЗрдВрдЧреЗред
рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рд╡рд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рдирд╛рдо рдФрд░ рд╡рд┐рд╡рд░рдгред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреЗрдЬ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рджред
VCS рд░реВрдЯреНрд╕ рдЯреИрдм (VCS - рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА) рдкрд░, рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╣рд╛рдВ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рд▓рдВрдмрд╛ рдлреБрдЯрдХреНрд▓реЙрде рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рд╕реЗ рднрд░рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдкреГрд╖реНрдареЛрдВ рдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡рд╣рд╛рдВ рдХреБрдЫ рднреА рдЕрд▓реМрдХрд┐рдХ рдирд╣реАрдВ рд╣реИред рдЖрдк рддреБрд░рдВрдд рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛,
рд╕рд╛рдорд╛рдиреНрдп рдЯреИрдм рдкрд░, рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛
Buid рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдХреА рдЖрдзрд╛рд░рд╢рд┐рд▓рд╛ред
рдмрд┐рд▓реНрдб рдХрд╛рдЙрдВрдЯрд░ - рд╡рд╣ рд╕рдВрдЦреНрдпрд╛ рдЬрд╣рд╛рдВ рд╕реЗ
рдмрд┐рд▓реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рд╢реБрд░реВ рд╣реЛрдЧреА, рдпрд╛ рдмрд▓реНрдХрд┐, рдмрд┐рд▓реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рд╕реЗ рдЕрдЧрд▓реЗ рдмрд┐рд▓реНрдб рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ
1
рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рд╕рд┐рд░реНрдл рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рддрд╛рдЬрд╝рд╛ рдирд╣реАрдВ рд╣реИ :)
рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ,
рдЖрд░реНрдЯрд┐рдлрд╝реИрдХреНрдЯ рдкрде рд╣реИрдВ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЕрд╕реЗрдВрдмрд▓реА / рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреИрд╕реЗ рдЦреЛрдЬрдирд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рдкрд░реАрдХреНрд╖рдг рдХрд╡рд░реЗрдЬ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд╕ рдпрд╣рд╛рдБ
django_dir/cover/**/*
ред рджреВрд╕рд░реЗ рдкреГрд╖реНрда рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рднрдВрдбрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
рдРрдб рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдк рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ
, рдЖрдкрдХреЛ рдкрд╣рд▓рд╛ (рдФрд░, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХрдорд╛рддреНрд░) рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдк (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг) рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯ рдЬреЛ рдЖрдк рд╕реНрдХреНрд░реАрди рдкрд░ рджреЗрдЦрддреЗ рд╣реИрдВред рд╕рд╣реЗрдЬреЗрдВред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдореЗрдиреВ рдореЗрдВ рджрд╛рдИрдВ рдУрд░,
рдмрд┐рд▓реНрдб рдЯреНрд░рд┐рдЧрд░ рдЪреБрдиреЗрдВ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рд╣рдорд╛рд░реА рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓реЙрдиреНрдЪ рдХреЛ рдЬреЛрдбрд╝реЗрдВ:

рдареАрдХ рд╣реИ, рдЕрдВрдд рдореЗрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рд╡рд╛рдкрд╕,
рд░рд┐рдкреЛрд░реНрдЯ рдЯреИрдм рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдПрдХ рдирдпрд╛ рдЯреИрдм рдмрдирд╛рдПрдВ:

рдпрд╣ TemCity рдХреЛ рдЗрд╕рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╣рдорд╛рд░реА рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рд╣реЛрдиреЗ рдкрд░ рдЯреИрдм рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд░рд┐рдкреЛрд░реНрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЙрдиреНрд╣реЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рд╕рдм, рдпрд╣ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╢реАрд░реНрд╖ рдореЗрдиреВ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд░рди рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдкрд░
рд░рди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рдЕрдЪреНрдЫрд╛
рд╕рднреА рдкреНрд░рдмрдВрдзрдХ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХрд╛рд╢, рдЗрди рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░-рдПрдбрдорд┐рди рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ - XML тАЛтАЛрдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдХреЗред рдореИрдиреБрдЕрд▓
рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рдПрдХ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЬрдЧрд╣ рдкрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдмрд╣реБрдд рдЖрд░рд╛рдо рдХрд┐рдпрд╛
(рд╡реЗ рд╢рддрд░рдВрдЬ рдХреЗ рд░реВрдк рдмрдирд╛ рд╕рдХрддреЗ рдереЗ) ред рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ
buildTypeId
рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рджреЗрдЦрдирд╛ рд╣реИ:
localhost:8111/viewType.html?tab=buildTypeStatusDiv& buildTypeId=bt2
localhost:8111/viewType.html?tab=buildTypeStatusDiv& buildTypeId=bt2
ред
рдореИрдВ рдЕрдкрдиреЗ рджреЛ рдЧреНрд░рд╛рдлрд╝реЛрдВ рдХрд╛ рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рджреВрдВрдЧрд╛:
<?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
ред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдордХреНрдЦреА рдкрд░ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдФрд░ рдпрд╣рд╛рдБ рдХрд╡рд░реЗрдЬ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИ:

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реВрдЪреА:

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╡рд┐рд╡рд░рдг:

рдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдВ "рдмрд╣реБ-рдкреБрд╕реНрддрдХ" рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реА рд╣реБрдЖред рдореИрдВ рдЗрд╕реЗ рдЙрдкрд▓рдмреНрдз рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг (рдореЙрдбреНрдпреВрд▓рд░ рдФрд░ рдПрдХреАрдХрд░рдг) рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА "рдЙрдард╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛" рдХреА рднреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИред TemaCity рдХреА рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЕрд╕рдВрддреБрд╖реНрдЯ рд╣реЛрдХрд░ рдореИрдВ рдЖрдкрдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рдЫреЛрдбрд╝рддрд╛ рд╣реВрдВред рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рдЖрдирдиреНрджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИ - рджреЛрдиреЛрдВ рдорд╛рдирдХ рд╕рд╛рдмреБрди рдЕрдзрд┐рд╕реВрдЪрдирд╛, рдФрд░
рдЬреИрдмрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдзрд┐рд╕реВрдЪрдирд╛, рдФрд░ рдПрдХ рд░рд┐рд▓реАрдЬ рдкреБрд╢ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред
рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ!