рд░рд┐рд▓реАрдЬрд┐рдВрдЧ рдмрд┐рд▓реНрдбреНрд╕ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд┐рдЯрд▓реИрдм, рдЬреАрд░рд╛ рдФрд░ рдХрдВрдлреНрд▓реБрдПрдВрд╕ рдХрд╛ рдкрд╛рдпрдерди рдПрдХреАрдХрд░рдг

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдПрдХ рд╕реНрдЯреИрдВрдб-рдЕрдк рдкрд░, рдПрдХ рд╕рд╣рдХрд░реНрдореА рдиреЗ рдПрдХ рддрд░реНрдХрд╕рдВрдЧрдд рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ : рд░рд┐рд▓реАрдЬ рдмрд┐рд▓реНрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдкреНрд░реИрдХреНрдЯрд┐рд╕ рдХреЗ рд▓рд┐рдП рдЬреЗрд░рд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

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

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

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛, рдФрд░ рдпрд╣ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЖрдХрд░реНрд╖рдХ рдирд┐рдХрд▓рд╛ред рдФрд░ рд░реЛрдорд╛рдВрдЪрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рддреЛ рдХрд╛рдо рдХреА рдЦреБрд╢реА рдХреЗ рд▓рд┐рдП рдФрд░ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?

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

def get_release_info(config):

   try:

       release_input = sys.argv[1]

   except IndexError:

       raise Exception('Enter release name')

   releases_json = requests.get(url=RELEASES_LIST_URL, auth=(login, jira_password).json()

   for release in releases_json:

       if release['name'] == release_input:

                ...


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рд╕рдВрдкрд░реНрдХ рдмрд╣реБрдд рдкрдардиреАрдп рдХреЛрдб рдХреА рдУрд░ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдореИрдВ рдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЧрд┐рддреБрдм рдкрд░ рдореЗрд░реА рдкрд╣рд▓реА рдЦреЛрдЬ рдореБрдЭреЗ рдЬреЗрдЖрдИрдЖрд░рдП рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдУрд░ рд▓реЗ рдЧрдИред рдореИрдВрдиреЗ рд╢реБрд░реВ рдореЗрдВ GitPython рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рд░реНрдЬ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ, рдЬреЛ рдХрд┐ Github рдкрд░ рднреА рдкрд╛рдпрд╛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рдореБрджреНрджреЗ рдХреЗ рдЖрдЧреЗ рдХреЗ рдЕрдзреНрдпрдпрди рдиреЗ рддреБрд░рдВрдд рдЧрд┐рдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдЦреЛрдЬрдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛, рдмрд▓реНрдХрд┐ рддреБрд░рдВрдд рдЧреАрддрд╛рд▓рд╛рдм рдХреЗ рд▓рд┐рдПред рдирддреАрдЬрддрди, рдореИрдВ рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рд╕рдорд╛рдзрд╛рди рдкрд░ рдмрд╕рд╛: рдкрд╛рдпрдерди рдЧреАрддрд╛рд▓рд╛рдмред

рдореИрдВрдиреЗ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ ред рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рджреГрдврд╝рддрд╛ рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рдВрдЫрд┐рдд рд░рд┐рд▓реАрдЬ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рдПрдкреАрдЖрдИ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдХреЗ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП:

fix_issues = jira.search_issues(f'fixVersion={release_input}')

fix_id = jira.issue(fix_issues.iterable[0]).fields.fixVersions[0].id

рдпрджреНрдпрдкрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╣реА рд╣реИ рдХрд┐ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдПрдХ рд╣реА рдЪреАрдЬ рд╣реЛрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдФрд░ рдЗрд╖реНрдЯрддрдо рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдмрд╣реБрдд рдкрдардиреАрдп рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ, рдкреНрд░рд╛рдкреНрдд рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ, рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдореИрдВрдиреЗ рддрдпрд╢реБрджрд╛ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд╛рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рд╡реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рд╣реИрдВ:

Merge_request = namedtuple('Merge_request', ['url', 'iid', 'project', 'issue'])

рдЬреАрд░рд╛ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рднреА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рдереЗ:

projects = set()

links_json = requests.get(url=REMOTE_LINK.format(issue_number),

                            auth=login,jira_password).json()

for link in links_json:

   url_parts = link['object']['url'].split('/')

   project = f'{url_parts[4]}'

   iid = url_parts[6]

   projects.add(project)   

рдЙрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдХрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ ред рдлрд┐рд░, рд╢рд╛рдпрдж, рдореИрдВ рдЗрди рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреВрдВрдЧрд╛ред

рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдЪрд╛рдирдХ рд╕рд╣реА рдЖрд░рд╕реА рд╢рд╛рдЦрд╛рдПрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВ, рдЕрдЧрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдереЗ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдирдП рдмрдирд╛рдП рдЧрдПред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдкрд╛рдпрдерди рдЧреАрддрд╛рдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд▓рд┐рдпрд╛ рдерд╛:

gl = gitlab.Gitlab('https://gitlab...ru/', private_token=GITLAB_PRIVATE_TOKEN)

pr = gl.projects.get(project)

try:

   rc = pr.branches.get(f'{RC_name}')

   rc.delete()

   pr.branches.create({'branch': f'{RC_name}', 'ref': 'master'})

except gitlab.GitlabError:

   pr.branches.create({'branch': f'{RC_name}', 'ref': 'master'})

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

рдЗрд╕ рдХрджрдо рдкрд░, рдореБрдЭреЗ рдПрдХ рдЕрдкреНрд░рд┐рдп рдЧреАрддрд╛рд▓рд╛рдм рджреЛрд╖ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛: рдпрджрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдкрд╣рд▓реЗ рд╕реЗ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдХреА рдЧрдВрддрд╡реНрдп рд╢рд╛рдЦрд╛ рдореЗрдВ рдЬрдореЗ рд╣реБрдП рдереЗ, рддреЛ рдорд┐рддреНрдд рдЕрдиреБрд░реЛрдз рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп, рдЧрд┐рдЯреНрд▓рд╛рдм рдПрдкреАрдЖрдИ рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЕрдЧрд░ рдЗрд╕рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдЬрдЧрд╣ рдореЗрдВ рд╕рдВрдШрд░реНрд╖ рд╣реИ? Gitlab рдлрд╝реЛрд░рдо рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд▓реЛрдЧреЛрдВ рд╕реЗ рдкреВрдЫ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдХреЛрдИ рдЬрд╡рд╛рдм рдирд╣реАрдВ рд╣реИред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рдЧрд▓рдд рд╕рдВрдШрд░реНрд╖ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЕрднреА рддрдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИ

рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдмрдирд╛рддреЗ рд╕рдордп рддрд░реНрдХ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ: рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ, рдпрд╛ рдХреЛрдИ рд╡рд┐рд░реЛрдз рд╣реИ, рддреЛ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ RC рдореЗрдВ рдкреНрд░рд╡рд╛рд╣рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

pipelines = project.pipelines.list(ref=f'{issue}')

if pipelines:

   pipelines = pipelines[0]

   if pipelines.attributes['status'] != 'success':

       status = '(x)   !, '

рдлрд┐рд░ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рд╕реНрд╡рдпрдВ рдмрдирд╛рдПрдБ ред рд╣рдо рдЦреБрд▓реЗ рд▓реЛрдЧреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рд╣реИред рдЖрд╡рд╢реНрдпрдХ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЗрд╕реЗ рдмрдирд╛рдПрдВ:

mr = project.mergerequests.list(

 state='opened',

source_branch=source_branch,         target_branch=target_branch)

if mr:

   mr = mr[0]

else:

   mr = project.mergerequests.create(

{'source_branch': source_branch,

           'target_branch': target_branch,

           'title': f"{(MR.issue).replace('-', '_')} -> {RC_name}",

           'target_project_id': PROJECTS_NAMES[MR.project],})

status = mr.attributes['merge_status']

url = mr.attributes['web_url']

return status, url, mr

MR.issue.replace ('-', '_') - рдЬреАрд░рд╛ рдореЗрдВ рдХрд╛рд░реНрдп рдкрд░ рдЧреАрддрд╛рд▓рд╛рдмрд╛ рдХреА рдЕрд╕рдВрд╕рджреАрдп рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВред

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

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

рдЬреАрд░рд╛ рдХрд╛рд░реНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рджреЛ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗ рдЧрдП: рдкреВрд░реНрд╡-рдкреВрд░реНрд╡-рдкреЛрд╕реНрдЯ рдФрд░ рдкреЛрд╕реНрдЯ-рдбреЗ-рдкреЛрд╕реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдПред рд╢рд╛рдорд┐рд▓ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рднреВрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛рд░реНрдп рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЬреАрд░рд╛ рдореЗрдВ рдЙрддреНрдкрд╛рджрди рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛рд░реНрдп рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИ :

existing_issue = jira.search_issues(

f'project=PROJ AND summary ~ " {release_name}"')

if existing_issue:

   existing_issue = existing_issue[0]

   existing_issue.update(fields={

       'description': message,

       'customfield_xxx': message_before_deploy,

       'customfield_yyy': message_post_deploy,})

else:

   issue_dict = {

       "fixVersions": [{"name": release_name,}],

       'project': {'key': 'PROJ'},

       'summary': f" {release_name}",

       'description': message,

       'issuetype': {'name': 'RC'},  #      

       'customfield_xxx': message_before_deploy,

       'customfield_yyy': message_post_deploy,}

   new_issue = jira.create_issue(fields=issue_dict)

рдЖрдЧреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ : рдЬреАрд░рд╛ рд╕реЗ рд╡реЗрдм рд╣реБрдХ рдХреЗ рд╕рд╛рде рдЧрд┐рдЯрд▓реИрдм рдкрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдирд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛рд░реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдмрд╣реВрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВ), рдпрд╛ рд╢реАрд░реНрд╖рдХ рдореЗрдВ "рдЕрд╕реЗрдВрдмрд▓реА" рд╢рдмреНрдж рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВред рдФрд░ рдЗрд╕ рд╣реБрдХ рдХреЗ рд▓рд┐рдП Gitlab рдпрд╛ рддреЛ рдПрдХ bash рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдЧрд╛ рдЬреЛ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдЕрдЬрдЧрд░ рдХреЗ рд╕рд╛рде Docker рдЫрд╡рд┐ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдкрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИред рд╣рд╛рдВ, рдФрд░ рдЬреАрд░рд╛ рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдореЗрдВ рддрдХрдиреАрдХреА рдЦрд╛рддреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрднреА рддрдХ рдХреЛрдИ рдЕрдВрддрд┐рдо рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд╣реИред

рдЖрд░рд╕реА рд╢рд╛рдЦрд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЖрд╡рд╢реНрдпрдХ рд╢рд╛рдЦрд╛рдУрдВ рдкрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдмреЗрдВрдЪ рднреА рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддрд┐рдЧрдорди рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬреЗрдирдХрд┐рдВрд╕ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рдХреА рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рднреА рд╣реИред

рдпрд╣ рд╕рдм рдкрд░реАрдХреНрд╖рдХреЛрдВ рдХреЗ рдХрд╛рдо рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдп рд╕реЗ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рдЖрд░реНрдерд┐рдХ рдЕрд░реНрде рднреА рдХрд╛рдлреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ: рдкреНрд░рддрд┐ рджрд┐рди рдХрд╛рдо рдХреЗ рд╕рдордп рдХреЗ 8 рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП 150,000 рд░реВрдмрд▓ рдХреЗ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╡реЗрддрди рдХреЗ рд╕рд╛рде рдПрдХ рдФрд╕рдд рдбреЗрд╡рд▓рдкрд░ (рд╢реВрдиреНрдп рдореЗрдВ) рд▓реЗрдВред рджреЛ рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓рдЧрднрдЧ 700 рд░рд┐рд▓реАрдЬрд╝ рдереАрдВ - рдпрд╣ рдкреНрд░рддрд┐ рджрд┐рди рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдХреБрдЫ рдФрд░, рдХреБрдЫ рдХрдо, рд▓реЗрдХрд┐рди рдФрд╕рддрди, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рд▓реАрдЬ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдШрдВрдЯреЗ рдХрд╛ рд╕рдордп рдЪрд▓рд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣реА рд╣реИ, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рди рдХрдВрдкрдиреА рдХреЛ рдкреНрд░рддрд┐ рдорд╛рд╣ рдиреНрдпреВрдирддрдо 150,000 / 8 = 18,750 рд░реВрдмрд▓ рдмрдЪрд╛рддрд╛ рд╣реИред

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

рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдкреНрд░рд╕рдиреНрди рдерд╛: рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрдирд╛ рдФрд░ рдЗрд╕реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рд▓рд╛рдирд╛ рд╣рдореЗрд╢рд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЕрдиреБрднрд╡ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рддреЛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

All Articles