рд╣рд╛рдореА рдкреНрд▓рдЧрдЗрди, SMS рд╡рд╛ рджрд░реНрддрд╛ рдмрд┐рдирд╛ GKE рдорд╛ рдПрдХ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВред рдЬреЗрдиреНрдХрд┐рдиреНрд╕рдХреЛ рдЬреНрдпрд╛рдХреЗрдЯ рдореБрдирд┐ рдПрдХ рдЭрд▓рдХ рд╣реЗрд░реМрдВ

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

рдореИрд▓реЗ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдиреИ рдкрд░реНрдЫ, рдо рдзреЗрд░реИ рдЕрд▓реНрдЫреА рдЫреБ (рдХреЗ рдореИрд▓реЗ рдпреЛ рдкрд╣рд┐рд▓реЗ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реЗрди? рд╣реЛрдЗрди?), рд░ рдпреЛ рддрдереНрдпрд▓рд╛рдИ рджрд┐рдИрдпреЛ рдХрд┐ рдЯреЛрд▓реА рдиреЗрддреГрддреНрд╡рдХреЛ рдЬреЗрдирдХрд┐рдиреНрд╕рдорд╛ рдкрд╣реБрдБрдЪ рдЫ, рдЬрд╕рдорд╛ рд╣рд╛рдореАрд╕рдБрдЧ рд╕рдмреИ CI/CD рдЫ, рдореИрд▓реЗ рд╕реЛрдЪреЗ: рдЙрд╕рд▓рд╛рдИ рдпрд╕ рд░реВрдкрдорд╛ рддреИрдирд╛рдд рдЧрд░реНрди рджрд┐рдиреБрд╣реЛрд╕реНред рдЬрддрд┐ рдЙрд╕рд▓реЗ рдЪрд╛рд╣рдиреНрдЫ! рдорд▓рд╛рдИ рдПрдЙрдЯрд╛ рдардЯреНрдЯрд╛ рдпрд╛рдж рдЖрдпреЛ: рдорд╛рдирд┐рд╕рд▓рд╛рдИ рдорд╛рдЫрд╛ рджрд┐рдиреБрд╣реЛрд╕реН рд░ рдЙрд╕рд▓реЗ рдПрдХ рджрд┐рдирдХреЛ рд▓рд╛рдЧрд┐ рдЦрд╛рдиреЗрдЫ; рдПрдХ рд╡реНрдпрдХреНрддрд┐рд▓рд╛рдИ рдлреЗрдб рдХрд▓ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдЙрд╕рд▓рд╛рдИ рдЬреАрд╡рдирднрд░ рдлрд┐рдб рдЧрд░рд┐рдиреЗрдЫред рдЕрдирд┐ рдЧрдпреЛ рдХрд╛рдордорд╛ рдЪрд╛рд▓рд╣рд░реВ рдЦреЗрд▓реНрдиреБрд╣реЛрд╕реН, рдЬрд╕рд▓реЗ рдХреБрдмреЗрд░рдорд╛ рдХреБрдиреИ рдкрдирд┐ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд░реНрдорд┐рдд рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдорд╛рд╡реЗрд╢ рднрдПрдХреЛ рдХрдиреНрдЯреЗрдирд░ рддреИрдирд╛рде рдЧрд░реНрди рд░ рдпрд╕рдорд╛ рдХреБрдиреИ рдкрдирд┐ рдорд╛рдирд╣рд░реВ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреЗрдЫред ENV (рдореЗрд░реЛ рд╣рдЬреБрд░рдмреБрд╡рд╛, рдПрдХ рдлрд┐рд▓реЛрд▓реЛрдЬрд┐рд╕реНрдЯ, рд╡рд┐рдЧрддрдорд╛ рдПрдХ рдЕрдВрдЧреНрд░реЗрдЬреА рд╢рд┐рдХреНрд╖рдХ, рдЕрдм рдЙрд╣рд╛рдБрдХреЛ рдордиреНрджрд┐рд░рдорд╛ рдЖрдлреНрдиреЛ рдФрдВрд▓рд╛ рдШреБрдорд╛рдЙрдиреБрд╣реБрдиреЗ рдерд┐рдпреЛ рд░ рдпреЛ рд╡рд╛рдХреНрдп рдкрдвреЗрдкрдЫрд┐ рдорд▓рд╛рдИ рдзреЗрд░реИ рднрд╛рд╡реБрдХ рд░реВрдкрдорд╛ рд╣реЗрд░реНрдиреБрд╣реБрдиреНрдЫ)ред

рддреНрдпрд╕реЛрднрдП, рдпрд╕ рдиреЛрдЯрдорд╛ рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ рдмрддрд╛рдЙрдиреЗрдЫреБ рдХрд┐ рдореИрд▓реЗ рдХрд╕рд░реА рд╕рд┐рдХреЗрдВ:

  1. рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рдЬреЗрдирдХрд┐рдиреНрд╕рдорд╛ рдЬрд╛рдЧрд┐рд░рдмрд╛рдЯ рд╡рд╛ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╣рд░реВрдмрд╛рдЯ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН;
  2. рдЬреЗрдирдХрд┐рдиреНрд╕ рдПрдЬреЗрдиреНрдЯ рд╕реНрдерд╛рдкрдирд╛ рднрдПрдХреЛ рдиреЛрдбрдмрд╛рдЯ рдХреНрд▓рд╛рдЙрдб рдХрдиреНрд╕реЛрд▓ (рдХреНрд▓рд╛рдЙрдб рд╢реЗрд▓) рдорд╛ рдЬрдбрд╛рди рдЧрд░реНрдиреБрд╣реЛрд╕реН;
  3. Google Kubernetes рдЗрдиреНрдЬрд┐рдирдорд╛ рдХрд╛рд░реНрдпрднрд╛рд░ рдбрд┐рдкреНрд▓реЛрдп рдЧрд░реНрдиреБрд╣реЛрд╕реНред


рд╡рд╛рд╕реНрддрд╡рдорд╛, рдо, рдкрдХреНрдХреИ рдкрдирд┐, рдХреЗрд╣рд┐ рд╣рджрд╕рдореНрдо рдЕрд╕реНрдкрд╖реНрдЯ рдЫреБред рдпреЛ рдорд╛рдирд┐рдиреНрдЫ рдХрд┐ рддрдкрд╛рдИрдВрд╕рдБрдЧ Google рдХреНрд▓рд╛рдЙрдбрдорд╛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░рдХреЛ рдХрдореНрддрд┐рдорд╛ рдЕрдВрд╢ рдЫ, рд░, рддреНрдпрд╕реИрд▓реЗ, рддрдкрд╛рдИрдВ рдпрд╕рдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╣реБрдиреБрд╣реБрдиреНрдЫ рд░, рдЕрд╡рд╢реНрдп рдкрдирд┐, рддрдкрд╛рдИрдВрд╕рдБрдЧ GCP рдЦрд╛рддрд╛ рдЫред рддрд░ рдпреЛ рдиреЛрдЯрдХреЛ рдмрд╛рд░реЗрдорд╛ рддреНрдпреЛ рд╣реЛрдЗрдиред

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

рддреНрдпрд╛рдЧ: 1. рдиреЛрдЯ "рдореЗрд░реЛ рд▓рд╛рдЧрд┐" рд▓реЗрдЦрд┐рдПрдХреЛ рдерд┐рдпреЛ, рднреВрдорд┐рдХрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЙрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рд▓рд╛рдЧреВ рд╣реБрдБрджреИрдиред рдо рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрдорд╛ "рдпрд╕ рддрд░рд┐рдХрд╛рд▓реЗ рдЧрд░реНрди рд░рд╛рдореНрд░реЛ рд╣реБрдиреЗ рдерд┐рдпреЛ" рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдкрдвреНрди рдкрд╛рдЙрдБрджрд╛ рдЦреБрд╕реА рдЫреБред
2. рдпрджрд┐ рдиреЛрдЯрдХреЛ рд▓рд╛рдЧреВ рдЧрд░рд┐рдПрдХреЛ рднрд╛рдЧрд▓рд╛рдИ рдиреБрди рдорд╛рдирд┐рдиреНрдЫ рднрдиреЗ, рдореЗрд░рд╛ рд╕рдмреИ рдЕрдШрд┐рд▓реНрд▓рд╛ рдиреЛрдЯрд╣рд░реВ рдЬрд╕реНрддреИ, рдпреЛ рдПрдХ рдХрдордЬреЛрд░ рдиреБрди рд╕рдорд╛рдзрд╛рди рд╣реЛред

Jenkins рдорд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рдХрд╛рдо рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрджреИ

рдо рддрдкрд╛рдИрдВрдХреЛ рдкреНрд░рд╢реНрдирдХреЛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдЧрд░реНрдЫреБ: рдЧрддрд┐рд╢реАрд▓ рдХрд╛рд░реНрдп рдЕрджреНрдпрд╛рд╡рдзрд┐рдХрд▓реЗ рдпрд╕рдХреЛ рд╕рд╛рде рдХреЗ рдЧрд░реНрдиреБрдкрд░реНрджрдЫ? рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рд╕реНрдЯреНрд░рд┐рдЩ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рдорд╛рди рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рддрдкрд╛рдИрдВ рдЬрд╛рдиреБрд╣реБрдиреНрдЫ!

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

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

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

рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдЫреИрдирдиреНред рджреБрдИ рдХреБрд░рд╛ рддреБрд░реБрдиреНрддреИ рджрд┐рдорд╛рдЧрдорд╛ рдЖрдпреЛ:

  • рд░рд┐рдореЛрдЯ рдкрд╣реБрдБрдЪ API рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬреБрди рдЬреЗрдирдХрд┐рдиреНрд╕рд▓реЗ рдЖрдлреНрдирд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░реНрджрдЫ;
  • рд░рд┐рдореЛрдЯ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдлреЛрд▓реНрдбрд░рдХреЛ рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдЕрдиреБрд░реЛрдз рдЧрд░реНрдиреБрд╣реЛрд╕реН (рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдпреЛ JFrog рдЖрд░реНрдЯрд┐рдлреНрдпрд╛рдХреНрдЯреНрд░реА рд╣реЛ, рдЬреБрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫреИрди)ред

рдЬреЗрдирдХрд┐рдиреНрд╕ рд░рд┐рдореЛрдЯ рдкрд╣реБрдБрдЪ API

рд╕реНрдерд╛рдкрд┐рдд рдЙрддреНрдХреГрд╖реНрдЯ рдкрд░рдореНрдкрд░рд╛ рдЕрдиреБрд╕рд╛рд░, рдо рд▓рд╛рдореЛ рд╡реНрдпрд╛рдЦреНрдпрд╛рдмрд╛рдЯ рдмрдЪреНрди рд░реБрдЪрд╛рдЙрдБрдЫреБред
рдо рдЖрдлреИрд▓рд╛рдИ рдкрд╣рд┐рд▓реЛ рдЕрдиреБрдЪреНрдЫреЗрджрдХреЛ рдПрдХ рдЯреБрдХреНрд░рд╛рдХреЛ рдирд┐: рд╢реБрд▓реНрдХ рдЕрдиреБрд╡рд╛рдж рдорд╛рддреНрд░ рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫреБ API рдХрд╛рдЧрдЬрд╛рддрдХреЛ рдкрд╣рд┐рд▓реЛ рдкреГрд╖реНрда:

рдЬреЗрдирдХрд┐рдиреНрд╕рд▓реЗ рдпрд╕рдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдорд╛ рд░рд┐рдореЛрдЯ рдореЗрд╕рд┐рди-рдкрдвреНрдиреЗ рдкрд╣реБрдБрдЪрдХреЛ рд▓рд╛рдЧрд┐ API рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред <...> рд░рд┐рдореЛрдЯ рдкрд╣реБрдБрдЪ REST-рдЬрд╕реНрддреЛ рд╢реИрд▓реАрдорд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░рд┐рдПрдХреЛ рдЫред рдпрд╕рдХреЛ рдорддрд▓рдм рд╕рдмреИ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВрдорд╛ рдХреБрдиреИ рдПрдХрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдиреНрджреБ рдЫреИрди, рддрд░ рдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛рдорд╛ ".../api/", рдХрд╣рд╛рдБ "..." рднрдиреЗрдХреЛ рд╡рд╕реНрддреБ рдЬрд╕рдорд╛ API рдХреНрд╖рдорддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫрдиреНред

рдЕрд░реНрдХреЛ рд╢рдмреНрджрдорд╛, рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рд╣рд╛рд▓рдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛рд░реНрдп рдЙрдкрд▓рдмреНрдз рдЫ рднрдиреЗ http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕ рдХрд╛рд░реНрдпрдХреЛ рд▓рд╛рдЧрд┐ API рд╡реНрд╣рд┐рд╕рд▓рд╣рд░реВ рдЙрдкрд▓рдмреНрдз рдЫрдиреН http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

рдЕрд░реНрдХреЛ, рд╣рд╛рдореАрд╕рдБрдЧ рдХреБрди рдлрд╛рд░рдордорд╛ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рдЫрдиреМрдЯ рдЫред XML рдорд╛ рдлреЛрдХрд╕ рдЧрд░реМрдВ, рдХрд┐рдирдХрд┐ API рд▓реЗ рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдорд╛рддреНрд░ рдлрд┐рд▓реНрдЯрд░ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

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

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]

рдХреЗ рдпреЛ рдХрд╛рдо рдЧрд░реНрдиреБрднрдпреЛ?

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

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result!='SUCCESS']

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

рдард┐рдХ рдЫ, рдХреЗрд╡рд▓ рд░рдорд╛рдЗрд▓реЛрдХреЛ рд▓рд╛рдЧрд┐, рдлрд┐рд▓реНрдЯрд░рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдзреЛрдХрд╛ рджрд┐рдПрдХреЛ рдЫреИрди рднрдиреЗрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реМрдВ (рдлрд┐рд▓реНрдЯрд░рд╣рд░реВ рдХрд╣рд┐рд▓реНрдпреИ рдЭреВрдЯ рдмреЛрд▓реНрджреИрдирдиреН!) рд░ "рдЕрд╕рдлрд▓" рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреБрд╣реЛрд╕реН:

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result='SUCCESS']

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

рд░рд┐рдореЛрдЯ рд╕рд░реНрднрд░рдорд╛ рдлреЛрд▓реНрдбрд░рдмрд╛рдЯ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдХреЛ рд╕реВрдЪреА

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

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

curl -H "X-JFrog-Art-Api:VeryLongAPIKey" -s http://arts.myre.po/artifactory/awesomeapp/ | sed 's/a href=//' | grep "$(date +%b)-$(date +%Y)|$(date +%b --date='-1 month')-$(date +%Y)" | awk '{print $1}' | grep -oP '>K[^/]+' )

Jenkins рдорд╛ рдХрд╛рдо рд░ рдХрд╛рдо рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ

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

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛рд░реНрдп рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реН рд░ рдзреЗрд░реИ рддрд▓ рд╕реНрдХреНрд░реЛрд▓ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдмрдЯрдирд╣рд░реВрдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН: рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг рдердкреНрдиреБрд╣реЛрд╕реН -> рд╕рд╢рд░реНрдд рдЪрд░рдг (рдПрдХрд▓)ред рдЪрд░рдг рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛, рд╕рд░реНрдд рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╣рд╛рд▓рдХреЛ рдирд┐рд░реНрдорд╛рдг рд╕реНрдерд┐рддрд┐, рдорд╛рди рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╕рдлрд▓рддрд╛, рд╕рдлрд▓ рднрдПрдорд╛ рдЧрд░реНрдиреБ рдкрд░реНрдиреЗ рдХрд╛рд░реНрдп рд╢реЗрд▓ рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН.

рд░ рдЕрдм рд░рдорд╛рдИрд▓реЛ рднрд╛рдЧред рдЬреЗрдирдХрд┐рдиреНрд╕рд▓реЗ рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рдХрд╛рд░реНрдп рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирд╣рд░реВ рднрдгреНрдбрд╛рд░ рдЧрд░реНрджрдЫред XML рдврд╛рдБрдЪрд╛рдорд╛ред рдмрд╛рдЯреЛрдорд╛ http://╨┐╤Г╤В╤М-╨┤╨╛-╨╖╨░╨┤╨░╨╜╨╕╤П/config.xml рддрджрдиреБрд╕рд╛рд░, рддрдкрд╛рдЗрдБ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдпрд╕рд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рд░реВрдкрдорд╛ рд╕рдореНрдкрд╛рджрди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рддрдкрд╛рдЗрдБрд▓реЗ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрднрдПрдХреЛ рдард╛рдЙрдБрдорд╛ рдпрд╕рд▓рд╛рдИ рдлрд┐рд░реНрддрд╛ рд░рд╛рдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рд╕рдореНрдЭрдиреБрд╣реЛрд╕реН, рд╣рд╛рдореА рдорд╛рдерд┐ рд╕рд╣рдордд рдЫреМрдВ рдХрд┐ рд╣рд╛рдореА рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдХреЛ рд╕реВрдЪреАрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВ BUILD_VERSION?

рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реМрдВ рд░ рдпрд╕рд▓рд╛рдИ рднрд┐рддреНрд░ рд╣реЗрд░реМрдВред рдХреЗрд╡рд▓ рдпреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рдХрд┐ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдард╛рдЙрдБ рдорд╛ рдЫ рд░ рдЗрдЪреНрдЫрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЛред

рд╕реНрдкреЛрдЗрд▓рд░ рдЕрдиреНрддрд░реНрдЧрдд рд╕реНрдХреНрд░рд┐рдирд╕рдЯред

рддрдкрд╛рдИрдВрдХреЛ config.xml рдЦрдгреНрдб рд╕рдорд╛рди рджреЗрдЦрд┐рдиреБ рдкрд░реНрдЫред рдЫрдиреЛрдЯ рддрддреНрд╡рдХреЛ рд╕рд╛рдордЧреНрд░реА рдЕрдЭреИ рд╣рд░рд╛рдЗрд░рд╣реЗрдХреЛ рдмрд╛рд╣реЗрдХ
рд╣рд╛рдореА рдкреНрд▓рдЧрдЗрди, SMS рд╡рд╛ рджрд░реНрддрд╛ рдмрд┐рдирд╛ GKE рдорд╛ рдПрдХ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВред рдЬреЗрдиреНрдХрд┐рдиреНрд╕рдХреЛ рдЬреНрдпрд╛рдХреЗрдЯ рдореБрдирд┐ рдПрдХ рдЭрд▓рдХ рд╣реЗрд░реМрдВ

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

рд╕реНрдкреЛрдЗрд▓рд░ рдЕрдиреНрддрд░реНрдЧрдд, рдо рдХреЛрдб рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрджрдЫреБ рдЬрд╕рд▓реЗ рдорд╛рдерд┐рдХреЛ рдЕрдиреБрдХреНрд░рдорд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрджрдЫред

рд░рд┐рдореЛрдЯ рд╕рд░реНрднрд░рдорд╛ рдлреЛрд▓реНрдбрд░рдмрд╛рдЯ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдХреЛ рд╕реВрдЪреА рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН

#!/bin/bash
############## ╨б╨║╨░╤З╨╕╨▓╨░╨╡╨╝ ╨║╨╛╨╜╤Д╨╕╨│
curl -X GET -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml -o appConfig.xml

############## ╨г╨┤╨░╨╗╤П╨╡╨╝ ╨╕ ╨╖╨░╨╜╨╛╨▓╨╛ ╤Б╨╛╨╖╨┤╨░╨╡╨╝ xml-╤Н╨╗╨╡╨╝╨╡╨╜╤В ╨┤╨╗╤П ╤Б╨┐╨╕╤Б╨║╨░ ╨▓╨╡╤А╤Б╨╕╨╣
xmlstarlet ed --inplace -d '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' appConfig.xml

xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]' --type elem -n a appConfig.xml

xmlstarlet ed --inplace --insert '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a' --type attr -n class -v string-array appConfig.xml

############## ╨з╨╕╤В╨░╨╡╨╝ ╨▓ ╨╝╨░╤Б╤Б╨╕╨▓ ╤Б╨┐╨╕╤Б╨╛╨║ ╨▓╨╡╤А╤Б╨╕╨╣ ╨╕╨╖ ╤А╨╡╨┐╨╛╨╖╨╕╤В╨╛╤А╨╕╤П
readarray -t vers < <( curl -H "X-JFrog-Art-Api:Api:VeryLongAPIKey" -s http://arts.myre.po/artifactory/awesomeapp/ | sed 's/a href=//' | grep "$(date +%b)-$(date +%Y)|$(date +%b --date='-1 month')-$(date +%Y)" | awk '{print $1}' | grep -oP '>K[^/]+' )

############## ╨Я╨╕╤И╨╡╨╝ ╨╝╨░╤Б╤Б╨╕╨▓ ╤Н╨╗╨╡╨╝╨╡╨╜╤В ╨╖╨░ ╤Н╨╗╨╡╨╝╨╡╨╜╤В╨╛╨╝ ╨▓ ╨║╨╛╨╜╤Д╨╕╨│
printf '%sn' "${vers[@]}" | sort -r | 
                while IFS= read -r line
                do
                    xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' --type elem -n string -v "$line" appConfig.xml
                done

############## ╨Ъ╨╗╨░╨┤╨╡╨╝ ╨║╨╛╨╜╤Д╨╕╨│ ╨▓╨╖╨░╨┤
curl -X POST -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml --data-binary @appConfig.xml

############## ╨Я╤А╨╕╨▓╨╛╨┤╨╕╨╝ ╤А╨░╨▒╨╛╤З╨╡╨╡ ╨╝╨╡╤Б╤В╨╛ ╨▓ ╨┐╨╛╤А╤П╨┤╨╛╨║
rm -f appConfig.xml

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

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

#!/bin/bash
############## ╨б╨║╨░╤З╨╕╨▓╨░╨╡╨╝ ╨║╨╛╨╜╤Д╨╕╨│
curl -X GET -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml -o appConfig.xml

############## ╨г╨┤╨░╨╗╤П╨╡╨╝ ╨╕ ╨╖╨░╨╜╨╛╨▓╨╛ ╤Б╨╛╨╖╨┤╨░╨╡╨╝ xml-╤Н╨╗╨╡╨╝╨╡╨╜╤В ╨┤╨╗╤П ╤Б╨┐╨╕╤Б╨║╨░ ╨▓╨╡╤А╤Б╨╕╨╣
xmlstarlet ed --inplace -d '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' appConfig.xml

xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]' --type elem -n a appConfig.xml

xmlstarlet ed --inplace --insert '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a' --type attr -n class -v string-array appConfig.xml

############## ╨Я╨╕╤И╨╡╨╝ ╨▓ ╤Д╨░╨╣╨╗ ╤Б╨┐╨╕╤Б╨╛╨║ ╨▓╨╡╤А╤Б╨╕╨╣ ╨╕╨╖ Jenkins
curl -g -X GET -u username:apiKey 'http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result!=%22SUCCESS%22]&pretty=true' -o builds.xml

############## ╨з╨╕╤В╨░╨╡╨╝ ╨▓ ╨╝╨░╤Б╤Б╨╕╨▓ ╤Б╨┐╨╕╤Б╨╛╨║ ╨▓╨╡╤А╤Б╨╕╨╣ ╨╕╨╖ XML
readarray vers < <(xmlstarlet sel -t -v "freeStyleProject/allBuild/displayName" builds.xml | awk -F":" '{print $2}')

############## ╨Я╨╕╤И╨╡╨╝ ╨╝╨░╤Б╤Б╨╕╨▓ ╤Н╨╗╨╡╨╝╨╡╨╜╤В ╨╖╨░ ╤Н╨╗╨╡╨╝╨╡╨╜╤В╨╛╨╝ ╨▓ ╨║╨╛╨╜╤Д╨╕╨│
printf '%sn' "${vers[@]}" | sort -r | 
                while IFS= read -r line
                do
                    xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' --type elem -n string -v "$line" appConfig.xml
                done

############## ╨Ъ╨╗╨░╨┤╨╡╨╝ ╨║╨╛╨╜╤Д╨╕╨│ ╨▓╨╖╨░╨┤
curl -X POST -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml --data-binary @appConfig.xml

############## ╨Я╤А╨╕╨▓╨╛╨┤╨╕╨╝ ╤А╨░╨▒╨╛╤З╨╡╨╡ ╨╝╨╡╤Б╤В╨╛ ╨▓ ╨┐╨╛╤А╤П╨┤╨╛╨║
rm -f appConfig.xml

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

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

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

рдХреНрд▓рд╛рдЙрдб рд╢реЗрд▓рдорд╛ рдЬрдбрд╛рди рдЧрд░реНрджреИ

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

рдореИрд▓реЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВ: рдареАрдХ рдЫ, рдХрд┐рдирдХрд┐ рдХреНрд▓рд╛рдЙрдб рдХрдиреНрд╕реЛрд▓рдорд╛ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ "рдмрд╛рдХрд╕ рдмрд╛рд╣рд┐рд░" рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рддреНрдпрд╕реЛрднрдП рдХрд┐рди рдЪрд┐рдиреНрддрд╛ рдЧрд░реНрдиреЗ? рдпрд╕рд▓рд╛рдИ рд╕рдлрд╛ рд░рд╛рдЦреНрдиреБрд╣реЛрд╕реН, рд╣реИрди? рдо рдХреНрд▓рд╛рдЙрдб рдХрдиреНрд╕реЛрд▓рдорд╛ рдЬреЗрдирдХрд┐рдиреНрд╕ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рддреНрдпрд╣рд╛рдБрдмрд╛рдЯ рдХреНрдпреБрдмрд░рдорд╛ рд▓рдиреНрдЪ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБред рдпрд╕рдмрд╛рд╣реЗрдХ, Google рд╕рдБрдЧ рдпрд╕рдХреЛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рднрд┐рддреНрд░ рдзреЗрд░реИ рдзрдиреА рдЪреНрдпрд╛рдирд▓рд╣рд░реВ рдЫрдиреН, рдЬрд╕рд▓реЗ рддреИрдирд╛рддреАрдХреЛ рдЧрддрд┐рдорд╛ рд▓рд╛рднрдХрд╛рд░реА рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдиреЗрдЫред

рдХреНрд▓рд╛рдЙрдб рдХрдиреНрд╕реЛрд▓рдорд╛ рдЬрдбрд╛рди рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓рд╛рдИ рджреБрдИ рдЪреАрдЬрд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫ: gCloud рд░ рдкрд╣реБрдБрдЪ рдЕрдзрд┐рдХрд╛рд░ рдЧреБрдЧрд▓ рдХреНрд▓рд╛рдЙрдб рдПрдкреАрдЖрдИ VM рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ рдЬрд╕рд╕рдБрдЧ рдпреЛ рд╕рдорд╛рди рдЬрдбрд╛рди рдЧрд░рд┐рдиреЗрдЫред

рдЬреЛ рдЧреБрдЧрд▓ рдХреНрд▓рд╛рдЙрдбрдмрд╛рдЯ рдЬрдбрд╛рди рдЧрд░реНрди рдпреЛрдЬрдирд╛ рдмрдирд╛рдЙрдБрджреИрдирдиреН
Google рд▓реЗ рдЖрдлреНрдирд╛ рд╕реЗрд╡рд╛рд╣рд░реВрдорд╛ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛рд▓рд╛рдИ рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдпрд╕рд▓реЗ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдХрдлреА рдореЗрд╕рд┐рдирдмрд╛рдЯ рдкрдирд┐ рдХрдиреНрд╕реЛрд▓рдорд╛ рдЬрдбрд╛рди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫ, рдпрджрд┐ рдпреЛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ *nix рд░ рдХрдиреНрд╕реЛрд▓ рдЖрдлреИрдорд╛ рдЫред

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

рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреЗ рд╕рдмреИрднрдиреНрджрд╛ рд╕рдЬрд┐рд▓реЛ рддрд░рд┐рдХрд╛ рд╡реЗрдм рдЗрдиреНрдЯрд░рдлреЗрд╕ рдорд╛рд░реНрдлрдд рд╣реЛред

  1. VM рдЙрджрд╛рд╣рд░рдг рд░реЛрдХреНрдиреБрд╣реЛрд╕реН рдЬрд╕рдмрд╛рдЯ рддрдкрд╛рдЗрдБ рдкрдЫрд┐ рдХреНрд▓рд╛рдЙрдб рдХрдиреНрд╕реЛрд▓рдорд╛ рдЬрдбрд╛рди рд╣реБрдиреБрд╣реБрдиреЗрдЫред
  2. рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╡рд░рдг рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реН рд░ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╕рдВрд╢реЛрдзрди.
  3. рдкреГрд╖реНрдардХреЛ рдзреЗрд░реИ рддрд▓, рдЙрджрд╛рд╣рд░рдг рдкрд╣реБрдБрдЪ рджрд╛рдпрд░рд╛ рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╕рдмреИ рдХреНрд▓рд╛рдЙрдб API рдорд╛ рдкреВрд░реНрдг рдкрд╣реБрдБрдЪ.

    рд╕реНрдХреНрд░реАрдирд╢рдЯ
    рд╣рд╛рдореА рдкреНрд▓рдЧрдЗрди, SMS рд╡рд╛ рджрд░реНрддрд╛ рдмрд┐рдирд╛ GKE рдорд╛ рдПрдХ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВред рдЬреЗрдиреНрдХрд┐рдиреНрд╕рдХреЛ рдЬреНрдпрд╛рдХреЗрдЯ рдореБрдирд┐ рдПрдХ рдЭрд▓рдХ рд╣реЗрд░реМрдВ

  4. рддрдкрд╛рдИрдВрдХреЛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдмрдЪрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдЙрджрд╛рд╣рд░рдг рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдПрдХрдкрдЯрдХ VM рд▓реЗ рд▓реЛрдб рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рдпрд╕рд▓рд╛рдИ SSH рдорд╛рд░реНрдлрдд рдЬрдбрд╛рди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдЬрдбрд╛рди рддреНрд░реБрдЯрд┐ рдмрд┐рдирд╛ рдиреИ рднрдПрдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

gcloud alpha cloud-shell ssh

рд╕рдлрд▓ рдЬрдбрд╛рди рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ
рд╣рд╛рдореА рдкреНрд▓рдЧрдЗрди, SMS рд╡рд╛ рджрд░реНрддрд╛ рдмрд┐рдирд╛ GKE рдорд╛ рдПрдХ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВред рдЬреЗрдиреНрдХрд┐рдиреНрд╕рдХреЛ рдЬреНрдпрд╛рдХреЗрдЯ рдореБрдирд┐ рдПрдХ рдЭрд▓рдХ рд╣реЗрд░реМрдВ

GKE рдорд╛ рддреИрдирд╛рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН

рд╣рд╛рдореА рдкреВрд░реНрдг рд░реВрдкрдорд╛ IaC (рдХреЛрдбрдХреЛ рд░реВрдкрдорд╛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░) рдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрди рд╣рд░реЗрдХ рд╕рдореНрднрд╛рд╡рд┐рдд рддрд░рд┐рдХрд╛рдорд╛ рдкреНрд░рдпрд╛рд╕ рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫреМрдВ, рд╣рд╛рдореНрд░рд╛ рдбрдХрд░ рдлрд╛рдЗрд▓рд╣рд░реВ Git рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреНред рдпреЛ рдПрдХрд╛рддрд┐рд░ рдЫред рд░ kubernetes рдорд╛ рддреИрдирд╛рддреА yaml рдлрд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЬреБрди рдпреЛ рдХрд╛рд░реНрдп рджреНрд╡рд╛рд░рд╛ рдорд╛рддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдЬреБрди рдЖрдлреИ рдкрдирд┐ рдХреЛрдб рдЬрд╕реНрддреИ рд╣реЛред рдпреЛ рдЕрд░реНрдХреЛ рддрд░реНрдлрдмрд╛рдЯ рд╣реЛред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдореЗрд░реЛ рдорддрд▓рдм, рдпреЛрдЬрдирд╛ рдпреЛ рд╣реЛ:

  1. рд╣рд╛рдореА рдЪрд░рдХреЛ рдорд╛рди рд▓рд┐рдиреНрдЫреМрдВ BUILD_VERSION рд░, рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдкрдорд╛, рдЪрд░рд╣рд░реВрдХреЛ рдорд╛рдирд╣рд░реВ рдЬреБрди рдорд╛рд░реНрдлрдд рдкрд╛рд░рд┐рдд рд╣реБрдиреЗрдЫ ENV.
  2. Git рдмрд╛рдЯ dockerfile рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  3. рдкрд░рд┐рдирд┐рдпреЛрдЬрдирдХреЛ рд▓рд╛рдЧрд┐ yaml рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  4. рд╣рд╛рдореА рдпреА рджреБрд╡реИ рдлрд╛рдЗрд▓рд╣рд░реВ scp рдорд╛рд░реНрдлрдд рдХреНрд▓рд╛рдЙрдб рдХрдиреНрд╕реЛрд▓рдорд╛ рдЕрдкрд▓реЛрдб рдЧрд░реНрдЫреМрдВред
  5. рд╣рд╛рдореА рддреНрдпрд╣рд╛рдБ рдХрдиреНрдЯреЗрдирд░ рдмрдирд╛рдЙрдБрдЫреМрдВ рд░ рдпрд╕рд▓рд╛рдИ рдХрдиреНрдЯреЗрдирд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдорд╛ рдзрдХреЗрд▓реНрдЫреМрдВ
  6. рд╣рд╛рдореА рдХреНрдпреВрдмрд░рдорд╛ рд▓реЛрдб рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдлрд╛рдЗрд▓ рд▓рд╛рдЧреВ рдЧрд░реНрдЫреМрдВред

рдердк рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрдиреМрдВред рдПрдХрдкрдЯрдХ рд╣рд╛рдореАрд▓реЗ рдХреБрд░рд╛ рдЧрд░реНрди рдерд╛рд▓реНрдпреМрдВ ENV, рддреНрдпрд╕рдкрдЫрд┐ рдорд╛рдиреМрдВ рд╣рд╛рдореАрд▓реЗ рджреБрдИ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рдорд╛рдирд╣рд░реВ рдкрд╛рд╕ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ: PARAM1 ╨╕ PARAM2ред рд╣рд╛рдореА рддреИрдирд╛рддреАрдХрд╛ рд▓рд╛рдЧрд┐ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдХрд╛рд░реНрдп рдердкреНрдЫреМрдВ, рдЯрд╛рдЗрдк рдЧрд░реНрдиреБрд╣реЛрд╕реН - рд╕реНрдЯреНрд░рд┐рдЩ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░.

рд╕реНрдХреНрд░реАрдирд╢рдЯ
рд╣рд╛рдореА рдкреНрд▓рдЧрдЗрди, SMS рд╡рд╛ рджрд░реНрддрд╛ рдмрд┐рдирд╛ GKE рдорд╛ рдПрдХ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВред рдЬреЗрдиреНрдХрд┐рдиреНрд╕рдХреЛ рдЬреНрдпрд╛рдХреЗрдЯ рдореБрдирд┐ рдПрдХ рдЭрд▓рдХ рд╣реЗрд░реМрдВ

рд╣рд╛рдореА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рдирдХреЛ рд╕рд╛рде yaml рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗрдЫреМрдВ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ рдлрд╛рдЗрд▓ рдЧрд░реНрдиред рдпреЛ рдорд╛рдирд┐рдиреНрдЫ, рдЕрд╡рд╢реНрдп рдкрдирд┐, рддрдкрд╛рдЗрдБ рддрдкрд╛рдЗрдБрдХреЛ рдбрдХрд░рдлрд╛рдЗрд▓ рдорд╛ рдЫ PARAM1 ╨╕ PARAM2рд▓реЛрдб рдирд╛рдо рд╣реБрдиреЗрдЫ рдЕрджреНрднреБрдд рдПрдк, рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд╕рд╛рде рднреЗрд▓рд╛ рдЧрд░рд┐рдПрдХреЛ рдХрдиреНрдЯреЗрдирд░ рднрд┐рддреНрд░ рдЫ рдХрдиреНрдЯреЗрдирд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдмрд╛рдЯреЛрдорд╛ gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONрдХрд╣рд╛рдБ $BUILD_VERSION рднрд░реНрдЦрд░реИ рдбреНрд░рдк-рдбрд╛рдЙрди рд╕реВрдЪреАрдмрд╛рдЯ рдЪрдпрди рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред

рдЯреЛрд▓реА рд╕реВрдЪреАрдХрд░рдг

touch deploy.yaml
echo "apiVersion: apps/v1" >> deploy.yaml
echo "kind: Deployment" >> deploy.yaml
echo "metadata:" >> deploy.yaml
echo "  name: awesomeapp" >> deploy.yaml
echo "spec:" >> deploy.yaml
echo "  replicas: 1" >> deploy.yaml
echo "  selector:" >> deploy.yaml
echo "    matchLabels:" >> deploy.yaml
echo "      run: awesomeapp" >> deploy.yaml
echo "  template:" >> deploy.yaml
echo "    metadata:" >> deploy.yaml
echo "      labels:" >> deploy.yaml
echo "        run: awesomeapp" >> deploy.yaml
echo "    spec:" >> deploy.yaml
echo "      containers:" >> deploy.yaml
echo "      - name: awesomeapp" >> deploy.yaml
echo "        image: gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION:latest" >> deploy.yaml
echo "        env:" >> deploy.yaml
echo "        - name: PARAM1" >> deploy.yaml
echo "          value: $PARAM1" >> deploy.yaml
echo "        - name: PARAM2" >> deploy.yaml
echo "          value: $PARAM2" >> deploy.yaml

рдЬреЗрдирдХрд┐рдиреНрд╕ рдПрдЬреЗрдиреНрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЬрдбрд╛рди рдкрдЫрд┐ gcloud рдЕрд▓реНрдлрд╛ рдХреНрд▓рд╛рдЙрдб-рд╢реЗрд▓ ssh рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореЛрдб рдЙрдкрд▓рдмреНрдз рдЫреИрди, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХреНрд▓рд╛рдЙрдб рдХрдиреНрд╕реЛрд▓рдорд╛ рдЖрджреЗрд╢рд╣рд░реВ рдкрдард╛рдЙрдБрдЫреМрдВ --рдЖрджреЗрд╢.

рд╣рд╛рдореА рдкреБрд░рд╛рдиреЛ рдбрдХрд░рдлрд╛рдЗрд▓рдмрд╛рдЯ рдХреНрд▓рд╛рдЙрдб рдХрдиреНрд╕реЛрд▓рдорд╛ рдЧреГрд╣ рдлреЛрд▓реНрдбрд░ рд╕рдлрд╛ рдЧрд░реНрдЫреМрдВ:

gcloud alpha cloud-shell ssh --command="rm -f Dockerfile"

рднрд░реНрдЦрд░реИ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рдбрдХрд░рдлрд╛рдЗрд▓рд▓рд╛рдИ рдХреНрд▓рд╛рдЙрдб рдХрдиреНрд╕реЛрд▓рдХреЛ рдЧреГрд╣ рдлреЛрд▓реНрдбрд░рдорд╛ scp рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд░рд╛рдЦреНрдиреБрд╣реЛрд╕реН:

gcloud alpha cloud-shell scp localhost:./Dockerfile cloudshell:~

рд╣рд╛рдореА рдХрдиреНрдЯреЗрдирд░рд▓рд╛рдИ рдХрдиреНрдЯреЗрдирд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдорд╛ рд╕рдЩреНрдХрд▓рди, рдЯреНрдпрд╛рдЧ рд░ рдкреБрд╢ рдЧрд░реНрдЫреМрдВ:

gcloud alpha cloud-shell ssh --command="docker build -t awesomeapp-$BUILD_VERSION ./ --build-arg BUILD_VERSION=$BUILD_VERSION --no-cache"
gcloud alpha cloud-shell ssh --command="docker tag awesomeapp-$BUILD_VERSION gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION"
gcloud alpha cloud-shell ssh --command="docker push gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION"

рд╣рд╛рдореА рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдлрд╛рдЗрд▓рдХреЛ рд╕рд╛рде рдкрдирд┐ рдЧрд░реНрдЫреМрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рддрд▓рдХрд╛ рдЖрджреЗрд╢рд╣рд░реВрд▓реЗ рдХреНрд▓рд╕реНрдЯрд░рдХреЛ рдХрд╛рд▓реНрдкрдирд┐рдХ рдирд╛рдорд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ рдЬрд╣рд╛рдБ рддреИрдирд╛рддреА рд╣реБрдиреНрдЫ (awsm-рдХреНрд▓рд╕реНрдЯрд░) рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдирд╛рдо (рдЕрджреНрднреБрдд рдкрд░рд┐рдпреЛрдЬрдирд╛), рдЬрд╣рд╛рдБ рдХреНрд▓рд╕реНрдЯрд░ рдЕрд╡рд╕реНрдерд┐рдд рдЫред

gcloud alpha cloud-shell ssh --command="rm -f deploy.yaml"
gcloud alpha cloud-shell scp localhost:./deploy.yaml cloudshell:~
gcloud alpha cloud-shell ssh --command="gcloud container clusters get-credentials awsm-cluster --zone us-central1-c --project awesome-project && 
kubectl apply -f deploy.yaml"

рд╣рд╛рдореА рдХрд╛рд░реНрдп рдЪрд▓рд╛рдЙрдБрдЫреМрдВ, рдХрдиреНрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рдЦреЛрд▓реНрдЫреМрдВ рд░ рдХрдиреНрдЯреЗрдирд░рдХреЛ рд╕рдлрд▓ рд╕рдореНрдореЗрд▓рди рд╣реЗрд░реНрди рдЖрд╢рд╛ рдЧрд░реНрджрдЫреМрдВред

рд╕реНрдХреНрд░реАрдирд╢рдЯ
рд╣рд╛рдореА рдкреНрд▓рдЧрдЗрди, SMS рд╡рд╛ рджрд░реНрддрд╛ рдмрд┐рдирд╛ GKE рдорд╛ рдПрдХ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВред рдЬреЗрдиреНрдХрд┐рдиреНрд╕рдХреЛ рдЬреНрдпрд╛рдХреЗрдЯ рдореБрдирд┐ рдПрдХ рдЭрд▓рдХ рд╣реЗрд░реМрдВ

рд░ рддреНрдпрд╕рдкрдЫрд┐ рдЬрдореНрдорд╛ рдХрдиреНрдЯреЗрдирд░ рдХреЛ рд╕рдлрд▓ рддреИрдирд╛рддреА

рд╕реНрдХреНрд░реАрдирд╢рдЯ
рд╣рд╛рдореА рдкреНрд▓рдЧрдЗрди, SMS рд╡рд╛ рджрд░реНрддрд╛ рдмрд┐рдирд╛ GKE рдорд╛ рдПрдХ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВред рдЬреЗрдиреНрдХрд┐рдиреНрд╕рдХреЛ рдЬреНрдпрд╛рдХреЗрдЯ рдореБрдирд┐ рдПрдХ рдЭрд▓рдХ рд╣реЗрд░реМрдВ

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

рдирд┐рд╖реНрдХрд░реНрд╖рдХреЛ рд╕рдЯреНрдЯрд╛

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

рд░ рдо рдореЗрд░реЛ рд▓рд╛рдЧрд┐ рдХреЗрд╣рд┐ рдирдпрд╛рдБ рд╡рд┐рд╖рдп рдЙрдард╛рдЙрди рдЪрд╛рд╣рдиреНрдЫреБред рдорд╛рдерд┐рдХреЛ рдкрд╛рда рд╕реБрд░реБрдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрджрд╛ рдореИрд▓реЗ рдЧрд░реЗрдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖рд╣рд░реВ рд╕рд╛рдЭрд╛ рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛ рдкрдирд┐ рд╣реЛред рдЙрд╣рд╛рдБ рдЬрд╕реНрддреИ, devops рдорд╛ рдПрдХ рдбрд░рд▓рд╛рдЧреНрджреЛ рдмреНрд╡рд╛рдБрд╕реЛ рд╣реЛрдЗрди рдЬреЛ рд╕рдВрдЧ рд╕рд╛рдЭрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпрджрд┐ рдореЗрд░реЛ рдЦреЛрдЬрд╣рд░реВрд▓реЗ рдХрдореНрддрд┐рдорд╛ рдХрд╕реИрд▓рд╛рдИ рдорджреНрджрдд рдЧрд░реНрджрдЫ рднрдиреЗ, рдо рдЦреБрд╕реА рд╣реБрдиреЗрдЫреБред

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

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