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

рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ рдкрдЯрдХрдерд╛ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реВрдмреА рдореЗрдВ - рдФрд░ рдЗрд╕реЗ рдЧреЛрд▓рдВрдЧ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред


рдПрдХ рд╡рд╛рдЬрд┐рдм рд╕рд╡рд╛рд▓: рдЖрдЦрд┐рд░рдХрд╛рд░ рдЖрдкрдХреЛ рдРрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?



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


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


рддреАрд╕рд░рд╛, рдЧреЛрд▓рдВрдЧ рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдЧрддрд┐ рдЕрдзрд┐рдХ рд╣реИред рдпрд╣ рдЧрддрд┐ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реАрдЧрдд рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рд╕рд╣реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдРрд╕реА рд╡реГрджреНрдзрд┐ рд╣реИ рдЬреЛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХрдВрд╕реЛрд▓ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реВрдмреА рдореЗрдВ --help 0.8 рд╕реЗрдХрдВрдб рдореЗрдВ рдФрд░ рдЧреЛрд▓рдВрдЧ - 0.02 рд╕реЗрдХрдВрдб рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред


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


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


  • рд░реВрдмреА рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд▓рдЧрд╛рддрд╛рд░ рд╕реБрдзрд╛рд░ рдФрд░ рд╕реБрдзрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
    • рдХреАрдбрд╝реЗ рддрдм рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рддреБрд░рдВрдд рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП;
    • рдЖрдк рдЫрд╣ рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЕрдХреНрд╕рд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред
  • рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ 2 рдХреЛрдбрдмреЗрд╕ рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдФрд░ рдорд╣рдВрдЧрд╛ рд╣реИ:
    • 2-3 рд▓реЛрдЧреЛрдВ рдХреА рдХреБрдЫ рдЯреАрдореЗрдВ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕ рд░реВрдмреА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рджреА рдЧрдИ рд╣реИред
  • рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдкрд░рд┐рдЪрдп:
    • рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧрд┐рд░рд╛рд╡рдЯ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП;
    • рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдпрд╣ рдирд┐рд░реНрдмрд╛рдз рдФрд░ рдирд┐рд░реНрдмрд╛рдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рд╕рддрдд рдкреЛрд░реНрдЯрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЧреЛрд▓рдВрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рддреЛ рдореИрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?


рд╣рдо рдПрдХ рд╕рд╛рде рджреЛ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ


рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдиреАрдЪреЗ рд╕реЗ рдКрдкрд░ рддрдХ рдЧреЛрд▓рд╛рдВрдЧ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ? рд╣рдо рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╕рд╛рд░ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред


рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


 lib/ config.rb build/ image.rb git_repo/ base.rb local.rb remote.rb docker_registry.rb builder/ base.rb shell.rb ansible.rb stage/ base.rb from.rb before_install.rb git.rb install.rb before_setup.rb setup.rb deploy/ kubernetes/ client.rb manager/ base.rb job.rb deployment.rb pod.rb 

рдкреЛрд░реНрдЯ рдШрдЯрдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде


рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓рд╛ред рд╣рдо рдПрдХ рдореМрдЬреВрджрд╛ рдШрдЯрдХ рд▓реЗрддреЗ рд╣реИрдВ рдЬреЛ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рдХрд╛рдлреА рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, config ( lib/config.rb )ред рдЗрд╕ рдШрдЯрдХ рдореЗрдВ, рдХреЗрд╡рд▓ Config::parse рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЛ рдкрде рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЖрдмрд╛рджреА рд╡рд╛рд▓реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред рдЧреЛрд▓рд╛рдВрдЧ config рдкрд░ рдПрдХ рдЕрд▓рдЧ рдмрд╛рдЗрдирд░реА рдФрд░ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдкреИрдХреЗрдЬ config рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛:


 cmd/ config/ main.go pkg/ config/ config.go 

рдЧреЛрд▓рдВрдЧ рдмрд╛рдЗрдирд░реА JSON рдлрд╝рд╛рдЗрд▓ рд╕реЗ рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо JSON рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИред


 config -args-from-file args.json -res-to-file res.json 

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


config рдмрд╛рдЗрдирд░реА рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ config рдШрдЯрдХ рдХреЗ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред args.json рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддрд░реНрдХ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЙрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдирд╛рдо рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред res.json рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░, res.json рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреБрдЫ рд╡рд░реНрдЧ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдбреЗрдЯрд╛ JSON рдХреНрд░рдордмрджреНрдз рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Config::parse рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди args.json рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:


 { "command": "Parse", "configPath": "path-to-config.yaml" } 

рд╣рдореЗрдВ res.json рдореЗрдВ рдкрд░рд┐рдгрд╛рдо res.json :


 { "config": { "Images": [{"Name": "nginx"}, {"Name": "rails"}], "From": "ubuntu:16.04" }, } 

config рдлрд╝реАрд▓реНрдб рдореЗрдВ, рд╣рдореЗрдВ JSON рдореЗрдВ рдХреНрд░рдордмрджреНрдз Config::Config рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд░рд╛рдЬреНрдп рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕ рд░рд╛рдЬреНрдп рд╕реЗ, рд░реВрдмреА рдореЗрдВ рдХреЙрд▓рд░ рдкрд░, рдЖрдкрдХреЛ рдПрдХ Config::Config рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


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


 { "error": "no such file path-to-config.yaml" } 

error рдлрд╝реАрд▓реНрдб рдХреЛ рдХреЙрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рд░реВрдмреА рд╕реЗ рдЧреЛрд▓рдВрдЧ рдХреЛ рдмреБрд▓рд╛рдирд╛


рд░реВрдмреА рдХреА рддрд░рдл, рд╣рдо рдПрдХ рд░реИрдкрд░ рдореЗрдВ Config::parse(config_path) рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ Config::parse(config_path) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ, рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╕рд░рд▓реАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рд░реВрдмреА рд╕реНрдпреВрдбреЛрдХреЛрдб рд╣реИ:


 module Config def parse(config_path) call_id = get_random_number args_file = "#{get_tmp_dir}/args.#{call_id}.json" res_file = "#{get_tmp_dir}/res.#{call_id}.json" args_file.write(JSON.dump( "command" => "Parse", "configPath" => config_path, )) system("config -args-from-file #{args_file} -res-to-file #{res_file}") raise "config failed with unknown error" if $?.exitstatus != 0 res = JSON.load_file(res_file) raise ParseError, res["error"] if res["error"] return Config.new_from_state(res["config"]) end end 

рдмрд╛рдЗрдирд░реА рдиреЛрдирдЬрд╝рд░реЛ рдХреЗ рд╕рд╛рде рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдХреЛрдб - рдпрд╣ рдПрдХ рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐ рд╣реИред рдпрд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд╕рд╛рде - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо error рдФрд░ config рдлрд╝реАрд▓реНрдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП res.json рдлрд╝рд╛рдЗрд▓ рдХреЛ res.json рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдо рдХреНрд░рдорд┐рдХ config рдлрд╝реАрд▓реНрдб рд╕реЗ Config::Config рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, Config::Parse рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред


рдкреЛрд░реНрдЯ рдШрдЯрдХ рд╡рд░реНрдЧ


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо lib/git_repo ред 2 рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ: GitRepo::Local рдФрд░ GitRepo::Remote ред рдпрд╣ рдПрдХ рдПрдХрд▓ git_repo рдмрд╛рдЗрдирд░реА рдореЗрдВ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░, рддрджрдиреБрд╕рд╛рд░, git_repo рдореЗрдВ рдкреИрдХреЗрдЬ git_repoред


 cmd/ git_repo/ main.go pkg/ git_repo/ base.go local.go remote.go 

git_repo рдмрд╛рдЗрдирд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ GitRepo::Local рдХреА рдХреБрдЫ рд╡рд┐рдзрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ GitRepo::Local рдпрд╛ GitRepo::Remote рд╡рд╕реНрддреБред рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдмрджрд▓ рд╕рдХрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рддрд░реНрдХреЛрдВ рдореЗрдВ, рд╣рдо рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ JSON рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдирдИ рд╕реНрдерд┐рддрд┐ рдорд┐рд▓рддреА рд╣реИ - JSON рдореЗрдВ рднреАред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, local_repo.commit_exists?(commit) рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд args.json рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ:


 { "localGitRepo": { "name": "my_local_git_repo", "path": "path/to/git" }, "method": "IsCommitExists", "commit": "e43b1336d37478282693419e2c3f2d03a482c578" } 

рдЖрдЙрдЯрдкреБрдЯ res.json :


 { "localGitRepo": { "name": "my_local_git_repo", "path": "path/to/git" }, "result": true, } 

localGitRepo рдлрд╝реАрд▓реНрдб рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рд╣рдореЗрдВ рдЗрд╕ рд░рд╛рдЬреНрдп рдХреЛ рд╡реИрд╕реЗ рднреА рд╡рд░реНрддрдорд╛рди рд░реВрдмреА-рд╡рд╕реНрддреБ local_git_repo рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред


рд░реВрдмреА рд╕реЗ рдЧреЛрд▓рдВрдЧ рдХреЛ рдмреБрд▓рд╛рдирд╛


рд░реВрдмреА рдХреА рддрд░рдл, рд╣рдо GitRepo::Base рдХреА рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ GitRepo::Base , GitRepo::Local , GitRepo::Remote рд░реИрдкрд░ рдореЗрдВ GitRepo::Remote рдЬреЛ рд╣рдорд╛рд░реЗ git_repo рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, git_repo рдХреА рд╡рд╕реНрддреБ рдХреА рдирдИ рд╕реНрдерд┐рддрд┐ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ GitRepo::Local рдпрд╛ GitRepo::Remote рд╡рд░реНрдЧред


рдЕрдиреНрдпрдерд╛, рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред


рдмрд╣реБрд░реВрдкрддрд╛ рдФрд░ рдЖрдзрд╛рд░ рд╡рд░реНрдЧреЛрдВ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрд╛ рдЬрд╛рдП


рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЧреЛрд▓рдВрдЧ рд╕реЗ рдмрд╣реБрд░реВрдкрддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдпрд╛рдиреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ git_repo рдмрд╛рдЗрдирд░реА рдХреЛ рдХреЙрд▓ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ localGitRepo рддрд░реНрдХреЛрдВ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ localGitRepo , рддреЛ рдХреЙрд▓ GitRepo::Local рд╕реЗ рдЖрдпрд╛ рдерд╛ GitRepo::Local рд╡рд░реНрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ; рдпрджрд┐ remoteGitRepo рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ remoteGitRepo - рддреЛ GitRepo::Remote рдФрд░ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреА рдПрдХ рдЫреЛрдЯреА рдорд╛рддреНрд░рд╛ рдХреА рдирдХрд▓ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ) cmd рдореЗрдВ рдХреЛрдбред рд╕рдм рдХреЗ рдмрд╛рдж, рд╡реИрд╕реЗ рднреА, рдЗрд╕ рдХреЛрдб рдХреЛ рдЧреЛрд▓рдВрдЧ рдХреЗ рдХрджрдо рдХреЗ рдкреВрд░рд╛ рд╣реЛрддреЗ рд╣реА рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред


рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИ


рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ рдЬрдм рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рдХрд╣рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рджреВрд╕рд░реА рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:


  1. рдЬрдм рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕ рд╡рд╕реНрддреБ рдХреА рдХреНрд░рдордмрджреНрдз рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд┐рд╕реЗ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдХреНрд░рдордмрджреНрдз рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░реЗрдВред
  2. рдХреЙрд▓ рдХреЗ рдмрд╛рдж, рдЬрд┐рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ, рдФрд░ рдЙрди рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рднреА рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ рдЬреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред

рдЕрдиреНрдпрдерд╛, рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реИред


рдпрд╣ рдХреНрдпрд╛ рд╣реИ?


рд╣рдо рдПрдХ рдШрдЯрдХ, рдкреЛрд░реНрдЯ рдХреЛ рдЧреЛрд▓рдВрдЧ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВред


рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрдм рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдШрдЯрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреЛрд░реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдШрдЯрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдШрдЯрдХ рдЗрди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд▓реЛрдЧреЛрдВ рдХреЛ "рд▓реЗ" рд╕рдХрддрд╛ рд╣реИ ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рдВрдмрдВрдзрд┐рдд рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдкрд╣рд▓реЗ рд╣реА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдЯрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред


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


рдЗрд╕ рд░рд╛рдХреНрд╖рд╕ рдХреЛ рдХреИрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВ?


рдЕрдЪреНрдЫрд╛: рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдзреАрд░реЗ-рдзреАрд░реЗ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдкреНрд░рд╢реНрди: рдРрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ 2 рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреИрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВ?


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


рдЬрдм рд╣рдо 2 рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдирдИ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:


  1. рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рднреА рдмрд╛рдЗрдирд░реА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ рдФрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред
  2. рдПрдХ рдирдпрд╛ рд░реВрдмреА рдЬреЗрдо рд╡рд░реНрдЬрди рдмрдирд╛рдПрдВред

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


рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдиреБрдХрд╕рд╛рди


рдЬрд╛рд╣рд┐рд░ рд╣реИ, system / exec рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдУрд╡рд░рд╣реЗрдб exec ред


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


рд╣рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЧреЛрд▓рдВрдЧ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдмрд╣рд╛рд▓ рдХрд░рдирд╛ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЧреЛрд▓рдВрдЧ рдкрд░ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрдерд╛рди рд▓реЗрддреА рд╣реИ ред рдЧреЛрд▓рдВрдЧ рдкрд░ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо - рдПрдХ рдПрдХрд▓ 30 рдПрдордмреА рдмрд╛рдЗрдирд░реА рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдПрдХ рдмрд╛рдд рд╣реИред рдПрдХ рдФрд░ рдмрд╛рдд, рдЬрдм рдЖрдкрдиреЗ ~ 10 рдШрдЯрдХреЛрдВ рдХреЛ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдерд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рд╡рдЬрди 30 рдПрдордмреА рд╣реИ, рддреЛ рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП 300 рдПрдордмреА рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓рддреА рд╣реИрдВред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдмрд╛рдЗрдирд░реА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдФрд░ рд╣реЛрд╕реНрдЯ рдорд╢реАрди рдкрд░ рдЬрдЧрд╣, рдЬрд╣рд╛рдВ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рдЕрдкрдбреЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬрд▓реНрджреА рд╕реЗ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рдорд╕реНрдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЖрдк рд╕рдордп-рд╕рдордп рдкрд░ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВред


рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрджреНрдпрддрди рдХреЗ рд╕рд╛рде рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред


рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд╛рдн


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


рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рдирдП рдХреЛрдб рдкрд░ рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ, рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред


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


рдЧреЛрд▓рдВрдЧ рдкрд░ рдЕрдВрддрд┐рдо рддрдЦреНрддрд╛рдкрд▓рдЯ рдХреИрд╕реЗ рдХрд░реЗрдВ


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


рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдпрд╣ рдХреЗрд╡рд▓ рдкреБрд░рд╛рдиреЗ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдирдП рд╕реАрдПрд▓рдЖрдИ рдХреА рд╕рдВрдЧрддрддрд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред


рд╣реБрд░реНрд░реЗ, рдХреЙрдорд░реЗрдбреНрд╕! рдХреНрд░рд╛рдВрддрд┐ рд╕рдЪ рд╣реЛ рдЧрдИред


рд╣рдордиреЗ рдЧреЛрд▓рдВрдЧ рдкрд░ рдбреИрдк рдХреЛ рдХреИрд╕реЗ рд▓рд┐рдЦрд╛


Dapp рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ Flant рджреНрд╡рд╛рд░рд╛ CI / CD рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд░реВрдмреА рдореЗрдВ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛:


  • рд░реВрдмреА рдореЗрдВ рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рдЕрдиреБрднрд╡ред
  • рдкреНрд░рдпреБрдХреНрдд рд╢реЗрдл (рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡реНрдпрдВрдЬрди рд░реВрдмреА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ)ред
  • рдЬрдбрд╝рддрд╛, рдХреБрдЫ рдЧрдВрднреАрд░ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдирдИ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд░реЛрдзред

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



рд░реВрдмреА рдмрдирд╛рдо рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдПрдХ рдбреИрдк / рд╡реЗрдпрд░рдл рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдЧреЛрд▓рдВрдЧ рд░рд┐рд▓реАрдЬ рдХреЗ рджреМрд░рд╛рди


рдлрд┐рд▓рд╣рд╛рд▓, рдЖрдк рдЕрд▓реНрдлрд╛ рд╕рдВрд╕реНрдХрд░рдг 1.0 рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд░реВрдмреА рдирд╣реАрдВ рд╣реИред рд╣рдордиреЗ рднреА рдирд╛рдо рдмрджрд▓рдХрд░ werf рдХрд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдФрд░ рдХрд╣рд╛рдиреА рд╣реИ ... рдЬрд▓реНрдж рд╣реА werf 1.0 рдХреЗ рдкреВрд░реНрдг рд░рд┐рд▓реАрдЬ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ!


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


рдкреБрдирд╢реНрдЪ


рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рднреА рдкрдврд╝реЗрдВ:


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


All Articles