werf - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ CI / CD рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЯреВрд▓ (рдЕрд╡рд▓реЛрдХрди рдФрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

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

рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рдмрд╛рдж рд╕реЗ, рд╣рдорд╛рд░реА рдЙрдкрдпреЛрдЧрд┐рддрд╛ (рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдбреИрдк рдХреЗ рдирд╛рдо рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛) рдПрдХ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдореАрд▓ рдХреЗ рдкрддреНрдерд░ рддрдХ рдкрд╣реБрдВрдЪ рдЧрдИ рд╣реИ GitHub рдкрд░ 1000 рд╕рд┐рддрд╛рд░реЗ - рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдмрдврд╝рддрд╛ рд╕рдореБрджрд╛рдп рдХрдИ DevOps рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ред

werf - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ CI / CD рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЯреВрд▓ (рдЕрд╡рд▓реЛрдХрди рдФрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

рддреЛ, рд╣рдо рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рд╡реАрдбрд┐рдпреЛ (~47 рдорд┐рдирдЯ, рд▓реЗрдЦ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг) рдФрд░ рдкрд╛рдареНрдп рд░реВрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдЕрдВрд╢ред рдЬрд╛рдирд╛!

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рдХреЛрдб рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛

рдмрд╛рдд рдЕрдм рд╡реЗрдпрд░рдлрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧреА, рдмрд▓реНрдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рд╕реАрдЖрдИ/рд╕реАрдбреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧреА, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА 2016 рд░рд┐рдкреЛрд░реНрдЯ), рдФрд░ рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП K8s рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ 2017 рд╕рд╛рд▓).

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдбрд┐рд▓реАрд╡рд░реА рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ?

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

werf - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ CI / CD рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЯреВрд▓ (рдЕрд╡рд▓реЛрдХрди рдФрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

рдпрд╣рд╛рдВ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдиреЛрдЯреНрд╕ рд╣реИрдВ:

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

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

рдордВрдЪ рдХрд╛ рдирд┐рд░реНрдорд╛рдг

рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдк 2019 рдореЗрдВ рдбреЙрдХрд░ рдЗрдореЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдбреЙрдХрд░рдлрд╛рдЗрд▓реНрд╕ рдХреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛ рд╣реИ docker build?.. рдпрд╣рд╛рдВ рд╡реЗ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рди рдкрд░ рдореИрдВ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:

  1. рдЫрд╡рд┐ рд╡рдЬрди рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдмрд╣реБрдордВрдЬрд╝рд┐рд▓рд╛рдЫрд╡рд┐ рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЫреЛрдбрд╝реЗрдВ рдЬреЛ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
  2. рдкрд░рддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд╢реГрдВрдЦрд▓рд╛рдУрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдиреНрдпреВрдирддрдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП RUN-рдЕрд░реНрде рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЖрджреЗрд╢ред
  3. рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдБ рдмрдврд╝рддреА рд╣реИрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдЕрд╕реЗрдВрдмрд▓реА рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рд╕рд╣реА рдХрдорд╛рдВрдб рдвреВрдВрдврдиреА рд╣реЛрдЧреА рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдиреАред
  4. рдЕрд╕реЗрдВрдмрд▓реА рдЧрддрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рд╢реАрдШреНрд░рддрд╛ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рднрд╛рд╖рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
  5. рдЕрдХреНрд╕рд░ рдЖрдкрдХреЛ рдПрдХ Git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрдИ рдЫрд╡рд┐рдпрд╛рдБ, рдЬрд┐рд╕реЗ Dockerfiles (рдпрд╛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╛рдорд┐рдд рдЪрд░рдгреЛрдВ) рдХреЗ рдПрдХ рд╕реЗрдЯ рдФрд░ рдЙрдирдХреА рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд╕рд╛рде рдПрдХ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рддреЛ рдмрд╕ рд╣рд┐рдорд╢реИрд▓ рдХрд╛ рд╕рд┐рд░рд╛ рдерд╛ рдЬрд┐рд╕рдХрд╛ рд╕рд╛рдордирд╛ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рднреА рд╣реИрдВ:

  1. рдЕрдХреНрд╕рд░ рдЕрд╕реЗрдВрдмрд▓реА рд╕реНрдЯреЗрдЬ рдкрд░ рд╣рдореЗрдВ рдХреБрдЫ рди рдХреБрдЫ рдЪрд╛рд╣рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдкрд░реНрд╡рдд (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рддреГрддреАрдп-рдкрдХреНрд╖ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ apt рдЬреИрд╕реЗ рдХрдорд╛рдВрдб рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдХрд░реЗрдВ)ред
  2. рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ Ansible рд╢реЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп.
  3. рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдбреЙрдХрд░ рдХреЗ рдмрд┐рдирд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ (рд╣рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ?)ред
  4. рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рдВрдпреЛрдЬрди, рдЬрд┐рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: Dockerfile рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдорд╛рдВрдб (рдпрджрд┐ рдорд▓реНрдЯреА-рд╕реНрдЯреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдПрдХ рд╣реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдХрдИ рдХрдорд┐рдЯ, рдХрдИ Dockerfilesред
  5. рд╡рд┐рддрд░рд┐рдд рд╡рд┐рдзрд╛рдирд╕рднрд╛: рд╣рдо рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рдкреЙрдбреНрд╕ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ "рдХреНрд╖рдгрд┐рдХ" рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХрд╛ рдХреИрд╢ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд╣реАрдВ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
  6. рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдЗрдЪреНрдЫрд╛рдУрдВ рдХреЗ рд╢рд┐рдЦрд░ рдХрд╛ рдирд╛рдо рджрд┐рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд: рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЬрд╛рдирд╛, рдХреБрдЫ рдХрдорд╛рдВрдб рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдФрд░ рдПрдХ рддреИрдпрд╛рд░ рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрджрд░реНрд╢ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рдФрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХреА рд╕рдордЭ рдХреЗ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рднреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХрд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдФрд░ рдпрд╣рд╛рдБ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ рд╣реИрдВ:

  • рдореЛрдмреА/рдмрд┐рд▓реНрдбрдХрд┐рдЯ - рдбреЙрдХрд░ рдЗрдВрдХ рдХрд╛ рдПрдХ рдмрд┐рд▓реНрдбрд░ (рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЙрдХрд░ рдХреЗ рдореМрдЬреВрджрд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдПрдХреАрдХреГрдд), рдЬреЛ рдЗрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ;
  • рдХрдирд┐рдХреЛ - Google рдХрд╛ рдПрдХ рдмрд┐рд▓реНрдбрд░ рдЬреЛ рдЖрдкрдХреЛ рдбреЙрдХрд░ рдХреЗ рдмрд┐рдирд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ;
  • Buildpacks.io - рд╕реАрдПрдирд╕реАрдПрдл рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЬрд╛рджреВ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдФрд░, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рд░рд┐рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╛рдзрд╛рди;
  • рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣, рдЬреИрд╕реЗ рдмрд┐рд▓реНрдбрд╣рд╛, рдЬреЗрдиреБрдЗрдирдЯреВрд▓реНрд╕/img...

...рдФрд░ рджреЗрдЦреЛ GitHub рдкрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдХрд┐рддрдиреЗ рд╕рд┐рддрд╛рд░реЗ рд╣реИрдВред рдпрд╛рдирд┐ рдХрд┐ рдПрдХ рддрд░рдл, docker build рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реИ рдФрд░ рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╣рд▓ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ - рдЗрд╕рдХрд╛ рдкреНрд░рдорд╛рдг рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдВрдЧреНрд░рд╛рд╣рдХреЛрдВ рдХрд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд┐рдХрд╛рд╕ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреБрдЫ рд╣рд┐рд╕реНрд╕рд╛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред

рд╡реЗрдпрд░рдлрд╝ рдореЗрдВ рд╡рд┐рдзрд╛рдирд╕рднрд╛

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

werf - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ CI / CD рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЯреВрд▓ (рдЕрд╡рд▓реЛрдХрди рдФрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

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

рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдкреНрд░рдХрд╛рд╢рди рдХрд╛ рдЪрд░рдг (рдкреНрд░рдХрд╛рд╢рди)

рд╣рдордиреЗ рдбрд╛рдпрд▓ рдХрд┐рдпрд╛ docker push... - рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдЫрд╡рд┐ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХреНрдпрд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ? рдФрд░ рдлрд┐рд░ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: "рдореБрдЭреЗ рдЫрд╡рд┐ рдкрд░ рдХреМрди рд╕рд╛ рдЯреИрдЧ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?" рдпрд╣ рдЙрд╕ рдХрд╛рд░рдг рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ рдЧрд┐рдЯрдлреНрд▓реЛ (рдпрд╛ рдЕрдиреНрдп Git рд░рдгрдиреАрддрд┐) рдФрд░ Kubernetes, рдФрд░ рдЙрджреНрдпреЛрдЧ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ Kubernetes рдореЗрдВ рдЬреЛ рд╣реЛрддрд╛ рд╣реИ рд╡рд╣ Git рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЖрдЦрд╝рд┐рд░рдХрд╛рд░, Git рд╣реА рд╕рддреНрдп рдХрд╛ рд╣рдорд╛рд░рд╛ рдПрдХрдорд╛рддреНрд░ рд╕реНрд░реЛрдд рд╣реИред

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

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

рд░рдгрдиреАрддрд┐рдпрд╛рдБ рдЯреИрдЧ рдХрд░рдирд╛

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

werf - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ CI / CD рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЯреВрд▓ (рдЕрд╡рд▓реЛрдХрди рдФрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

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

рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЧрд┐рдЯ рдХрдорд┐рдЯ + рдЯреИрдЧ. рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдореЗрдВ рдПрдХ рдЯреИрдЧ рд╣реИ 1.0; рдЗрд╕рдХреЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ - рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдирд╛рдд рдПрдХ рдЫрд╡рд┐ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдФрд░ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рд░реВрдкрд░реЗрдЦрд╛рдПрдВ рд╣реИрдВред рдЖрдЧреЗ рд╣рдо Gitflow рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ: рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╢рд╛рдЦрд╛ рдореЗрдВ (develop) рд╣рдо рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рд╣реЛрддреА рд╣реИ #c1. рд╣рдо рдЗрд╕реЗ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (#c1). рдЙрд╕реА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд╣рдо рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП рд░реЛрд▓ рдЖрдЙрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдХрдорд┐рдЯ рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВ #c2 ╨╕ #c3.

рдЬрдм рд╣рдореЗрдВ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдкрд░реНрдпрд╛рдкреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╣реИрдВ, рддреЛ рд╣рдордиреЗ рд╕рдм рдХреБрдЫ рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред Git рдореЗрдВ рдПрдХ рд╢рд╛рдЦрд╛ рдмрдирд╛рдПрдБ release_1.1 (рдЖрдзрд╛рд░ рдкрд░ #c3 рд╕реЗ develop). рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐... рдпрд╣ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛. рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рддрдХ рд░реЛрд▓ рдЖрдЙрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕рдореЗрдВ рдмрдЧ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ #c4 рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд░реЛрд▓ рдЖрдЙрдЯ рдХрд░реЗрдВред рд╕рд╛рде рд╣реА рдЗрд╕рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХрд╛рд░реНрдп рднреА рдЪрд▓ рд░рд╣рд╛ рд╣реИ develop, рдЬрд╣рд╛рдВ рд╕реЗ рд╕рдордп-рд╕рдордп рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ release_1.1. рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рд╣рдореЗрдВ рдПрдХ рдХрдорд┐рдЯ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрддреА рд╣реИ рдФрд░ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдкрд░ рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЦреБрд╢ рд╣реЛрддреЗ рд╣реИрдВ (#c25).

рдлрд┐рд░ рд╣рдо рд░рд┐рд▓реАрдЬ рдмреНрд░рд╛рдВрдЪ рдХрд╛ рдорд░реНрдЬ (рдлрд╛рд╕реНрдЯ-рдлреЙрд░рд╡рд░реНрдб рдХреЗ рд╕рд╛рде) рдХрд░рддреЗ рд╣реИрдВ (release_1.1) рдорд╛рд╕реНрдЯрд░ рдореЗрдВ. рд╣рдордиреЗ рдЗрд╕ рдХрдорд┐рдЯ рдкрд░ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдЯреИрдЧ рд▓рдЧрд╛рдпрд╛ рд╣реИ (1.1). рд▓реЗрдХрд┐рди рдпрд╣ рдЫрд╡рд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдПрдХрддреНрд░ рдХреА рдЧрдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рджреЛрдмрд╛рд░рд╛ рдПрдХрддреНрд░ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рдореМрдЬреВрджрд╛ рдЫрд╡рд┐ рдореЗрдВ рдПрдХ рджреВрд╕рд░рд╛ рдЯреИрдЧ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рдЕрдм рдЗрд╕рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдЯреИрдЧ рд╣реИрдВ #c25 ╨╕ 1.1). рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрддрд╛рд░рддреЗ рд╣реИрдВред

рдПрдХ рдХрдореА рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рдЫрд╡рд┐ рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИ (#c25), рдФрд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдпрд╣ рдЕрд▓рдЧ рддрд░рд╣ рдХрд╛ рд╣реИ (1.1), рд▓реЗрдХрд┐рди рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ "рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ" рдпреЗ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рд╡рд╣реА рдЫрд╡рд┐ рд╣реИрдВред

werf - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ CI / CD рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЯреВрд▓ (рдЕрд╡рд▓реЛрдХрди рдФрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

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

рд╣рдо рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рддрд░рдХреАрдм рдЕрдкрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ... рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:

FROM ruby:2.3 as assets
RUN mkdir -p /app
WORKDIR /app
COPY . ./
RUN gem install bundler && bundle install
RUN bundle exec rake assets:precompile
CMD bundle exec puma -C config/puma.rb

FROM nginx:alpine
COPY --from=assets /app/public /usr/share/nginx/www/public

рдЖрдЗрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ:

  • рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рд╕реЗ SHA256 (ruby:2.3 ╨╕ nginx:alpine), рдЬреЛ рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЪреЗрдХрд╕рдо рд╣реИрдВ;
  • рд╕рднреА рдЯреАрдореЗрдВ (RUN, CMD рдФрд░ рдЗрд╕реА рддрд░рд╣ред);
  • рдЬреЛрдбрд╝реА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ SHA256.

... рдФрд░ рдРрд╕реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЪреЗрдХрд╕рдо (рдлрд┐рд░ рд╕реЗ SHA256) рд▓реЗрдВред рдпрд╣ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬреЛ рдбреЙрдХрд░ рдЫрд╡рд┐ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

werf - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ CI / CD рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЯреВрд▓ (рдЕрд╡рд▓реЛрдХрди рдФрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

рдЖрдЗрдП рдЖрд░реЗрдЦ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдУрдВ рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдРрд╕реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддред рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЯреИрдЧ рдХрд░реЗрдВред

werf - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ CI / CD рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЯреВрд▓ (рдЕрд╡рд▓реЛрдХрди рдФрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

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

рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдЪреЗрдХрд╕рдо рдХреЗрд╡рд▓ рдПрдХ рджрд┐рд╢рд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рдд рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХреА рдЧрдИ рд╣реИ - рдореИрдВ рдЖрдкрдХреЛ рдмрд╛рдж рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред

рд╡рд░реНрдлрд╝ рдореЗрдВ рдЯреИрдЧ рдХрд░рдирд╛

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

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

werf - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ CI / CD рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЯреВрд▓ (рдЕрд╡рд▓реЛрдХрди рдФрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

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

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

werf - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ CI / CD рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЯреВрд▓ (рдЕрд╡рд▓реЛрдХрди рдФрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреА рд╕рдлрд╛рдИ

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

рд╕рдлрд╝рд╛рдИ рд░рдгрдиреАрддрд┐рдпрд╛рдБ рдХреНрдпрд╛ рд╣реИрдВ?

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

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

рд╣рдо рдХреНрдпрд╛ рдХрд░рдиреЗ рдЖрдпреЗ рд╣реИрдВ? Werf? рд╣рдо рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ:

  1. Git рд╣реЗрдб: рд╕рднреА рдЯреИрдЧ, рд╕рднреА рд╢рд╛рдЦрд╛рдПрдБ - рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╣рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ Git рдореЗрдВ рдЯреИрдЧ рдХреА рдЧрдИ рд╣рд░ рдЪреАрдЬрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ Git рдореЗрдВ рд╣реА рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ);
  2. рд╕рднреА рдкреЙрдбреНрд╕ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдкрдВрдк рдХрд┐рдП рдЧрдП рд╣реИрдВ;
  3. рдкреБрд░рд╛рдиреЗ рд░реЗрдкреНрд▓рд┐рдХрд╛рд╕реЗрдЯреНрд╕ (рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛), рдФрд░ рд╣рдо рд╣реЗрд▓реНрдо рд░рд┐рд▓реАрдЬ рдХреЛ рд╕реНрдХреИрди рдХрд░рдиреЗ рдФрд░ рд╡рд╣рд╛рдВ рдирд╡реАрдирддрдо рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рднреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред

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

рдордВрдЪ рддреИрдирд╛рдд рдХрд░реЗрдВ

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдШреЛрд╖рдгрд╛рддреНрдордХрддрд╛

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

  1. рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛;
  2. рд╕реЗрд╡рд╛ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА;
  3. рдХрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди;
  4. рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╡рд╛рд▓рд╛ рдЕрдиреБрднрд╛рдЧ;
  5. рдкреНрд░рд╡реЗрд╢ рд╡реЗрдмрд╣реБрдХ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди;
  6. рд╡рд┐рднрд┐рдиреНрди рдирд┐рдпрдВрддреНрд░рдХреЛрдВ (рдФрд░ рдЕрдиреБрд╕реВрдЪрдХ) рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдоред

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

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ 2-рддрд░рдлрд╝рд╛ рд╡рд┐рд▓рдп. рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реЗрд▓реНрдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд╣рд╛рдБ рднреА 3-рддрд░рдлрд╝рд╛ рд╡рд┐рд▓рдп, рдЬреЛ рдЗрд╕рдореЗрдВ рднрд┐рдиреНрди рд╣реИ:

  • рдХреА рддреБрд▓рдирд╛ рдЕрдВрддрд┐рдо рдмрд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ ╨╕ рдирдИ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛;
  • рдХреА рддреБрд▓рдирд╛ рдирдИ ╨╕ рдЬреАрдирд╛, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЬреЛрдбрд╝рд╛ рдпрд╛ рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реИ;
  • рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдкреИрдЪ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреАрдирд╛.

рд╣рдо рд╣реЗрд▓реНрдо рдХреЗ рд╕рд╛рде 1000+ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 2-рддрд░рдлрд╝рд╛ рдорд░реНрдЬ рдХреЗ рд╕рд╛рде рд░рд╣рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдореЗрдВ рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдЕрдкрдиреЗ рдкреИрдЪ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рд╣реЗрд▓реНрдо рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реЛрд▓рдЖрдЙрдЯ рд╕реНрдерд┐рддрд┐

рд╣рдорд╛рд░рд╛ рд╕реАрдЖрдИ рд╕рд┐рд╕реНрдЯрдо рдЕрдЧрд▓реЗ рдЗрд╡реЗрдВрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЖрд╡реЗрджрди рдХрд░рдирд╛) рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП - рд╣реЗрд▓реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдпрд╛ kubectl apply. рдЗрд╕рдХреЗ рдмрд╛рдж, рдкрд╣рд▓реЗ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдПрди-рд╡реЗ рдорд░реНрдЬ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдкреАрдЖрдИ рд╕реАрдЖрдИ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдЙрд╕рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдиреБрдореЛрджрдирдкреВрд░реНрд╡рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИред

werf - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ CI / CD рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЯреВрд▓ (рдЕрд╡рд▓реЛрдХрди рдФрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

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

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

рд╡реЗрдпрд░рдлрд╝ рд╕реНрддрд░ рдкрд░ рдЗрд╕ рдЯреНрд░реИрдХрд░ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрди рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдпрд╛ рд╕реНрдЯреЗрдЯрдлреБрд▓рд╕реЗрдЯреНрд╕ рдкрд░ рд░рдЦреЗ рдЧрдП рд╣реИрдВред рдореБрдЦреНрдп рдЯрд┐рдкреНрдкрдгреА - fail-mode - рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд░реНрде рд╕рдордЭрддрд╛ рд╣реИ:

  • IgnoreAndContinueDeployProcess - рд╣рдо рдЗрд╕ рдШрдЯрдХ рдХреЛ рд░реЛрд▓ рдЖрдЙрдЯ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рддреИрдирд╛рддреА рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ;
  • FailWholeDeployProcessImmediately - рдЗрд╕ рдШрдЯрдХ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реЛрдХ рджреЗрддреА рд╣реИ;
  • HopeUntilEndOfDeployProcess - рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдШрдЯрдХ рддреИрдирд╛рддреА рдХреЗ рдЕрдВрдд рддрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рдПрдиреЛрдЯреЗрд╢рди рдорд╛рдиреЛрдВ рдХрд╛ рдпрд╣ рд╕рдВрдпреЛрдЬрди fail-mode:

werf - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ CI / CD рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЯреВрд▓ (рдЕрд╡рд▓реЛрдХрди рдФрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

рдЬрдм рд╣рдо рдкрд╣рд▓реА рдмрд╛рд░ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдбреЗрдЯрд╛рдмреЗрд╕ (MongoDB) рдЕрднреА рддрдХ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рддреИрдирд╛рддреА рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреИрдирд╛рддреА рдЕрднреА рднреА рд╣реЛрдЧреАред

рд╡реЗрдпрд░рдлрд╝ рдореЗрдВ рдХреБрдмреЗрдбреЙрдЧ рдХреЗ рд▓рд┐рдП рджреЛ рдФрд░ рдПрдиреЛрдЯреЗрд╢рди рд╣реИрдВ:

  • failures-allowed-per-replica - рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рдлрд╝реЙрд▓реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛;
  • show-logs-until - рдЙрд╕ рдХреНрд╖рдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡реЗрдпрд░рдлрд╝ рд╕рднреА рд░реЛрд▓ рдЖрдЙрдЯ рдкреЙрдбреНрд╕ рд╕реЗ (рд╕реНрдЯрдбрдЖрдЙрдЯ рдореЗрдВ) рд▓реЙрдЧ рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ PodIsReady (рдЙрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╣рдо рд╢рд╛рдпрдж рддрдм рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдЬрдм рдЯреНрд░реИрдлрд╝рд┐рдХ рдкреЙрдб рдкрд░ рдЖрдиреЗ рд▓рдЧреЗ), рд▓реЗрдХрд┐рди рдорд╛рди рднреА рдорд╛рдиреНрдп рд╣реИрдВ: ControllerIsReady ╨╕ EndOfDeploy.

рд╣рдо рддреИрдирд╛рддреА рд╕реЗ рдФрд░ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдкрд╣рд▓реЗ рд╕реЗ рд╡рд░реНрдгрд┐рдд рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЪрд╛рд╣реЗрдВрдЧреЗ:

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

рдкрд░рд┐рдгрд╛рдо

рдПрдХ рдХрдВрдкрдиреА рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдбрд┐рд▓реАрд╡рд░реА рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЪрд░рдгреЛрдВ (рдирд┐рд░реНрдорд╛рдг, рдкреНрд░рдХрд╛рд╢рди, рддреИрдирд╛рддреА) рдкрд░ рд╕рднреА рд╡рд░реНрдгрд┐рдд рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реАрдЖрдИ рдкреНрд░рдгрд╛рд▓реА рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ Werf.

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

werf - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ CI / CD рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЯреВрд▓ (рдЕрд╡рд▓реЛрдХрди рдФрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

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

рд╡реАрдбрд┐рдпреЛ рдФрд░ рд╕реНрд▓рд╛рдЗрдб

рдкреНрд░рджрд░реНрд╢рди рд╕реЗ рд╡реАрдбрд┐рдпреЛ (~47 рдорд┐рдирдЯ):

рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐:

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

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

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

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