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

рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рд╣рд╛рдореНрд░реЛ GitOps рдЙрдкрдХрд░рдгрдХреЛ рдмрд╛рд░реЗрдорд╛ рдПрдХ рдкрдЯрдХ рднрдиреНрджрд╛ рдмрдвреА рдХреБрд░рд╛ рдЧрд░рд┐рд╕рдХреЗрдХрд╛ рдЫреМрдВред рд╡рд╛рдл, рд░ рдпрд╕ рдкрдЯрдХ рд╣рд╛рдореА рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдХрд╛рдЧрдЬрд╛рддрдХреЛ рд╕рд╛рде рд╕рд╛рдЗрдЯрд▓рд╛рдИ рднреЗрд▓рд╛ рдЧрд░реНрдиреЗ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ - werf.io (рдпрд╕рдХреЛ рд░реВрд╕реА рд╕рдВрд╕реНрдХрд░рдг рд╣реЛ en.werf.io)ред рдпреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ рд╣реЛ, рддрд░ рдпрд╕рдХреЛ рд╕рдВрдпреЛрдЬрди рд░реЛрдЪрдХ рдЫ рдХрд┐ рдпреЛ рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВрдХреЛ рдЧрддрд┐рд╢реАрд▓ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдмрдирд╛рдЗрдПрдХреЛ рдЫред

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

рд╕рд╛рдЗрдЯ рд╕рдВрд░рдЪрдирд╛рдХреЛ рд╕реВрдХреНрд╖реНрдорддрд╛рд╣рд░реВрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН: рд╕рдмреИ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд╛рдЭрд╛ рдореЗрдиреБ рдЙрддреНрдкрдиреНрди рдЧрд░реНрджреИ, рд░рд┐рд▓реАрдЬрд╣рд░реВ рдмрд╛рд░реЗ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╣рд┐рдд рдкреГрд╖реНрдард╣рд░реВ, рдЖрджрд┐ред - рд╣рд╛рдореА рдЧрд░реНрджреИрдиреМред рдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛, рдЧрддрд┐рд╢реАрд▓ рдЕрд╕реЗрдВрдмрд▓реАрдХрд╛ рдореБрджреНрджрд╛рд╣рд░реВ рд░ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВрдорд╛ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдЧрд░реМрдВ рд░ рд╕рд╛рдердорд╛ CI/CD рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдорд╛ рдереЛрд░реИред

рдкрд░рд┐рдЪрдп: рд╕рд╛рдЗрдЯ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрджрдЫ

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

  • рдирдпрд╛рдБ werf рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдХрд╛рдЧрдЬрд╛рдд рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдирдЧрд░реА рдЬрд╛рд░реА рдЧрд░реНрдиреБ рд╣реБрдБрджреИрди рд░, рдпрд╕рдХреЛ рд╡рд┐рдкрд░реАрдд, рдХрд╛рдЧрдЬрд╛рддрдорд╛ рдХреБрдиреИ рдкрдирд┐ рдкрд░рд┐рд╡рд░реНрддрдирд▓реЗ werf рдХреЛ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд░рд┐рд▓реАрдЬрд▓рд╛рдИ рд╕рдВрдХреЗрдд рдЧрд░реНрджрдЫ;
  • рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдПрдХрджрдо рдЧрд╣рди рд╡рд┐рдХрд╛рд╕ рдЫ: рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рджрд┐рдирдорд╛ рдзреЗрд░реИ рдкрдЯрдХ рдЬрд╛рд░реА рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ;
  • рдХрд╛рдЧрдЬрд╛рддрдХреЛ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд╕рд╛рде рд╕рд╛рдЗрдЯ рдбрд┐рдкреНрд▓реЛрдп рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдХреБрдиреИ рдкрдирд┐ рдореНрдпрд╛рдиреБрдЕрд▓ рдЕрдкрд░реЗрд╕рдирд╣рд░реВ рдХрдореНрддрд┐рдорд╛ рдХрдард┐рди рд╣реБрдиреНрдЫрдиреН;
  • рдкрд░рд┐рдпреЛрдЬрдирд╛рд▓реЗ рд╕рд┐рдорд╛рдиреНрдЯрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдкрдирд╛рдПрдХреЛ рдЫ рд╕рдВрд╕реНрдХрд░рдг, 5 рд╕реНрдерд┐рд░рддрд╛ рдЪреНрдпрд╛рдирд▓рд╣рд░реБ рд╕рдВрдЧред рдЬрд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓реЗ рд╕реНрдерд┐рд░рддрд╛ рдмрдврд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдЪреНрдпрд╛рдирд▓рд╣рд░реВ рдорд╛рд░реНрдлрдд рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдХреЛ рдХреНрд░рдорд┐рдХ рдорд╛рд░реНрдЧ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ: рдЕрд▓реНрдлрд╛ рджреЗрдЦрд┐ рдЪрдЯреНрдЯрд╛рди-рдареЛрд╕ рд╕рдореНрдо;
  • рд╕рд╛рдЗрдЯрд╕рдБрдЧ рд░реВрд╕реА-рднрд╛рд╖рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЫ, рдЬреБрди "рдЬреАрд╡рд┐рдд рд░ рд╡рд┐рдХрд╛рд╕" (рдЕрд░реНрдерд╛рдд, рдЬрд╕рдХреЛ рд╕рд╛рдордЧреНрд░реА рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░рд┐рдПрдХреЛ рдЫ) рдореБрдЦреНрдп (рдЕрд░реНрдерд╛рдд, рдЕрдЩреНрдЧреНрд░реЗрдЬреА-рднрд╛рд╖рд╛) рд╕рдВрд╕реНрдХрд░рдгрд╕рдБрдЧ рд╕рдорд╛рдирд╛рдиреНрддрд░рдорд╛ рдЫред

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

рд╡реЗрдмрд╕рд╛рдЗрдЯрдорд╛ рд╕рдВрд╕реНрдХрд░рдг рдЪрдпрди рдореЗрдиреБрдорд╛, werf рдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рдкреНрд░рддреНрдпреЗрдХ рдЪреНрдпрд╛рдирд▓рдорд╛ рдЙрдкрд▓рдмреНрдз рдЫрдиреНред рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рдареЗрдЧрд╛рдирд╛ рджреНрд╡рд╛рд░рд╛ werf.io/documentation рднрд░реНрдЦрд░рдХреЛ рд░рд┐рд▓реАрдЬрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИрднрдиреНрджрд╛ рд╕реНрдерд┐рд░ рдЪреНрдпрд╛рдирд▓рдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдЦреБрд▓реНрдЫ - рдпреЛ рдЦреЛрдЬ рдЗрдиреНрдЬрд┐рдирд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдкрдирд┐ рд╣реБрдиреНрдЫред рдЪреНрдпрд╛рдирд▓рдХрд╛ рд▓рд╛рдЧрд┐ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдареЗрдЧрд╛рдирд╛рд╣рд░реВрдорд╛ рдЙрдкрд▓рдмреНрдз рдЫрдиреН (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, werf.io/v1.0-beta/documentation рдмрд┐рдЯрд╛ рд░рд┐рд▓реАрдЬ 1.0 рдХреЛ рд▓рд╛рдЧреА)ред

рдХреБрд▓рдорд╛, рд╕рд╛рдЗрдЯрдорд╛ рдирд┐рдореНрди рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рдЙрдкрд▓рдмреНрдз рдЫрдиреН:

  1. рд░реВрдЯ (рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдЦреБрд▓реНрдЫ),
  2. рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рд▓реАрдЬрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдХреНрд░рд┐рдп рдЕрдкрдбреЗрдЯ рдЪреНрдпрд╛рдирд▓рдХреЛ рд▓рд╛рдЧрд┐ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, werf.io/v1.0-beta).

рд╕рд╛рдЗрдЯрдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдЙрддреНрдкрдиреНрди рдЧрд░реНрди, рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдпреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрди рдкрд░реНрдпрд╛рдкреНрдд рдЫ Jekyllрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдорд╛ рдЪрд▓рд╛рдПрд░ /docs werf рднрдгреНрдбрд╛рд░ рд╕рдВрдЧрдд рдЖрджреЗрд╢ (jekyll build), рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ Git рдЯреНрдпрд╛рдЧрдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реЗрдкрдЫрд┐ред

рдпреЛ рдХреЗрд╡рд▓ рдердкреНрди рдмрд╛рдБрдХреА рдЫ:

  • рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЖрдлреИ (werf) рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ;
  • CI/CD рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ GitLab CI рдХреЛ рдЖрдзрд╛рд░рдорд╛ рдмрдирд╛рдЗрдиреНрдЫ;
  • рд░ рдпреЛ рд╕рдмреИ, рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, Kubernetes рдорд╛ рдЪрд▓реНрдЫред

рдХрд╛рд░реНрдпрд╣рд░реВ

рдЕрдм рд╕рдмреИ рд╡рд░реНрдгрд┐рдд рд╡рд┐рд╡рд░рдгрд╣рд░реВрд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрдиреЗ рдХрд╛рд░реНрдпрд╣рд░реВ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН:

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

рд╕рдореНрдмрдиреНрдзрд┐рдд Git рдЯреНрдпрд╛рдЧрд╣рд░реВрдмрд╛рдЯ рдХреБрдиреИ рдкрдирд┐ рдЪреНрдпрд╛рдирд▓рдорд╛ рд╕рдВрд╕реНрдХрд░рдг рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реЗрдкрдЫрд┐ рд╕рд╛рдЗрдЯ рдкреБрди: рдХрдореНрдкрд╛рдЗрд▓ рд╣реБрдиреБрдкрд░реНрдЫ, рддрд░ рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рд╣рд╛рдореАрд▓реЗ рдирд┐рдореНрди рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВ:

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

рдпрд╕рд▓реЗ рддреНрдпрд╕рдмрд╛рдЯ рд╣рдЯрд╛рдЙрдБрдЫ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдмрд╛рд╣реНрдп рдбрд╛рдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫ.

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЫрдиреЛрдЯ рдЧрд░реНрджреИ

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

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

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

werf рдмрдирд╛рдо git рдХреНрд▓реЛрди рд░ рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ

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

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

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

рд╣рд╛рдореА werf.yaml рд▓реЗрдЦреНрдЫреМрдВ

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

werf рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╣рд░реВрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН рддрдкрд╛рдИрдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рдорд╛ (werf.yaml), рд░ рдпрд╕рд▓реЗ рдпреЛ рд╕рдореНрднрд╡ рдмрдирд╛рдЙрдБрдЫ рдлреНрд▓рд╛рдИрдорд╛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреБрд╣реЛрд╕реН рдмрд╛рд╣реНрдп рдбреЗрдЯрд╛рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджреИ (рддрдкрд╛рдИрд▓рд╛рдИ рдХреЗ рдЪрд╛рд╣рд┐рдиреНрдЫ!) рд╣рд╛рдореНрд░реЛ рдорд╛рдорд▓рд╛рдорд╛ рдмрд╛рд╣реНрдп рдбреЗрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рд░ рд░рд┐рд▓реАрдЬрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ, рдЬрд╕рдХреЛ рдЖрдзрд╛рд░рдорд╛ рд╣рд╛рдореА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдЫреМрдВ рд░ рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡рд░реВрдк рд╣рд╛рдореА рджреБрдИ рдЫрд╡рд┐рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВ: werf-doc ╨╕ werf-dev рд╡рд┐рднрд┐рдиреНрди рд╕рд░реНрдХрд┐рдЯрд╣рд░реВрдорд╛ рдЪрд▓рд╛рдЙрдиред

рдмрд╛рд╣реНрдп рдбрд╛рдЯрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдорд╛рд░реНрдлрдд рдкрд╛рд░рд┐рдд рдЧрд░рд┐рдиреНрдЫред рдпрд╣рд╛рдБ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд░рдЪрдирд╛ рдЫ:

  • RELEASES - рдврд╛рдБрдЪрд╛рдорд╛ рдорд╛рдирд╣рд░реВрдХреЛ рд╕реНрдкреЗрд╕-рд╡рд┐рднрд╛рдЬрд┐рдд рд╕реВрдЪреАрдХреЛ рд░реВрдкрдорд╛ рд░рд┐рд▓реАрдЬрд╣рд░реВрдХреЛ рд╕реВрдЪреА рд░ werf рдХреЛ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╣рд╛рд▓рдХреЛ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд╕рд╛рде рдПрдХ рд░реЗрдЦрд╛ред <╨Э╨Ю╨Ь╨Х╨а_╨а╨Х╨Ы╨Ш╨Ч╨Р>%<╨Э╨Ю╨Ь╨Х╨а_╨Т╨Х╨а╨б╨Ш╨Ш>ред рдЙрджрд╛рд╣рд░рдг: 1.0%v1.0.4-beta.20
  • CHANNELS тАФ рдврд╛рдБрдЪрд╛рдорд╛ рдорд╛рдирд╣рд░реВрдХреЛ рд╕реНрдкреЗрд╕-рд╡рд┐рднрд╛рдЬрд┐рдд рд╕реВрдЪреАрдХреЛ рд░реВрдкрдорд╛ рдЪреНрдпрд╛рдирд▓рд╣рд░реВрдХреЛ рд╕реВрдЪреА рд░ werf рдХреЛ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╣рд╛рд▓рдХреЛ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд╕рд╛рде рд▓рд╛рдЗрдиред <╨Ъ╨Р╨Э╨Р╨Ы>%<╨Э╨Ю╨Ь╨Х╨а_╨Т╨Х╨а╨б╨Ш╨Ш>ред рдЙрджрд╛рд╣рд░рдг: 1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22
  • ROOT_VERSION тАФ рд╕рд╛рдЗрдЯрдорд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реБрдиреЗ werf рд░рд┐рд▓реАрдЬ рд╕рдВрд╕реНрдХрд░рдг (рдпреЛ рд╕рдзреИрдВ рдЙрдЪреНрдЪрддрдо рд░рд┐рд▓реАрдЬ рдирдореНрдмрд░ рджреНрд╡рд╛рд░рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрди)ред рдЙрджрд╛рд╣рд░рдг: v1.0.4-beta.20
  • REVIEW_SHA - рд╕рдореАрдХреНрд╖рд╛ рдХрдорд┐рдЯрдХреЛ рд╣реНрдпрд╛рд╕ рдЬрд╕рдмрд╛рдЯ рддрдкрд╛рдИрдВрд▓реЗ рдкрд░реАрдХреНрд╖рдг рд▓реБрдкрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

рдпреА рдЪрд░рд╣рд░реВ GitLab CI рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдорд╛ рднрд░рд┐рдиреЗрдЫрдиреН, рд░ рдХрд╕рд░реА рддрд▓ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫред

рд╕рдмреИ рднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ, рд╕реБрд╡рд┐рдзрд╛рдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдЫреМрдВ werf.yaml рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЪрд░рд╣рд░реВрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН, рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░рдмрд╛рдЯ рдорд╛рдирд╣рд░реВ рдЕрд╕рд╛рдЗрди рдЧрд░реНрджреИ:

{{ $_ := set . "WerfVersions" (cat (env "CHANNELS") (env "RELEASES") | splitList " ") }}
{{ $Root := . }}
{{ $_ := set . "WerfRootVersion" (env "ROOT_VERSION") }}
{{ $_ := set . "WerfReviewCommit" (env "REVIEW_SHA") }}

рд╕рд╛рдЗрдЯрдХреЛ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдиреЗ рдХрд▓рд╛рдХреГрддрд┐рдХреЛ рд╡рд┐рд╡рд░рдг рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд╣рд╛рдореАрд▓рд╛рдИ рдЪрд╛рд╣рд┐рдиреЗ рд╕рдмреИ рдХреЗрд╕рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд╛рди рд╣реБрдиреНрдЫ (рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗ, рд╕рд╛рдереИ dev рд╕рд░реНрдХрд┐рдЯрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдВрд╕реНрдХрд░рдг рд╕рд╣рд┐рдд)ред рддреНрдпрд╕рдХрд╛рд░рдг, рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЫреБрдЯреНрдЯреИ рдмреНрд▓рдХрдорд╛ рд╕рд╛рд░реНрдиреЗрдЫреМрдВ define - рдкрдЫрд┐рдХреЛ рдкреБрди: рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ includeред рд╣рд╛рдореА рдЯреЗрдореНрдкреНрд▓реЗрдЯрдорд╛ рдирд┐рдореНрди рддрд░реНрдХрд╣рд░реВ рдкрд╛рд╕ рдЧрд░реНрдиреЗрдЫреМрдВ:

  • Version - рдЙрддреНрдкрдиреНрди рд╕рдВрд╕реНрдХрд░рдг (рдЯреНрдпрд╛рдЧ рдирд╛рдо);
  • Channel - рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЪреНрдпрд╛рдирд▓рдХреЛ рдирд╛рдо рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдХрд▓рд╛рдХреГрддрд┐ рдЙрддреНрдкрдиреНрди рдЧрд░рд┐рдПрдХреЛ рдЫ;
  • Commit - рдХрдорд┐рдЯ рд╣реНрдпрд╛рд╕, рдпрджрд┐ рдЖрд░реНрдЯрд┐рдлреНрдпрд╛рдХреНрдЯ рд╕рдореАрдХреНрд╖рд╛ рдХрдорд┐рдЯрдХреЛ рд▓рд╛рдЧрд┐ рдЙрддреНрдкрдиреНрди рдЧрд░рд┐рдПрдХреЛ рдЫ;
  • рд╕рдиреНрджрд░реНрднред

рдХрд▓рд╛рдХреГрддрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╡рд┐рд╡рд░рдг

{{- define "doc_artifact" -}}
{{- $Root := index . "Root" -}}
artifact: doc-{{ .Channel }}
from: jekyll/builder:3
mount:
- from: build_dir
  to: /usr/local/bundle
ansible:
  install:
  - shell: |
      export PATH=/usr/jekyll/bin/:$PATH
  - name: "Install Dependencies"
    shell: bundle install
    args:
      executable: /bin/bash
      chdir: /app/docs
  beforeSetup:
{{- if .Commit }}
  - shell: echo "Review SHA - {{ .Commit }}."
{{- end }}
{{- if eq .Channel "root" }}
  - name: "releases.yml HASH: {{ $Root.Files.Get "releases.yml" | sha256sum }}"
    copy:
      content: |
{{ $Root.Files.Get "releases.yml" | indent 8 }}
      dest:  /app/docs/_data/releases.yml
{{- else }}
  - file:
      path: /app/docs/_data/releases.yml
      state: touch
{{- end }}
  - file:
      path: "{{`{{ item }}`}}"
      state: directory
      mode: 0777
    with_items:
    - /app/main_site/
    - /app/ru_site/
  - file:
      dest: /app/docs/pages_ru/cli
      state: link
      src: /app/docs/pages/cli
  - shell: |
      echo -e "werfVersion: {{ .Version }}nwerfChannel: {{ .Channel }}" > /tmp/_config_additional.yml
      export PATH=/usr/jekyll/bin/:$PATH
{{- if and (ne .Version "review") (ne .Channel "root") }}
{{- $_ := set . "BaseURL" ( printf "v%s" .Channel ) }}
{{- else if ne .Channel "root" }}
{{- $_ := set . "BaseURL" .Channel }}
{{- end }}
      jekyll build -s /app/docs  -d /app/_main_site/{{ if .BaseURL }} --baseurl /{{ .BaseURL }}{{ end }} --config /app/docs/_config.yml,/tmp/_config_additional.yml
      jekyll build -s /app/docs  -d /app/_ru_site/{{ if .BaseURL }} --baseurl /{{ .BaseURL }}{{ end }} --config /app/docs/_config.yml,/app/docs/_config_ru.yml,/tmp/_config_additional.yml
    args:
      executable: /bin/bash
      chdir: /app/docs
git:
- url: https://github.com/flant/werf.git
  to: /app/
  owner: jekyll
  group: jekyll
{{- if .Commit }}
  commit: {{ .Commit }}
{{- else }}
  tag: {{ .Version }}
{{- end }}
  stageDependencies:
    install: ['docs/Gemfile','docs/Gemfile.lock']
    beforeSetup: '**/*'
  includePaths: 'docs'
  excludePaths: '**/*.sh'
{{- end }}

рдХрд▓рд╛рдХреГрддрд┐рдХреЛ рдирд╛рдо рдЕрджреНрд╡рд┐рддреАрдп рд╣реБрдиреБрдкрд░реНрдЫред рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЪреНрдпрд╛рдирд▓ рдирд╛рдо рдердкреЗрд░ (рдЪрд░рдХреЛ рдорд╛рди .Channel) рдХрд▓рд╛рдХреГрддрд┐рдХреЛ рдирд╛рдордорд╛ рдкреНрд░рддреНрдпрдпрдХреЛ рд░реВрдкрдорд╛: artifact: doc-{{ .Channel }}ред рддрд░ рддрдкрд╛рдИрдВрд▓реЗ рдмреБрдЭреНрдиреБ рдЖрд╡рд╢реНрдпрдХ рдЫ рдХрд┐ рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВрдмрд╛рдЯ рдЖрдпрд╛рдд рдЧрд░реНрджрд╛, рддрдкрд╛рдИрдВрд▓реЗ рдЙрд╣реА рдирд╛рдорд╣рд░реВ рд╕рдиреНрджрд░реНрдн рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫред

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

рддрдкрд╛рдИрдВрд▓реЗ рдлрд╛рдЗрд▓рдХреЛ рдкреНрд░рдпреЛрдЧ рдкрдирд┐ рдпрд╛рдж рдЧрд░реНрдиреБрднрдПрдХреЛ рд╣реЛрд▓рд╛ releases.yml рдмрд╛рдЯ рдЕрдиреБрд░реЛрдз рдЧрд░рд┐рдПрдХреЛ рд░рд┐рд▓реАрдЬ рдбреЗрдЯрд╛рдХреЛ рд╕рд╛рде YAML рдлрд╛рдЗрд▓ рд╣реЛ github.com (рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрджрд╛ рдкреНрд░рд╛рдкреНрдд рдПрдХ рдХрд▓рд╛рдХреГрддрд┐)ред рд╕рд╛рдЗрдЯ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрджрд╛ рдпреЛ рдЖрд╡рд╢реНрдпрдХ рдЫ, рддрд░ рд▓реЗрдЦрдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛ рдпреЛ рд╣рд╛рдореНрд░реЛ рд▓рд╛рдЧрд┐ рд░реЛрдЪрдХ рдЫ рдХрд┐рдирднрдиреЗ рдпреЛ рдпрд╕рдХреЛ рд░рд╛рдЬреНрдпрдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫред рдХреЗрд╡рд▓ рдПрдХ рдХрд▓рд╛рдХреГрддрд┐рдХреЛ рдкреБрди: рд╕рдВрдпреЛрдЬрди тАФ рд╕рд╛рдЗрдЯрдХреЛ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рдПрдХ рдХрд▓рд╛рдХреГрддрд┐ (рдпреЛ рдЕрдиреНрдп рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВрдорд╛ рдЖрд╡рд╢реНрдпрдХ рдЫреИрди)ред

рдпреЛ рд╕рд╢рд░реНрдд рдХрдерди рдкреНрд░рдпреЛрдЧ рдЧрд░реА рд▓рд╛рдЧреВ рдЧрд░рд┐рдПрдХреЛ рдЫ if рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд░ рдбрд┐рдЬрд╛рдЗрдирд╣рд░реВ рдЬрд╛рдиреБрд╣реЛрд╕реН {{ $Root.Files.Get "releases.yml" | sha256sum }} рдЪрд░рдгрдорд╛ рдЪрд░рдгрд╣рд░реБред рдпрд╕рд▓реЗ рдирд┐рдореНрди рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫ: рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдХрд▓рд╛рдХреГрддрд┐ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджрд╛ (рдЪрд░ .Channel рд╕рдБрдЧ рдмрд░рд╛рдмрд░ рдЫ root) рдлрд╛рдЗрд▓ рд╣реНрдпрд╛рд╕ releases.yml рд╕рдореНрдкреВрд░реНрдг рдЪрд░рдгрдХреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрдЫ, рдХрд┐рдирдХрд┐ рдпреЛ рдЙрддреНрддрд░рджрд╛рдпреА рдХрд╛рд░реНрдпрдХреЛ рдирд╛рдордХреЛ рдЕрдВрд╢ рд╣реЛ (рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ name)ред рдпрд╕рд░реА, рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрджрд╛ рд╕рд╛рдордЧреНрд░реА рдлрд╛рдЗрд▓ releases.yml рд╕рдореНрдмрдиреНрдзрд┐рдд рдХрд▓рд╛рдХреГрддрд┐ рдкреБрди: рдЬрдореНрдорд╛ рдЧрд░рд┐рдиреЗрдЫред

рдХреГрдкрдпрд╛ рдмрд╛рд╣реНрдп рднрдгреНрдбрд╛рд░рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдкрдирд┐ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реНред рдмрд╛рдЯ рдПрдХ рдХрд▓рд╛рдХреГрддрд┐ рдХреЛ рдЫрд╡рд┐ рдорд╛ werf рднрдгреНрдбрд╛рд░, рдХреЗрд╡рд▓ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдердкрд┐рдПрдХреЛ рдЫ /docs, рд░ рдкрд╛рд░рд┐рдд рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджреИ, рдЖрд╡рд╢реНрдпрдХ рдЯреНрдпрд╛рдЧ рд╡рд╛ рд╕рдореАрдХреНрд╖рд╛ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдХреЛ рдбреЗрдЯрд╛ рддреБрд░реБрдиреНрддреИ рдердкрд┐рдиреНрдЫред

рдЪреНрдпрд╛рдирд▓ рд░ рд╡рд┐рдореЛрдЪрди рдХреЛ рд╣рд╕реНрддрд╛рдиреНрддрд░рдг рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдХрд▓рд╛рдХреГрддрд┐ рдХреЛ рдПрдХ рд╡рд┐рд╡рд░рдг рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдЖрд░реНрдЯрд┐рдлреНрдпрд╛рдХреНрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рд╣рд╛рдореА рдЪрд░ рдорд╛ рд▓реБрдк рд╕рдВрдЧрдард┐рддред .WerfVersions ╨▓ werf.yaml:

{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ dict "Version" $VersionsDict._1 "Channel" $VersionsDict._0 "Root" $Root | include "doc_artifact" }}
---
{{ end -}}

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

рддреНрдпрд╕реИ рдЧрд░реА, рддрд░ рд▓реВрдк рдмрд┐рдирд╛, рд╣рд╛рдореА "рд╡рд┐рд╢реЗрд╖ рдХреЗрд╕рд╣рд░реВ" рдХреЛ рд▓рд╛рдЧрд┐ рдЖрд░реНрдЯрд┐рдлреНрдпрд╛рдХреНрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд▓рд╛рдИ рдХрд▓ рдЧрд░реНрдЫреМрдВ: рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐, рд╕рд╛рдереИ рд╕рдореАрдХреНрд╖рд╛ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдмрд╛рдЯ рд╕рдВрд╕реНрдХрд░рдг:

{{ dict "Version" .WerfRootVersion "Channel" "root" "Root" $Root  | include "doc_artifact" }}
---
{{- if .WerfReviewCommit }}
{{ dict "Version" "review" "Channel" "review" "Commit" .WerfReviewCommit "Root" $Root  | include "doc_artifact" }}
{{- end }}

рдХреГрдкрдпрд╛ рдзреНтАНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕рдореАрдХреНрд╖рд╛ рдХрдорд┐рдЯрдХреЛ рдХрд▓рд╛рдХреГрддрд┐ рддрдм рдорд╛рддреНрд░ рдмрдирд╛рдЗрдиреЗрдЫ рдпрджрд┐ рдЪрд░ рд╕реЗрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ .WerfReviewCommit.

рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ рддрдпрд╛рд░ рдЫрдиреН - рдпреЛ рдЖрдпрд╛рдд рд╕реБрд░реБ рдЧрд░реНрдиреЗ рд╕рдордп рд╣реЛ!

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

рдЕрдиреНрддрд┐рдо рдЫрд╡рд┐ werf-doc рдХреЛ рд╡рд┐рд╡рд░рдг

image: werf-doc
from: nginx:stable-alpine
ansible:
  setup:
  - name: "Setup /etc/nginx/nginx.conf"
    copy:
      content: |
{{ .Files.Get ".werf/nginx.conf" | indent 8 }}
      dest: /etc/nginx/nginx.conf
  - file:
      path: "{{`{{ item }}`}}"
      state: directory
      mode: 0777
    with_items:
    - /app/main_site/assets
    - /app/ru_site/assets
import:
- artifact: doc-root
  add: /app/_main_site
  to: /app/main_site
  before: setup
- artifact: doc-root
  add: /app/_ru_site
  to: /app/ru_site
  before: setup
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ $Channel := $VersionsDict._0 -}}
{{ $Version := $VersionsDict._1 -}}
- artifact: doc-{{ $Channel }}
  add: /app/_main_site
  to: /app/main_site/v{{ $Channel }}
  before: setup
{{ end -}}
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ $Channel := $VersionsDict._0 -}}
{{ $Version := $VersionsDict._1 -}}
- artifact: doc-{{ $Channel }}
  add: /app/_ru_site
  to: /app/ru_site/v{{ $Channel }}
  before: setup
{{ end -}}

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

image: werf-dev
...
import:
- artifact: doc-root
  add: /app/_main_site
  to: /app/main_site
  before: setup
- artifact: doc-root
  add: /app/_ru_site
  to: /app/ru_site
  before: setup
{{- if .WerfReviewCommit  }}
- artifact: doc-review
  add: /app/_main_site
  to: /app/main_site/review
  before: setup
- artifact: doc-review
  add: /app/_ru_site
  to: /app/ru_site/review
  before: setup
{{- end }}

рдорд╛рдерд┐ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдП рдЕрдиреБрд╕рд╛рд░, рд╕рдореАрдХреНрд╖рд╛ рдХрдорд┐рдЯрдХреЛ рд▓рд╛рдЧрд┐ рдХрд▓рд╛рдХреГрддрд┐ рд╕реЗрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдЪрд▓рд╛рдЙрдБрджрд╛ рдорд╛рддреНрд░ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗрдЫред REVIEW_SHAред рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдирднрдПрдХреЛ рдЦрдгреНрдбрдорд╛ werf-dev рдЫрд╡рд┐ рдЙрддреНрдкрдиреНрди рдирдЧрд░реНрди рд╕рдореНрднрд╡ рд╣реБрдиреЗрдЫ REVIEW_SHA, рддрд░ рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рдиреАрддрд┐ рджреНрд╡рд╛рд░рд╛ рд╕рдлрд╛рдИ werf рдорд╛ рдбрдХрд░ рдЫрд╡рд┐рд╣рд░реВрд▓реЗ werf-dev рдЫрд╡рд┐рдХреЛ рд▓рд╛рдЧрд┐ рдХрд╛рдо рдЧрд░реНрдпреЛ, рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рд░реВрдЯ рд╕рдВрд╕реНрдХрд░рдг рдЖрд░реНрдЯрд┐рдлреНрдпрд╛рдХреНрдЯрдХреЛ рд╕рд╛рде рдорд╛рддреНрд░ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдЫреЛрдбреНрдиреЗрдЫреМрдВ (рдпреЛ рдкрд╣рд┐рд▓реЗ рдиреИ рдмрдирд╛рдЗрдПрдХреЛ рдЫ), рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕рдВрд░рдЪрдирд╛рд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдиред

рд╕рднрд╛ рддрдпрд╛рд░ рдЫ! CI/CD рд░ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдмрд╛рд░реАрдХрддрд╛рд╣рд░реВрдорд╛ рдЬрд╛рдФрдВред

GitLab CI рдорд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд░ рдЧрддрд┐рд╢реАрд▓ рдирд┐рд░реНрдорд╛рдгрдХрд╛ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ

рдмрд┐рд▓реНрдб рдЪрд▓рд╛рдЙрдБрджрд╛ рд╣рд╛рдореАрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рд╡рд╛рддрд╛рд╡рд░рдгреАрдп рдЪрд░рд╣рд░реВ рд╕реЗрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ werf.yamlред рдпреЛ REVIEW_SHA рдЪрд░рдорд╛ рд▓рд╛рдЧреВ рд╣реБрдБрджреИрди, рдЬреБрди рд╣рд╛рдореАрд▓реЗ GitHub рд╣реБрдХрдмрд╛рдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд▓ рдЧрд░реНрджрд╛ рд╕реЗрдЯ рдЧрд░реНрдиреЗрдЫреМрдВред

рд╣рд╛рдореА Bash рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдЖрд╡рд╢реНрдпрдХ рдмрд╛рд╣реНрдп рдбрд╛рдЯрд╛ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗрдЫреМрдВ generate_artifacts, рдЬрд╕рд▓реЗ рджреБрдИ GitLab рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗрдЫ:

  • рдлрд╛рдЗрд▓ releases.yml рдЬрд╛рд░реА рдбрд╛рдЯрд╛ рд╕рдВрдЧ,
  • рдлрд╛рдЗрд▓ common_envs.sh, рдирд┐рд░реНрдпрд╛рдд рдЧрд░реНрди рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд╕рдорд╛рд╡реЗрд╢ред

рдлрд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА generate_artifacts рддрдкрд╛рдИрдВ рд╣рд╛рдореНрд░реЛ рдорд╛ рдкрд╛рдЙрдиреБрд╣реБрдиреЗрдЫ рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд╕рд╛рде рднрдгреНрдбрд╛рд░рд╣рд░реВред рдбрд╛рдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБ рд▓реЗрдЦрдХреЛ рд╡рд┐рд╖рдп рд╣реЛрдЗрди, рддрд░ рдлрд╛рдЗрд▓ рд╣реЛ common_envs.sh рд╣рд╛рдореНрд░реЛ рд▓рд╛рдЧрд┐ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ, рдХрд┐рдирднрдиреЗ werf рдХреЛ рдХрд╛рдо рдпрд╕рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫред рдпрд╕рдХреЛ рд╕рд╛рдордЧреНрд░реАрдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

export RELEASES='1.0%v1.0.6-4'
export CHANNELS='1.0-alpha%v1.0.7-1 1.0-beta%v1.0.7-1 1.0-ea%v1.0.6-4 1.0-stable%v1.0.6-4 1.0-rock-solid%v1.0.6-4'
export ROOT_VERSION='v1.0.6-4'

рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕реНрддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, Bash рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ source.

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

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

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

рд╣рд╛рдореА рдЧрд░реНрдиреЗрдЫреМрдВ рдмрд╛рд╣реНрдп рдбрд╛рдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд░ рд░реЗрдХрд░реНрдб GitLab рдорд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдкрд╣рд┐рд▓реЛ рдЪрд░рдг рдорд╛ (рдкреВрд░реНрд╡ рдирд┐рд░реНрдорд╛рдг) рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдлрд╛рд░рдордорд╛ рдердк рдкреНрд░рд╕рд╛рд░рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН GitLab CI рдХрд▓рд╛рдХреГрддрд┐ред рдпрд╕рд▓реЗ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рд╕рдорд╛рди рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХреЛ рд╕рд╛рде рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛рд░реНрдпрд╣рд░реВ (рдирд┐рд░реНрдорд╛рдг, рдбрд┐рдкреНрд▓реЛрдп, рдХреНрд▓реАрдирдЕрдк) рдЪрд▓рд╛рдЙрди рд░ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫред werf.yaml.

рд╕реНрдЯреЗрдЬрдХреЛ рд╕рд╛рдордЧреНрд░реА рдкреВрд░реНрд╡ рдирд┐рд░реНрдорд╛рдг рдлрд╛рдЗрд▓ .gitlab-ci.yml:

Prebuild:
  stage: prebuild
  script:
    - bash ./generate_artifacts 1> common_envs.sh
    - cat ./common_envs.sh
  artifacts:
    paths:
      - releases.yml
      - common_envs.sh
    expire_in: 2 week

рдЖрд░реНрдЯрд┐рдлреНрдпрд╛рдХреНрдЯрдорд╛ рдмрд╛рд╣реНрдп рдбрд╛рдЯрд╛ рдХреНрдпрд╛рдкреНрдЪрд░ рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдорд╛рдирдХ GitLab CI рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд░рдгрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдирд┐рд░реНрдорд╛рдг рд░ рддреИрдирд╛рддреА рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ: рдирд┐рд░реНрдорд╛рдг рд░ рдбрд┐рдкреНрд▓реЛрдпред рд╣рд╛рдореАрд▓реЗ werf GitHub рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрдмрд╛рдЯ рд╣реБрдХрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЖрдлреИрдВ рд╕реБрд░реБ рдЧрд░реНрдЫреМрдВ (рдЕрд░реНрдерд╛рдд, рдЬрдм GitHub рднрдгреНрдбрд╛рд░рдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд╣реБрдиреНрдЫрдиреН)ред рддрд┐рдиреАрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдбреЗрдЯрд╛ рд╕реЗрдХреНрд╕рдирдорд╛ GitLab рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЧреБрдгрд╣рд░реВрдорд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫ CI/CD рд╕реЗрдЯрд┐рдЩрд╣рд░реВ -> рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЯреНрд░рд┐рдЧрд░рд╣рд░реВ, рд░ рддреНрдпрд╕рдкрдЫрд┐ GitHub рдорд╛ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╡реЗрдмрд╣реБрдХ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рд╕реЗрдЯрд┐рдЩреНрд╣рд░реВ -> рд╡реЗрдмрд╣реБрдХрд╣рд░реВ).

рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:

Build:
  stage: build
  script:
    - type multiwerf && . $(multiwerf use 1.0 alpha --as-file)
    - type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
    - source common_envs.sh
    - werf build-and-publish --stages-storage :local
  except:
    refs:
      - schedules
  dependencies:
    - Prebuild

GitLab рд▓реЗ рдЪрд░рдгрдмрд╛рдЯ рдирд┐рд░реНрдорд╛рдг рдЪрд░рдгрдорд╛ рджреБрдИ рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ рдердкреНрдиреЗрдЫ рдкреВрд░реНрд╡ рдирд┐рд░реНрдорд╛рдг, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рддрдпрд╛рд░ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛рдХреЛ рд╕рд╛рде рдЪрд░ рдирд┐рд░реНрдпрд╛рдд рдЧрд░реНрдЫреМрдВ source common_envs.shред рд╕рдордпрддрд╛рд▓рд┐рдХрд╛ рдЕрдиреБрд╕рд╛рд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реБрд░реБ рдЧрд░реНрдиреЗ рдмрд╛рд╣реЗрдХ рд╣рд╛рдореА рд╕рдмреИ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг рд╕реБрд░реБ рдЧрд░реНрдЫреМрдВред рддрд╛рд▓рд┐рдХрд╛ рдЕрдиреБрд╕рд╛рд░, рд╣рд╛рдореА рд╕рдлрд╛рдИрдХреЛ рд▓рд╛рдЧрд┐ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд▓рд╛рдЙрдиреЗрдЫреМрдВ - рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛ рддреНрдпрд╣рд╛рдБ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред

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

.base_deploy: &base_deploy
  stage: deploy
  script:
    - type multiwerf && . $(multiwerf use 1.0 alpha --as-file)
    - type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
    - source common_envs.sh
    - werf deploy --stages-storage :local
  dependencies:
    - Prebuild
  except:
    refs:
      - schedules

Deploy to Production:
  <<: *base_deploy
  variables:
    WERF_KUBE_CONTEXT: prod
  environment:
    name: production
    url: werf.io
  only:
    refs:
      - master
  except:
    variables:
      - $REVIEW_SHA
    refs:
      - schedules

Deploy to Test:
  <<: *base_deploy
  variables:
    WERF_KUBE_CONTEXT: dev
  environment:
    name: test
    url: werf.test.flant.com
  except:
    refs:
      - schedules
  only:
    variables:
      - $REVIEW_SHA

рдХрд╛рд░реНрдпрд╣рд░реВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдкрдорд╛ рдХреНрд▓рд╕реНрдЯрд░ рд╕рдиреНрджрд░реНрднрд▓рд╛рдИ рд╕рдВрдХреЗрдд рдЧрд░реНрдирдорд╛ рдорд╛рддреНрд░ рднрд┐рдиреНрди рд╣реБрдиреНрдЫрдиреН рдЬрд╕рдорд╛ werf рд▓реЗ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреБрдкрд░реНрдЫ (WERF_KUBE_CONTEXT), рд░ рд▓реВрдк рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдЧрд░реНрджреИ (environment.name ╨╕ environment.url), рдЬреБрди рдкрдЫрд┐ рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╣рд░реВрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рд╣рд╛рдореА рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╣рд░реВрдХреЛ рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджреИрдиреМрдВ, рдХрд┐рдирдХрд┐... рдкреНрд░рд╢реНрдирдорд╛ рд░рд╣реЗрдХреЛ рд╡рд┐рд╖рдпрдХреЛ рд▓рд╛рдЧрд┐ рддреНрдпрд╣рд╛рдБ рдХреЗрд╣реА рд░реЛрдЪрдХ рдЫреИрди, рддрд░ рддрдкрд╛рдИрдВрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд▓реЗрдЦрдХреЛ рд▓рд╛рдЧрд┐ рднрдгреНрдбрд╛рд░рд╣рд░реВ.

рдЕрдиреНрддрд┐рдо рд╕реНрдкрд░реНрд╢

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

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрдЫ:

  • рдорд╛ рдПрдХ рд╕рдлрд╛рдИ рдЪрд░рдг рдердкреНрдиреБрд╣реЛрд╕реН .gitlab-ci.yml;
  • рд╕рдлрд╛рдИ рдХрд╛рд░реНрдпрдХреЛ рдЖрд╡рдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдердкреНрдиреБрд╣реЛрд╕реН;
  • рд▓реЗрдЦрди рдкрд╣реБрдБрдЪ рдЯреЛрдХрдирдХреЛ рд╕рд╛рде рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдорд╛ рдПрдХ рд╕рдлрд╛рдИ рдЪрд░рдг рдердкреНрджреИ .gitlab-ci.yml:

Cleanup:
  stage: cleanup
  script:
    - type multiwerf && . $(multiwerf use 1.0 alpha --as-file)
    - type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
    - source common_envs.sh
    - docker login -u nobody -p ${WERF_IMAGES_CLEANUP_PASSWORD} ${WERF_IMAGES_REPO}
    - werf cleanup --stages-storage :local
  only:
    refs:
      - schedules

рд╣рд╛рдореАрд▓реЗ рдпреЛ рдорд╛рдерд┐рдХрд╛ рд▓рдЧрднрдЧ рд╕рдмреИ рджреЗрдЦреЗрдХрд╛ рдЫреМрдВ - рдХреЗрд╡рд▓ рдпрд╕рд▓рд╛рдИ рд╕рдлрд╛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдбрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдорд╛ рдЫрд╡рд┐рд╣рд░реВ рдореЗрдЯрд╛рдЙрдиреЗ рдЕрдзрд┐рдХрд╛рд░ рднрдПрдХреЛ рдЯреЛрдХрдирдХреЛ рд╕рд╛рде рдбрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдорд╛ рд▓рдЧ рдЗрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ (рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдЬрд╛рд░реА рдЧрд░рд┐рдПрдХреЛ GitLab CI рдХрд╛рд░реНрдп рдЯреЛрдХрдирдорд╛ рдЫреИрдиред рдпрд╕реНрддреЛ рдЕрдзрд┐рдХрд╛рд░)ред рдЯреЛрдХрди рдкрд╣рд┐рд▓реЗ рдиреИ GitLab рдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреБ рдкрд░реНрдЫ рд░ рдпрд╕рдХреЛ рдорд╛рди рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реБрдиреБрдкрд░реНрдЫ WERF_IMAGES_CLEANUP_PASSWORD рдкрд░рд┐рдпреЛрдЬрдирд╛ (CI/CD рд╕реЗрдЯрд┐рдЩрд╣рд░реВ -> рдЪрд░рд╣рд░реВ).

рдЖрд╡рд╢реНрдпрдХ рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрдЧ рдПрдХ рд╕рдлрд╛рдИ рдХрд╛рд░реНрдп рдердкреНрджреИ рдорд╛ рдЧрд░рд┐рдиреНрдЫ CI/CD ->
рддрд╛рд▓рд┐рдХрд╛
.

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

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

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

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

рдирд┐рд╖реНрдХрд░реНрд╖

  • werf рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирд╛рд▓реЗ рдПрд╕реЗрдореНрдмрд▓реАрд▓рд╛рдИ рдЪрд╛рдБрдбреИ рдХрд╛рдо рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ рджреБрдмреИ рдПрд╕реЗрдореНрдмрд▓реАрдХреЛ рдХреНрдпрд╛рд╕рд┐рдВрдЧ рд░ рдмрд╛рд╣реНрдп рднрдгреНрдбрд╛рд░рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрд╛ рдХреНрдпрд╛рд╕рд┐рдВрдЧрдХреЛ рдХрд╛рд░рдгред
  • рдмрд╛рд╣реНрдп Git рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрд╛ рдкреНрд░рддреНрдпреЗрдХ рдкрдЯрдХ рд╕рдореНрдкреВрд░реНрдг рднрдгреНрдбрд╛рд░ рдХреНрд▓реЛрди рдЧрд░реНрди рд╡рд╛ рдХрдард┐рди рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рди рддрд░реНрдХрдХреЛ рд╕рд╛рде рд╡реНрд╣реАрд▓ рдкреБрди: рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдЧрд░реНрдиреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣рдЯрд╛рдЙрдБрдЫред werf рд▓реЗ рдХреНрдпрд╛рд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ рд░ рдХреНрд▓реЛрдирд┐рдЩ рдПрдХ рдкрдЯрдХ рдорд╛рддреНрд░ рдЧрд░реНрдЫ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ fetch рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реБрдБрджрд╛ рдорд╛рддреНрд░ред
  • рдирд┐рд░реНрдорд╛рдг рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рдорд╛ рдЧреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ werf.yaml рдЬрд╕рдХреЛ рдирддрд┐рдЬрд╛ рдмрд╛рд╣реНрдп рдбреЗрдЯрд╛рдорд╛ рдирд┐рд░реНрднрд░ рд╣реБрдиреНрдЫ рднрдиреНрдиреЗ рд╕рднрд╛ рд╡рд░реНрдгрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред
  • рдорд╛рдЙрдиреНрдЯ рдЗрди werf рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирд╛рд▓реЗ рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВрдХреЛ рд╕рдЩреНрдХрд▓рдирд▓рд╛рдИ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рдЧрддрд┐ рджрд┐рдиреНрдЫ - рдХреНрдпрд╛рд╕рдХреЛ рдХрд╛рд░рдгрд▓реЗ, рдЬреБрди рд╕рдмреИ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд╣рд░реВрдорд╛ рд╕рд╛рдорд╛рдиреНрдп рдЫред
  • werf рд▓реЗ рд╕рдлрд╛рдИ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдБрдЫ, рдЬреБрди рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджрд╛ рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╣реБрдиреНрдЫред

PS

рд╣рд╛рдореНрд░реЛ рдмреНрд▓рдЧрдорд╛ рдкрдирд┐ рдкрдвреНрдиреБрд╣реЛрд╕реН:

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

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