рдХрдкрдбрд╝реЗ - рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА

рдЖрдЬ рдореБрдЭреЗ рдЕрдЪрд╛рдирдХ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдкрд╛рд╡рд░ рд╣реИрдВ ( рдХрдкрдбрд╝реЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрдИ рдорд╣реАрдиреЛрдВ рдХреЗ рдмрд╛рдж)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдмрд┐рддрд╛рдП рдЧрдП 30 рдорд┐рдирдЯ рдЖрдкрдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рдХрдИ рд╕рдВрдЪрдпреА рдШрдВрдЯреЛрдВ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред рдЕрдЬрдЧрд░ рдХреЗ рдЕрдиреБрдпрд╛рдпрд┐рдпреЛрдВ рдХреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдкрдбрд╝реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрджреНрднреБрдд рдореЙрдбреНрдпреВрд▓ рд╣реИред рдФрд░ рдореИрдВ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреА рдлреИрдм рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХреБрдЫ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдпреЗ рдХрд╛рд░реНрдп рд╣реЛрдВрдЧреЗ: рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕реНрдорд╛рд░реНрдЯ рдХрдореЗрдВрдЯреЗрдЯрд░ рдФрд░ рдПрдХ рдХрдорд┐рдЯ рдХрдорд┐рдЯреЗрдЯрд░ ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрдкрдбрд╝реЗ рд░рдЦреЛ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рд╣рд░ рдЬрдЧрд╣ рд░рдЦреЛ (рдпрджрд┐, рдЕрдЪрд╛рдирдХ, рдЖрдк рдЕрднреА рднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)!

pip install fabric 

committer


рдЕрд▓реМрдХрд┐рдХ рдХреБрдЫ рднреА рдирд╣реАрдВ - рдмрд╕ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдиреБрд╕реНрдЦрд╛:
 # -*- coding: utf-8 -*- from fabric.api import local, prompt, settings env.test_branch = 'test' env.dev_branch = 'dev' def commit(): """  . """ with settings(warn_only=True): local('git status') prompt('Press <Enter> to continue or <Ctrl+C> to cancel.') #    , #         local('git add .') local('git commit') #         def merge_dev_to_test(with_return=True): """       . """ local('git checkout %s' % env.test_branch) #     local('git merge --no-ff %s' % env.dev_branch) #     if with_return: local('git checkout %s' % env.dev_branch) #    def to_test() """     . """ commit() merge_dev_to_test() 


merge_dev_to_test рдлрд╝рдВрдХреНрд╢рди рдмрд╣реБрдд рд▓рд╛рдЧреВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рджрд░рдЕрд╕рд▓, рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ 6 рдХрдорд╛рдВрдбреЛрдВ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдПрдХ fab to_test рдХреЗ рдЗрдирдкреБрдЯ рдФрд░ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддреА рд╣реИред рдЙрд╕реА рд╕рдордп, рд╡рд╣ рдПрдХ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рджреЗрддрд╛ рд╣реИ - рдмреНрд░рдВрдЪ рдореЗрдВ рдХреНрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдВрдЧреЗ рдФрд░ рд╡рд┐рдХрд╛рд╕ рд╢рд╛рдЦрд╛ рдХреА рдЙрдкрд▓рдмреНрдзрд┐рдпреЛрдВ рдХреЛ рдкрд░реАрдХреНрд╖рдг рдПрдХ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░ рджреЗрдВрдЧреЗред рдпрджрд┐ рдорд░реНрдЬ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ - рдмрд╕ fab commit ред

Kommenter


рдореИрдВ рдЗрд╕реЗ Django рд╕реЗрдЯрд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рд┐рдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдзреНрдпрд╛рди рднрдВрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рддреБрд░рдВрдд рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ django рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╕рд╣реА рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЙрдирдореЗрдВ рд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рд╣реИред рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдпрд╣рд╛рдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

 # -*- coding: utf-8 -*- from os import path from fabric.api import env, local env.settings_files = ( path.join('projcet_root', 'settings.py'), path.join('projcet_root', 'module', 'settings.py'), ) env.settings_versions = { 'develop': '#-D', 'test': '#-T', 'production': '#-P', } def _commenter(c_type, filename, regex, use_sudo=False, char='#', backup='.bak'): """     . """ if use_sudo: sudoer = 'sudo ' else: sudoer = '' if regex.startswith('^'): regex = regex[1:] if regex.endswith('$'): regex = regex[:-1] if c_type == 'comment': replacement = '%s ' % char char = '[^%s ]' % char regex = '(%s.+%s.*)' % (char, regex) else: replacement = '' regex = r'%s ?(.+%s.*)' % (char, regex) local(r"{sudo}sed -i{backup} -r -e 's/^([[:space:]]*){regex}$/" r"\1{replacement}\2/g' {filename}".format(**{ 'sudo': sudoer, 'backup': backup, 'replacement': replacement, 'regex': regex, 'filename': filename, })) def lcomment(*args, **kwargs): """ . """ _commenter('comment', *args, **kwargs) def luncomment(*args, **kwargs): """ . """ _commenter('uncomment', *args, **kwargs) def update_settings(mode): """  . """ for filename in env.settings_files: for version in env.settings_versions: if mode == version: luncomment(filename, versions[version]) elif: lcomment(filename, versions[version]) 


рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХреЛрдб рднреА рдЙрдкрд▓рдмреНрдз рд╣реИред

fabric рд╣реА рдПрдХ contrib.files рд╕рд╛рде contrib.files рдореЙрдбреНрдпреВрд▓ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдФрд░ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░, " contrib.files " рдХреЛ рдЗрд╕ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд╣реАрдВ рдбрд╛рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдореЗрдВрдЯ рд╕рд┐рдВрдмрд▓ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдмреАрдЪ рдПрдХ рд╕реНрдерд╛рди рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдпрд╣ рдЙрджрд╛рддреНрдд рдкрд╛рда рдмрдирд╛рддрд╛ рд╣реИ ) рдФрд░ рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреЗрд╡рд▓ рдорд╛рд░реНрдХрд░ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред

рд╡рд╣ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред fab update_settings:mode=<> рдХрдорд╛рдВрдб fab update_settings:mode=<> , рд╡рд╣ env.settings_files рд╕реВрдЪреА рд╕реЗ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд╕рд╛рде рд╣реА рдореЛрдб рдХреЗ рдЕрдиреБрд░реВрдк рд▓рд╛рдЗрдиреЛрдВ рдХреЛ env.settings_files рдХрд░рдХреЗ рдФрд░ рдорд╛рд░реНрдХрд░ рдХреЗ рд╕рд╛рде рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реБрдП рдЗрд╕реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ env.settings_files рд╕рдХрддрд╛ рд╣реИред

рдпрд╛рдиреА рдХреЙрд▓рд┐рдВрдЧ fab update_settings:mode=test рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдЧрд╛ /project_root/settings.py рдФрд░ /project_root/module/settings.py '' -D '' рдФрд░ '# -T' рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдФрд░ '# -T' рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ ред

рдпрд╣ рдЖрдкрдХреЛ рдЯрд╛рдЗрдк рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dvl', # #-D # 'NAME': 'prd', # #-P # 'NAME': 'tst', # #-T 'USER': 'ruutt', 'PASSWORD': 'gigopasswort', 'CHARSET': 'UTF8', }, } 


... рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐рдмрджреНрдз рдордВрдЪ рдкрд░ рдЕрд▓рдЧ рдХрд░рдирд╛:
 def deploy(branch): env.test_branch =branch #      commit(False) #      ,    update_settings(branch) #        #    , ,   .. local('git checkout %s' % env.dev_branch) #     prompt("OK. Press any <Enter> to exit.") #    IDE     - #             . 


рдФрд░ рдЖрдк рдЗрд╕ рд╕рднреА рд╣реИрд╢ fab deploy:branch=test рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдХрдВрд╕реЛрд▓ рдФрд░ рдЙрди рдкрд░ рдмрд┐рддрд╛рдП рдЧрдП рд╕рдордп рдореЗрдВ рдХрд┐рддрдиреА рдЯреАрдореЗрдВ рдмрдЪрд╛рдИ рдЬрд╛рдПрдВрдЧреАред

рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдРрд╕реЗ рд╕рдВрдЪрд╛рд▓рди рд╕рдордп рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдФрд░ рдлрд┐рд░ рдХрд┐рд╕реА рддрд░рд╣ рдХрдкрдбрд╝реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реА рдкрд╕рдВрджреАрджрд╛ рдкрддреНрд░рд┐рдХрд╛ рдХреЗ рдкрдиреНрдиреЛрдВ рдкрд░ рдмрд╣реБрдд рд▓рд╛рдкрд░рд╡рд╛рд╣реА рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ...

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


All Articles