рдбрд╛рдпрдиреЕрдорд┐рдХ рдЕрд╕реЗрдВрдмреНрд▓реА рдЖрдгрд┐ рд╡реНрд╣реЗрд░рдлрд╕рд╣ рдбреЙрдХрд░ рдкреНрд░рддрд┐рдорд╛рдВрдЪреА рдЙрдкрдпреЛрдЬрди рдЖрд╡реГрддреНрддреА рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рд╕рд╛рдЗрдЯрдЪреЗ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рдкрд░реВрди

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

рдбрд╛рдпрдиреЕрдорд┐рдХ рдЕрд╕реЗрдВрдмреНрд▓реА рдЖрдгрд┐ рд╡реНрд╣реЗрд░рдлрд╕рд╣ рдбреЙрдХрд░ рдкреНрд░рддрд┐рдорд╛рдВрдЪреА рдЙрдкрдпреЛрдЬрди рдЖрд╡реГрддреНрддреА рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рд╕рд╛рдЗрдЯрдЪреЗ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рдкрд░реВрди

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

рдкрд░рд┐рдЪрдп: рд╕рд╛рдЗрдЯ рдХрд╢реА рдХрд╛рд░реНрдп рдХрд░рддреЗ

рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, werf рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рддреНрдпрд╛рдЪреНрдпрд╛ рдХреЛрдбрд╕рд╣ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рд╣реЗ рдХрд╛рд╣реА рд╡рд┐рдХрд╛рд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд▓рд╛рджрддреЗ рдЬреЗ рд╕рд╛рдорд╛рдиреНрдпрдд: рдпрд╛ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╡реНрдпрд╛рдкреНрддреАрдЪреНрдпрд╛ рдкрд▓реАрдХрдбреЗ рдЕрд╕рддрд╛рдд, рдкрд░рдВрддреБ рдХрдореАрддрдХрдореА рдЕрд╕реЗ рдореНрд╣рдЯрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдХреА:

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

рд╣реЗ рд╕рд░реНрд╡ "рдЖрддреАрд▓ рд╕реНрд╡рдпрдВрдкрд╛рдХрдШрд░" рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдкрд╛рд╕реВрди рд▓рдкрд╡рдгреНрдпрд╛рд╕рд╛рдареА, рддреНрдпрд╛рд▓рд╛ "рдлрдХреНрдд рдХрд╛рд░реНрдп рдХрд░рддреЗ" рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рдСрдлрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдХреЗрд▓реЗ рд╡реЗрдЧрд│реЗ рд╡реЗрд░реНрдл рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЖрдгрд┐ рдЕрдкрдбреЗрдЯ рдЯреВрд▓ - рд╣реЗ рдЖрд╣реЗ multiwerf. рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рд░рд┐рд▓реАрдЭ рдирдВрдмрд░ рдЖрдгрд┐ рддреБрдореНрд╣реА рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдЕрд╕рд▓реЗрд▓реЗ рд╕реНрдерд┐рд░рддрд╛ рдЪреЕрдиреЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдорд▓реНрдЯреАрд╡рд░реНрдл рдЪреЕрдиреЗрд▓рд╡рд░ рдирд╡реАрди рдЖрд╡реГрддреНрддреА рдЖрд╣реЗ рдХрд╛ рддреЗ рддрдкрд╛рд╕реЗрд▓ рдЖрдгрд┐ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕ рддреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрд▓.

рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░реАрд▓ рдЖрд╡реГрддреНрддреА рдирд┐рд╡рдб рдореЗрдиреВрдордзреНрдпреЗ, рдкреНрд░рддреНрдпреЗрдХ рдЪреЕрдиреЗрд▓рдордзреНрдпреЗ werf рдЪреНрдпрд╛ рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреНрдпрд╛ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд. рдбрд┐рдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рдкрддреНрддреНрдпрд╛рдиреБрд╕рд╛рд░ werf.io/documentation рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЭрд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рд╕реНрдерд┐рд░ рдЪреЕрдиреЗрд▓рдЪреА рдЖрд╡реГрддреНрддреА рдЙрдШрдбрддреЗ - рддреА рд╢реЛрдз рдЗрдВрдЬрд┐рдирджреНрд╡рд╛рд░реЗ рджреЗрдЦреАрд▓ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ. рдЪреЕрдиреЗрд▓рд╕рд╛рдареА рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рд╕реНрд╡рддрдВрддреНрд░ рдкрддреНрддреНрдпрд╛рдВрд╡рд░ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, werf.io/v1.0-beta/documentation рдмреАрдЯрд╛ рд░рд┐рд▓реАрдЬ 1.0 рд╕рд╛рдареА).

рдПрдХреВрдг, рд╕рд╛рдЗрдЯрд╡рд░ рдЦрд╛рд▓реАрд▓ рдЖрд╡реГрддреНрддреНрдпрд╛ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд:

  1. рд░реВрдЯ (рдбрд┐рдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рдЙрдШрдбрддреЗ),
  2. рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд╢рдирд╛рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдХреНрд░рд┐рдп рдЕрджреНрдпрддрди рдЪреЕрдиреЗрд▓рд╕рд╛рдареА (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, werf.io/v1.0-beta).

рд╕рд╛рдЗрдЯрдЪреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╡реГрддреНрддреА рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рддреЗ рд╡рд╛рдкрд░реВрди рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреЗ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ рдЬреЗрдХрд┐рд▓рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдЪрд╛рд▓рд╡реВрди /docs werf рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрджреЗрд╢ (jekyll build), рдЖрд╡рд╢реНрдпрдХ рдЖрд╡реГрддреНрддреАрдЪреНрдпрд╛ Git рдЯреЕрдЧрд╡рд░ рд╕реНрд╡рд┐рдЪ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░.

рд╣реЗ рдлрдХреНрдд рдЬреЛрдбрдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ:

  • рдпреБрдЯрд┐рд▓рд┐рдЯреА рд╕реНрд╡рддрдГ (werf) рдЕрд╕реЗрдВрдмреНрд▓реАрд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ;
  • CI/CD рдкреНрд░рдХреНрд░рд┐рдпрд╛ GitLab CI рдЪреНрдпрд╛ рдЖрдзрд╛рд░рд╛рд╡рд░ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд;
  • рдЖрдгрд┐ рд╣реЗ рд╕рд░реНрд╡ рдЕрд░реНрдерд╛рддрдЪ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдордзреНрдпреЗ рдЪрд╛рд▓рддреЗ.

рдХрд╛рд░реНрдпреЗ

рдЖрддрд╛ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реА рд╕рд░реНрд╡ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрдгрд╛рд░реА рдХрд╛рд░реНрдпреЗ рддрдпрд╛рд░ рдХрд░реВрдпрд╛:

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

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

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

рддреЛ рдмрд╛рд╣реЗрд░ рд╡рд│рддреЗ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдмрд╛рд╣реНрдп рдбреЗрдЯрд╛ рдмрджрд▓рдгреНрдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ.

рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА

рдПрдХ рджреГрд╖реНрдЯреАрдХреЛрди рдирд┐рд╡рдбрдгреЗ

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

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

рдЕрдзрд┐рдХ рдЕрдЪреВрдХ рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рджреЛрди рдкреНрд░рддрд┐рдорд╛ рдЧреЛрд│рд╛ рдХрд░рдд рдЖрд╣реЛрдд: рдПрдХ рдЙрддреНрдкрд╛рджрди рд╕рд░реНрдХрд┐рдЯрд╕рд╛рдареА, рджреБрд╕рд░реА рдбреЗрд╡реНрд╣ рд╕рд░реНрдХрд┐рдЯрд╕рд╛рдареА рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╣реЗ. рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рддрд┐рдорд╛ рдореБрдЦреНрдпрд╕рд╣ рдХреЗрд╡рд│ рдбреЗрд╡реНрд╣ рд╕рд░реНрдХрд┐рдЯрд╡рд░ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ (рд▓рд╛рдБрдЪ рдХреЗрд▓реЗрд▓реА) рдЖрдгрд┐ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдХрдорд┐рдЯрдордзреАрд▓ рд╕рд╛рдЗрдЯрдЪреА рдЖрд╡реГрддреНрддреА рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рддреЗ рдЖрдгрд┐ рддреНрдпрд╛ рджрд░рдореНрдпрд╛рди рд░рд╛рдЙрдЯрд┐рдВрдЧ рдЗрдирдЧреНрд░реЗрд╕ рд╕рдВрд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░реВрди рдХреЗрд▓реЗ рдЬрд╛рддреЗ.

werf vs git рдХреНрд▓реЛрди рдЖрдгрд┐ рдХрд▓рд╛рдХреГрддреА

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

рдпреЗрдереЗ werf рдЙрдкрдпреБрдХреНрддрддрд╛ рд╕реНрд╡рддрдГрдЪ рдЖрдордЪреНрдпрд╛ рдорджрддреАрд▓рд╛ рдпреЗрддреЗ, рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рддреЗ рд╕реНрдорд╛рд░реНрдЯ рдХреЕрд╢рд┐рдВрдЧ рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ рдмрд╛рд╣реНрдп рднрд╛рдВрдбрд╛рд░. рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдордзреВрди рдХреЛрдб рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА werf рд╡рд╛рдкрд░рд▓реНрдпрд╛рдиреЗ рдмрд┐рд▓реНрдбрд▓рд╛ рд▓рдХреНрд╖рдгреАрдп рдЧрддреА рдорд┐рд│реЗрд▓, рдХрд╛рд░рдг werf рдореВрд▓рдд: рдПрдХрджрд╛ рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдХреНрд▓реЛрди рдХрд░рддреЗ рдЖрдгрд┐ рдирдВрддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рдлрдХреНрдд fetch рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдордзреВрди рдбреЗрдЯрд╛ рдЬреЛрдбрддрд╛рдирд╛, рдЖрдореНрд╣реА рдлрдХреНрдд рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд┐рд╡рдбреВ рд╢рдХрддреЛ (рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рд╣реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЖрд╣реЗ docs), рдЬреЗ рдЬреЛрдбрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдЪреЗ рдкреНрд░рдорд╛рдг рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рдХрдореА рдХрд░реЗрд▓.

рдЬреЗрдХрд┐рд▓ рд╣реЗ рд╕реНрдЯреЕрдЯрд┐рдХ рдбреЗрдЯрд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓реЗ рдПрдХ рд╕рд╛рдзрди рдЕрд╕рд▓реНрдпрд╛рдиреЗ рдЖрдгрд┐ рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдореЗрдордзреНрдпреЗ рддреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ, рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреЗ рддрд░реНрдХрд╕рдВрдЧрдд рдЕрд╕реЗрд▓. werf рдХрд▓рд╛рдХреГрддреА, рдЖрдгрд┐ рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдореЗрдордзреНрдпреЗ рдлрдХреНрдд рд╕рдВрдХрд▓рди рдкрд░рд┐рдгрд╛рдо рдЖрдпрд╛рдд рдХрд░рд╛.

рдЖрдореНрд╣реА werf.yaml рд▓рд┐рд╣рд┐рддреЛ

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

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") }}

рд╕рд╛рдЗрдЯрдЪреА рд╕реНрдерд┐рд░ рдЖрд╡реГрддреНрддреА рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд░реНрдЯрд┐рдлреЕрдХреНрдЯрдЪреЗ рд╡рд░реНрдгрди рд╕рд╛рдорд╛рдиреНрдпрдд: рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ рдкреНрд░рдХрд░рдгрд╛рдВрд╕рд╛рдареА рд╕рдорд╛рди рдЕрд╕рддреЗ (рдореВрд│ рдЖрд╡реГрддреНрддреА рддрдпрд╛рд░ рдХрд░рдгреЗ, рддрд╕реЗрдЪ рдбреЗрд╡реНрд╣ рд╕рд░реНрдХрд┐рдЯрд╕рд╛рдареА рдЖрд╡реГрддреНрддреАрд╕рд╣). рдореНрд╣рдгреВрди, рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░реВрди рдЖрдореНрд╣реА рддреЗ рд╡реЗрдЧрд│реНрдпрд╛ рдмреНрд▓реЙрдХрдордзреНрдпреЗ рд╣рд▓рд╡реВ 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 }}. рдкрд░рдВрддреБ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХреА рдХрд▓рд╛рдХреГрддреАрдВрдордзреВрди рдЖрдпрд╛рдд рдХрд░рддрд╛рдирд╛, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рдорд╛рди рдирд╛рд╡рд╛рдВрдЪрд╛ рд╕рдВрджрд░реНрдн рдШреНрдпрд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓.

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

рдЖрдореНрд╣реА рдмреЕрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ рдЖрд╡рд╢реНрдпрдХ рдмрд╛рд╣реНрдп рдбреЗрдЯрд╛ рддрдпрд╛рд░ рдХрд░реВ 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'

рддреБрдореНрд╣реА рдЕрд╢рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪреЗ рдЖрдЙрдЯрдкреБрдЯ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдмреЕрд╢ рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░реВрди source.

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

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

рдЬрд░ рдкрд┐рдвреА 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 рдХреНрд▓реАрдирдЕрдк рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рд╕реЛрдкреЗ рдХрд░рддреЗ, рдЬреЗ рдбрд╛рдпрдиреЕрдорд┐рдХрд▓реА рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдХрд░рддрд╛рдирд╛ рд╡рд┐рд╢реЗрд╖рддрдГ рдорд╣рддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ.

PS

рдЖрдордЪреНрдпрд╛ рдмреНрд▓реЙрдЧрд╡рд░ рджреЗрдЦреАрд▓ рд╡рд╛рдЪрд╛:

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

DDoS рд╕рдВрд░рдХреНрд╖рдг, VPS VDS рд╕рд░реНрд╡реНрд╣рд░ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕рд╛рдЗрдЯрд╕рд╛рдареА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдЦрд░реЗрджреА рдХрд░рд╛ ЁЯФе рдбреАрдбреЙрд╕ рд╕рдВрд░рдХреНрд╖рдгрд╛рд╕рд╣ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ, рд╡реНрд╣реАрдкреАрдПрд╕ (VPS) рд╡реНрд╣реАрдбреАрдПрд╕ (VDS) рд╕рд░реНрд╡реНрд╣рд░реНрд╕ рдЦрд░реЗрджреА рдХрд░рд╛ | ProHoster