рд╣рдо рдкреНрд▓рдЧрдЗрдиреНрд╕, рдПрд╕рдПрдордПрд╕ рдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдЬреАрдХреЗрдИ рдореЗрдВ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЬреЗрдирдХрд┐рдВрд╕ рдХреА рдЬреИрдХреЗрдЯ рдХреЗ рдиреАрдЪреЗ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ

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

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

рддреЛ, рдЗрд╕ рдиреЛрдЯ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдХреИрд╕реЗ рд╕реАрдЦрд╛:

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


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

рдпрд╣ рдореЗрд░реА рдЕрдЧрд▓реА рдЪреАрдЯ рд╢реАрдЯ рд╣реИ. рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕реЗ рдиреЛрдЯреНрд╕ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдореБрдЭреЗ рд╢реБрд░реВ рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рднрд╛рдЧреЛрдВ рдореЗрдВ Google рдкрд░ рдЦреЛрдЬрд╛ рдФрд░ рдЕрдВрддрддрдГ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░ рджреАред рдФрд░ рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЬрдм рдореИрдВ рднреВрд▓ рдЬрд╛рдКрдВ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рд╣рд░ рдЪреАрдЬ рдХреЛ рдЯреБрдХрдбрд╝реЗ-рдЯреБрдХрдбрд╝реЗ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рдЧреВрдЧрд▓ рдкрд░ рди рдЦреЛрдЬрдирд╛ рдкрдбрд╝реЗ рдФрд░ рдЙрд╕реЗ рдПрдХ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рди рдХрд░рдирд╛ рдкрдбрд╝реЗ, рдореИрдВ рдЦреБрдж рд╣реА рдРрд╕реА рдЪреАрдЯ рд╢реАрдЯ рд▓рд┐рдЦрддрд╛ рд╣реВрдВред

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

рдЬреЗрдирдХреАрдВрд╕ рдореЗрдВ рдХрд╛рд░реНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЕрджреНрдпрддрди рдХрд░рдирд╛

рдореБрдЭреЗ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╣реИ: рдбрд╛рдпрдирд╛рдорд┐рдХ рдЬреЙрдм рдЕрдкрдбреЗрдЯрд┐рдВрдЧ рдХрд╛ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИ? рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВ!

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

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

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

рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИрдВ. рджреЛ рдмрд╛рддреЗрдВ рддреБрд░рдВрдд рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдИрдВ:

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

рдЬреЗрдирдХреАрдВрд╕ рд░рд┐рдореЛрдЯ рдПрдХреНрд╕реЗрд╕ рдПрдкреАрдЖрдИ

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

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

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрджрд┐ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬрд┐рд╕ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, рддреЛ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рд╕реАрдЯреА рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/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']

рд╕рдлрд▓ рд▓реЛрдЧреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ
рд╣рдо рдкреНрд▓рдЧрдЗрдиреНрд╕, рдПрд╕рдПрдордПрд╕ рдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдЬреАрдХреЗрдИ рдореЗрдВ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЬреЗрдирдХрд┐рдВрд╕ рдХреА рдЬреИрдХреЗрдЯ рдХреЗ рдиреАрдЪреЗ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ

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

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

рдЧреИрд░-рд╕рдлрд▓ рд▓реЛрдЧреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ
рд╣рдо рдкреНрд▓рдЧрдЗрдиреНрд╕, рдПрд╕рдПрдордПрд╕ рдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдЬреАрдХреЗрдИ рдореЗрдВ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЬреЗрдирдХрд┐рдВрд╕ рдХреА рдЬреИрдХреЗрдЯ рдХреЗ рдиреАрдЪреЗ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ

рдХрд┐рд╕реА рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдкрд░ рдХрд┐рд╕реА рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА

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

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

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[^/]+' )

рдЬреЗрдирдХреАрдВрд╕ рдореЗрдВ рдЬреЙрдм рдФрд░ рдЬреЙрдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯ рдХрд░рдирд╛

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

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

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

рдпрд╛рдж рд░рдЦреЗрдВ, рд╣рдо рдКрдкрд░ рд╕рд╣рдордд рд╣реБрдП рдереЗ рдХрд┐ рд╣рдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдмрдирд╛рдПрдВрдЧреЗ рдирд┐рд░реНрдорд╛рдг_рд╕рдВрд╕реНрдХрд░рдг?

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

рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯред

рдЖрдкрдХрд╛ config.xml рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ рдПрдХ рдЬреИрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП. рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╡рд┐рдХрд▓реНрдк рддрддреНрд╡ рдХреА рд╕рд╛рдордЧреНрд░реА рдЕрднреА рддрдХ рдЧрд╛рдпрдм рд╣реИ
рд╣рдо рдкреНрд▓рдЧрдЗрдиреНрд╕, рдПрд╕рдПрдордПрд╕ рдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдЬреАрдХреЗрдИ рдореЗрдВ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЬреЗрдирдХрд┐рдВрд╕ рдХреА рдЬреИрдХреЗрдЯ рдХреЗ рдиреАрдЪреЗ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдпрдХреАрди рд╣реИ? рдмрд╕ рдЗрддрдирд╛ рд╣реА, рдЖрдЗрдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреЗрдВ рдЬрд┐рд╕реЗ рдирд┐рд░реНрдорд╛рдг рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдЙрд╕рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рд▓рд┐рдЦреЗрдВ рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рд░рдЦ рджреЗрдВред рд╣рд╛рдБред рдпрд╣ рд╕рд╣реА рд╣реИред 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

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

рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреВрд░реНрдг рдХреА рдЧрдИ рд╕реВрдЪреА
рд╣рдо рдкреНрд▓рдЧрдЗрдиреНрд╕, рдПрд╕рдПрдордПрд╕ рдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдЬреАрдХреЗрдИ рдореЗрдВ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЬреЗрдирдХрд┐рдВрд╕ рдХреА рдЬреИрдХреЗрдЯ рдХреЗ рдиреАрдЪреЗ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ

рдпрджрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░ рдЧрдпрд╛, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ рд╢реЗрд▓ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣реЗрдЬреЗрдВ.

рдХреНрд▓рд╛рдЙрдб рд╢реЗрд▓ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИ

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

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

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

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

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

рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред

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

    рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ
    рд╣рдо рдкреНрд▓рдЧрдЗрдиреНрд╕, рдПрд╕рдПрдордПрд╕ рдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдЬреАрдХреЗрдИ рдореЗрдВ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЬреЗрдирдХрд┐рдВрд╕ рдХреА рдЬреИрдХреЗрдЯ рдХреЗ рдиреАрдЪреЗ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ

  4. рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред

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

gcloud alpha cloud-shell ssh

рдПрдХ рд╕рдлрд▓ рдХрдиреЗрдХреНрд╢рди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ
рд╣рдо рдкреНрд▓рдЧрдЗрдиреНрд╕, рдПрд╕рдПрдордПрд╕ рдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдЬреАрдХреЗрдИ рдореЗрдВ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЬреЗрдирдХрд┐рдВрд╕ рдХреА рдЬреИрдХреЗрдЯ рдХреЗ рдиреАрдЪреЗ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ

GKE рдкрд░ рддреИрдирд╛рдд рдХрд░реЗрдВ

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

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

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

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ
рд╣рдо рдкреНрд▓рдЧрдЗрдиреНрд╕, рдПрд╕рдПрдордПрд╕ рдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдЬреАрдХреЗрдИ рдореЗрдВ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЬреЗрдирдХрд┐рдВрд╕ рдХреА рдЬреИрдХреЗрдЯ рдХреЗ рдиреАрдЪреЗ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ

рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЗ рд╕рд╛рде yaml рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ рдЧреВрдВрдЬ рджрд╛рдпрд░ рдХрд░рдирд╛ред рдирд┐рдГрд╕рдВрджреЗрд╣, рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдбреЙрдХрд░рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ рдкрд░рдо1 ╨╕ рдкрд░рдо2рдХрд┐ рд▓реЛрдб рдХрд╛ рдирд╛рдо рд╣реЛрдЧрд╛ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдРрдк, рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╕рд╛рде рдЗрдХрдЯреНрдареЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрдВрдЯреЗрдирд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд░рд╛рд╕реНрддреЗ рдореЗрдВ gcr.io/awesomeapp/awesomeapp-$BUILD_рд╕рдВрд╕реНрдХрд░рдгрдЬрд╣рд╛рдВ $BUILD_рд╕рдВрд╕реНрдХрд░рдг рдЕрднреА-рдЕрднреА рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рд╕реЗ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛.

рдЯреАрдо рд╕реВрдЪреА

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 alpha cloud-shell ssh --command="rm -f Dockerfile"

рддрд╛рдЬрд╝рд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдбреЙрдХрд░рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрд╕рд╕реАрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЙрдб рдХрдВрд╕реЛрд▓ рдХреЗ рд╣реЛрдо рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦреЗрдВ:

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"

рд╣рдо рдХрд╛рд░реНрдп рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рдХрдВрдЯреЗрдирд░ рдХреА рд╕рдлрд▓ рдЕрд╕реЗрдВрдмрд▓реА рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ
рд╣рдо рдкреНрд▓рдЧрдЗрдиреНрд╕, рдПрд╕рдПрдордПрд╕ рдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдЬреАрдХреЗрдИ рдореЗрдВ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЬреЗрдирдХрд┐рдВрд╕ рдХреА рдЬреИрдХреЗрдЯ рдХреЗ рдиреАрдЪреЗ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ

рдФрд░ рдлрд┐рд░ рдЗрдХрдЯреНрдареЗ рдХрдВрдЯреЗрдирд░ рдХреА рд╕рдлрд▓ рддреИрдирд╛рддреА

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ
рд╣рдо рдкреНрд▓рдЧрдЗрдиреНрд╕, рдПрд╕рдПрдордПрд╕ рдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдЬреАрдХреЗрдИ рдореЗрдВ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЬреЗрдирдХрд┐рдВрд╕ рдХреА рдЬреИрдХреЗрдЯ рдХреЗ рдиреАрдЪреЗ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ

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

рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп

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

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ