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

рд╢реБрдн рджрд┐рди, Habr!

рдЖрдЬ рдо рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛ рдордзреНрдпреЗ рдПрдХ рд╕рд╛рдЭрд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБ рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд▓реНрдк рдкреНрд▓рдЧрдЗрди рдорд╛ рдХрд╛рд░реНрдп рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬреЗрдирдХрд┐рдиреНрд╕ рд╕рдмреИрднрдиреНрджрд╛ рдПрдХреАрдХреГрдд рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛-рдЕрдиреБрдХреВрд▓ред

рдкрд░рд┐рдЪрдп

DevOps рдХреЛ рд░реВрдкрдорд╛ рдпрд╕реНрддреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдЕрдм рдЖрдИрдЯреА рд╕рдореБрджрд╛рдпрдХреЛ рд▓рд╛рдЧрд┐ рдХреЗрд╣рд┐ рдирдпрд╛рдБ рдЫреИрдиред рдзреЗрд░реИ рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рд╡рд╛рдХреНрдпрд╛рдВрд╢ "do DevOps" рдХреБрдиреИ рдкреНрд░рдХрд╛рд░рдХреЛ рдЬрд╛рджреБрдИ рдмрдЯрдирд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫ, рдХреНрд▓рд┐рдХ рдЧрд░реНрджрд╛, рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдХреЛрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдбрд┐рдкреНрд▓реЛрдЗрдб рд░ рдкрд░реАрдХреНрд╖рдг рдЧрд░рд┐рдПрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирдорд╛ рдкрд░рд┐рдгрдд рд╣реБрдиреНрдЫ (рд╕рдмреИ рдХреБрд░рд╛ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдЕрдЭ рдЬрдЯрд┐рд▓ рдЫ, рддрд░ рд╣рд╛рдореА рд╕рдмреИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдмрд╛рдЯ рд╕рд╛рд░ рдЧрд░реНрджреИрдЫреМрдВ)ред

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

рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд╣рд╛рдореА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ рдЬреЗрдирдХрд┐рдиреНрд╕.


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

рдЙрджреНрджреЗрд╢реНрдп

рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЬреЗрдирдХрд┐рдиреНрд╕ рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬрд╕рд▓реЗ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рдЪрдпрди рдЧрд░рд┐рдПрдХреЛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕рдХреЛ рдирд┐рд░реНрдорд╛рдг рд░ (рд╡рд╛) рддреИрдирд╛рддреА рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫред

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

рдЗрдирдкреБрдЯ рдбрд╛рдЯрд╛

рд╣рд╛рдореАрд╕рдБрдЧ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдЗрдХреНрд░реЛ рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рд╕рдорд╛рд╡реЗрд╢ рднрдПрдХрд╛ рдзреЗрд░реИ рднрдгреНрдбрд╛рд░рд╣рд░реВ рдЫрдиреНред

╨Ю╨┐╤А╨╡╨┤╨╡╨╗╨╡╨╜╨╕╨╡ ╨┐╨░╤А╨░╨╝╨╡╤В╤А╨╛╨▓

рдирд┐рдореНрди рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╣рд╛рдореНрд░реЛ рдХрд╛рдордХреЛ рд▓рд╛рдЧрд┐ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрдкрд░реНрдЫ:

  1. рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕ рдХреЛрдб рднрдПрдХреЛ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрдХреЛ URL рдЬреБрди рдХрд╛рдо рдЪрд▓рд╛рдЙрдБрджрд╛ рд╣рд╛рдореАрд▓реЗ рдирд┐рд░реНрдорд╛рдг рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВред
  2. рдХрдорд┐рдЯрдХреЛ ID рдЬрд╕рдмрд╛рдЯ рдирд┐рд░реНрдорд╛рдг рд╣реБрдиреЗрдЫред

AS IS

рдпреЛ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдЧрд░реНрдиреЗ рд╕рдмреИрднрдиреНрджрд╛ рд╕рдЬрд┐рд▓реЛ рддрд░рд┐рдХрд╛ рд╕реНрдЯреНрд░рд┐рдЩ рдкреНрд░рдХрд╛рд░рдХрд╛ рджреБрдИ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБ рд╣реЛред

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

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

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

рдЬрд╕рд░реА рд╣реБрдиреБрдкрд░реНрджрдЫ

рдЕрдм рдпрд╕рдХреЛ рд╕рдмреИ рдлрд╛рдЗрджрд╛рд╣рд░реВ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрди рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рдЕрд░реНрдХреЛ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВред
рдкреНрд░рдХрд╛рд░ рдЪреНрд╡рд╛рдЗрд╕ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рд╕рд╛рде рдкрд╣рд┐рд▓реЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ, рджреЛрд╕реНрд░реЛ - рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд▓реНрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╕рдиреНрджрд░реНрдн рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ред рдЫрдиреЛрдЯ рдкреНрд░рдХрд╛рд░рдХреЛ рд╕рд╛рде рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдорд╛, рд╣рд╛рдореА рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдЫрдиреЛрдЯ рдлрд┐рд▓реНрдбрдорд╛ рд╣рд╛рдореНрд░рд╛ рдорд╛рдЗрдХреНрд░реЛ рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рдХреЛрдб рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХрд╛ рднрдгреНрдбрд╛рд░рд╣рд░реВрдХреЛ рдирд╛рдорд╣рд░реВ рдердкреНрдиреЗрдЫреМрдВред

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

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

рджреЛрд╕реНрд░реЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рдорд╛рдирд╣рд░реВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рднрд░рд┐рдиреЗрдЫ, рдкрд╣рд┐рд▓реЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд▓реЗ рдХреБрди рдорд╛рди рд▓рд┐рдиреНрдЫ (test1 рд╡рд╛ test2) рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫ, рдХрд┐рдирднрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рднрдгреНрдбрд╛рд░рдХреЛ рдЖрдлреНрдиреИ рдХрдорд┐рдЯрд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╣реБрдиреНрдЫред

рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд▓реНрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╕рдиреНрджрд░реНрдн рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рднрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рдореНрди рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рдЫрдиреН:

  1. рдирд╛рдо - рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдирд╛рдоред
  2. рд▓рд┐рдкрд┐ - рдХреЛрдб рдЬреБрди рдкреНрд░рддреНрдпреЗрдХ рдкрдЯрдХ рд╕рдиреНрджрд░реНрднрд┐рдд рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдлрд┐рд▓реНрдбрдмрд╛рдЯ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдБрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреЗрдЫ (рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдЬрдм рд╣рд╛рдореА test1 рд░ test2 рдмреАрдЪ рдЫрдиреМрдЯ рдЧрд░реНрдЫреМрдВ)ред
  3. рд╡рд┐рд╡рд░рдг - рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдгред
  4. рдЫрдиреЛрдЯ рдкреНрд░рдХрд╛рд░ - рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдлрд┐рд░реНрддрд╛ рд╡рд╕реНрддреБ рдХреЛ рдкреНрд░рдХрд╛рд░ (рд╣рд╛рдореНрд░реЛ рдорд╛рдорд▓рд╛ рдорд╛ рд╣рд╛рдореА html рдХреЛрдб рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдиреЗрдЫреМрдВ)ред
  5. рд╕рдиреНрджрд░реНрдн рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ - рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рдирд╛рдо, рдЬрдм рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреНрдЫ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗрдХреНрд╕рдирдмрд╛рдЯ рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреЗрдЫред

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

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

рдЪрдпрди рдЧрд░рд┐рдПрдХреЛ рднрдгреНрдбрд╛рд░рдмрд╛рдЯ рд╕рдмреИ рдХрдорд┐рдЯрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЧреНрд░реВрд╡реА рдХреЛрдб:

AUTH = "╨╗╨╛╨│╨╕╨╜ ╨╕ ╨┐╨░╤А╨╛╨╗╤М ╨▓ Base64"                           
GIT_URL = "url ╨┤╨╛ ╨▓╨░╤И╨╡╨╣ SCM (https://bitbucket.org/)"                       
PROJECT_NAME = "╨╕╨╝╤П ╨┐╤А╨╛╨╡╨║╤В╨╜╨╛╨╣ ╨╛╨▒╨╗╨░╤Б╤В╨╕, ╨│╨┤╨╡ ╨╜╨░╤Е╨╛╨┤╤П╤В╤Б╤П ╤А╨╡╨┐╨╛╨╖╨╕╤В╨╛╤А╨╕╨╕"

def htmlBuild() {
    html = """
            <html>
            <head>
            <meta charset="windows-1251">
            <style type="text/css">
            div.grayTable {
            text-align: left;
            border-collapse: collapse;
            }
            .divTable.grayTable .divTableCell, .divTable.grayTable .divTableHead {
            padding: 0px 3px;
            }
            .divTable.grayTable .divTableBody .divTableCell {
            font-size: 13px;
            }
            </style>
            </head>
            <body>
        """

    def commitOptions = ""
    getCommitsForMicroservice(MICROSERVICE_NAME).each {
        commitOptions += "<option style='font-style: italic' value='COMMIT=${it.getKey()}'>${it}</option>"
    }
    html += """<p style="display: inline-block;">
        <select id="commit_id" size="1" name="value">
            ${commitOptions}
        </select></p></div>"""

    html += """
            </div>
            </div>
            </div>
            </body>
            </html>
         """
    return html
}

def getCommitsForMicroservice(microserviceRepo) {
    def commits = [:]
    def endpoint = GIT_URL + "/rest/api/1.0/projects/${PROJECT_NAME}/repos/${microserviceRepo}/commits"
    def conn = new URL(endpoint).openConnection()
    conn.setRequestProperty("Authorization", "Basic ${AUTH}")
    def response = new groovy.json.JsonSlurper().parseText(conn.content.text)
    response.values.each {
        commits.put(it.displayId, it.message)
    }
    return commits
}

return htmlBuild()

рд╡рд┐рд╡рд░рдгрд╣рд░реВрдорд╛ рдирдЬрд╛рдЗрдХрди, рдпреЛ рдХреЛрдбрд▓реЗ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕ рдирд╛рдо (MICROSERVICE_NAME) рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫ рд░ рдЕрдиреБрд░реЛрдз рдкрдард╛рдЙрдБрдЫ рдмрд┐рдЯрдмрдХреЗрдЯ (рд╡рд┐рдзрд┐ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд╡рд╛рдХрд╛ рд▓рд╛рдЧрд┐ рдХрдорд┐рдЯрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН) рдпрд╕рдХреЛ API рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд░ рджрд┐рдЗрдПрдХреЛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИ рдХрдорд┐рдЯрд╣рд░реВрдХреЛ рдЖрдИрдбреА рд░ рдХрдорд┐рдЯ рд╕рдиреНрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫред
рдкрд╣рд┐рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдП рдЕрдиреБрд╕рд╛рд░, рдпреЛ рдХреЛрдбрд▓реЗ рдкреГрд╖реНрдардорд╛ рджреЗрдЦрд╛рдЗрдиреЗ html рдлрд░реНрдХрд╛рдЙрдиреБ рдкрд░реНрдЫ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрд╕рдБрдЧ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬреЗрдиреНрдХрд┐рдиреНрд╕рдорд╛, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА Bitbucket рдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рд╕рдмреИ рдорд╛рдирд╣рд░реВрд▓рд╛рдИ рд╕реВрдЪреАрдорд╛ рд▓рдкреЗрдЯреНрдЫреМрдВ рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЪрдпрди рдЧрд░реНрди рдердкреНрдЫреМрдВред

рд╕рдмреИ рдЪрд░рдгрд╣рд░реВ рдкреВрд░рд╛ рдЧрд░реЗрдкрдЫрд┐, рд╣рд╛рдореАрд▓реЗ рдпрд╕реНрддреЛ рд╕реБрдиреНрджрд░ рдкреГрд╖реНрда рдкрд╛рдЙрдиреБрдкрд░реНрджрдЫ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрд╕рдБрдЧ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН.

рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ test1 microservice рдЪрдпрди рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ:

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

рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ test2 microservice рдЪрдпрди рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ:

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

рдкреНрд░рддреНрдпреЗрдХ рдкрдЯрдХ url рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реЗрд░ рд░ рдЖрд╡рд╢реНрдпрдХ рдХрдорд┐рдЯ рдЖрдИрдбреА рдЦреЛрдЬреНрдиреБ рднрдиреНрджрд╛ рдпрд╕ рддрд░рд┐рдХрд╛рд▓реЗ рддрдкрд╛рдЗрдБрдХреЛ рдХрд╛рд░реНрдпрд╕рдБрдЧ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рдзреЗрд░реИ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реБрдиреЗрдЫ рднрдиреНрдиреЗ рдХреБрд░рд╛рдорд╛ рд╕рд╣рдордд рд╣реБрдиреБрд╣реЛрд╕реНред

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

PSS рдореИрд▓реЗ рдкрд╣рд┐рд▓реЗ рд▓реЗрдЦреЗ рдЬрд╕реНрддреИ, рдпрджрд┐ рдпреЛ рд▓реЗрдЦ рдЙрдкрдпреЛрдЧреА рдЫ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рдЕрд░реНрдХреЛ рдмрд╛рд░реЗрдорд╛ рд╣реБрдиреЗрдЫ рдХреЛрдб рдорд╛рд░реНрдлрдд рдЬреЗрдирдХрд┐рдиреНрд╕ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рдЧрддрд┐рд╢реАрд▓ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди.

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди