
тАФ Kubernetes рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдУрдкрди-рд╕реЛрд░реНрд╕ GitOps CLI рдЙрдкрдпреЛрдЧрд┐рддрд╛ред рдореЗрдВ рдЗрдореЗрдЬ рдмрд┐рд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рд╢реБрд░реВ рдХреА рдЧрдИ: рд╕рд╛рдордЧреНрд░реА рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЯреИрдЧ рдХрд░рдирд╛ рд╕рд╛рдордЧреНрд░реА-рдЖрдзрд╛рд░рд┐рдд рдЯреИрдЧрд┐рдВрдЧ. рдЕрдм рддрдХ, werf рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЯреИрдЧрд┐рдВрдЧ рдпреЛрдЬрдирд╛ рдореЗрдВ Git рдЯреИрдЧ, Git рд╢рд╛рдЦрд╛, рдпрд╛ Git рдХрдорд┐рдЯ рджреНрд╡рд╛рд░рд╛ Docker рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЯреИрдЧ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рдерд╛ред рд▓реЗрдХрд┐рди рдЗрди рд╕рднреА рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рдирдИ рдЯреИрдЧрд┐рдВрдЧ рд░рдгрдиреАрддрд┐ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рддрдерд╛ рдпрд╣ рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рдиреАрдЪреЗ рджреА рдЧрдИ рд╣реИред
рдПрдХрд▓ Git рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╕реЗ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╢реБрд░реВ рдХрд░рдирд╛
рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдИ рдХрдореЛрдмреЗрд╢ рд╕реНрд╡рддрдВрддреНрд░ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд░рд┐рд▓реАрдЬрд╝ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдПрдХ рд╕рдордп рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдХреЛрдб рднрдВрдбрд╛рд░рдг рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдРрд╕реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдПрдХ рд╣реА рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ рд░рдЦрдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ рдЬрд╣рд╛рдБ рд╕реЗрд╡рд╛рдПрдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рдПрдХрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдмрдВрдзреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреЗ рдФрд░ рдЙрдирдХреА рд░рд┐рд▓реАрдЬ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ CI/CD рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреА рдЬрд╛рдПрдЧреАред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдХреНрд╕рд░ рдПрдХ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрдИ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛... рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬрд╝рд░реВрд░рдд рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдо рдЖрдЧреЗ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ: рдРрд╕реА рдХрдИ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдПрдХ рд╣реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрддреА рд╣реИрдВ рдФрд░ рд░рд┐рд▓реАрдЬ CI/CD рдореЗрдВ рдПрдХ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддреА рд╣реИред
Git рд╢рд╛рдЦрд╛ рдФрд░ Git рдЯреИрдЧ рджреНрд╡рд╛рд░рд╛ рдЯреИрдЧрд┐рдВрдЧ
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╕рдмрд╕реЗ рдЖрдо рдЯреИрдЧрд┐рдВрдЧ рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЯреИрдЧ-рдпрд╛-рд╢рд╛рдЦрд╛. Git рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдЦрд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЯреИрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рджреА рдЧрдИ рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП рд╢рд╛рдЦрд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдЫрд╡рд┐ рд╣реЛрддреА рд╣реИред Git рдЯреИрдЧ рдХреЗ рд▓рд┐рдП, рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЯреИрдЧ рдирд╛рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬрдм рдПрдХ рдирдпрд╛ Git рдЯреИрдЧ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рддреЛ Docker рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ Docker рдЯреИрдЧ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:
-
myregistry.org/myproject/frontend:v1.1.10 -
myregistry.org/myproject/myservice1:v1.1.10 -
myregistry.org/myproject/myservice2:v1.1.10 -
myregistry.org/myproject/myservice3:v1.1.10 -
myregistry.org/myproject/myservice4:v1.1.10 -
myregistry.org/myproject/myservice5:v1.1.10 -
myregistry.org/myproject/database:v1.1.10
рдЗрди рдирдП рдЫрд╡рд┐ рдирд╛рдореЛрдВ рдХреЛ рд╣реЗрд▓реНрдо рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдк рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЖрджреЗрд╢ рдЪрд▓рд╛рддреЗ рд╣реИрдВ werf deploy рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ image Kubernetes рд╕рдВрд╕рд╛рдзрди рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдореЗрдВ рдЫрд╡рд┐ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдирд╛ред
рд╕рдорд╕реНрдпрд╛: рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрдм рдЫрд╡рд┐ рдХреА рд╕рд╛рдордЧреНрд░реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд░реЛрд▓рдЖрдЙрдЯ (Git рдЯреИрдЧ) рдХреЗ рдмрд╛рдж рд╕реЗ рдирд╣реАрдВ рдмрджрд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЙрд╕рдХрд╛ Docker рдЯреИрдЧ рдмрджрд▓рд╛ рд╣реИ, рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рдбрд╛рдЙрдирдЯрд╛рдЗрдо рд╕рдВрднрд╡ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕ рд░реАрдмреВрдЯ рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░рдг рдирд╣реАрдВ рдерд╛ред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╡рд░реНрддрдорд╛рди рдЯреИрдЧрд┐рдВрдЧ рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде, рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ Git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдЗрди рдХрдИ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд░реЛрд▓рдЖрдЙрдЯ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдРрд╕реА рдпреЛрдЬрдирд╛ рдЕрддрд┐рднрд╛рд░рд┐рдд рдПрд╡рдВ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдХрдИ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдПрдХ рд╣реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдФрд░ рдбреЙрдХрд░ рдЯреИрдЧ рдмрдирд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рддрд╛рдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреБрдирд░рд╛рд░рдВрдн рди рд╣реЛред
Git рдХрдорд┐рдЯ рджреНрд╡рд╛рд░рд╛ рдЯреИрдЧрд┐рдВрдЧ
werf рдореЗрдВ Git рдХрдорд┐рдЯреНрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЯреИрдЧрд┐рдВрдЧ рд░рдгрдиреАрддрд┐ рднреА рд╣реИред
Git-commit, Git рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ рдФрд░ Git рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдВрд╢реЛрдзрди рдЗрддрд┐рд╣рд╛рд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП Docker рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЯреИрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, Git рдХрдорд┐рдЯ рджреНрд╡рд╛рд░рд╛ рдЯреИрдЧрд┐рдВрдЧ рдореЗрдВ рд╡рд╣реА рдХрдорд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ Git рд╢рд╛рдЦрд╛рдУрдВ рдпрд╛ Git рдЯреИрдЧ рджреНрд╡рд╛рд░рд╛ рдЯреИрдЧрд┐рдВрдЧ рдореЗрдВ рд╣реИрдВ:
- рдПрдХ рдЦрд╛рд▓реА рдХрдорд┐рдЯ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЫрд╡рд┐ рдХрд╛ рдбреЙрдХрд░ рдЯреИрдЧ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рдПрдХ рдорд░реНрдЬ рдХрдорд┐рдЯ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЫрд╡рд┐ рдХрд╛ рдбреЙрдХрд░ рдЯреИрдЧ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
- рдПрдХ рдХрдорд┐рдЯ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ Git рдореЗрдВ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЫрд╡рд┐ рдореЗрдВ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЫрд╡рд┐ рдХрд╛ Docker рдЯреИрдЧ рдлрд┐рд░ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
Git рд╢рд╛рдЦрд╛ рдирд╛рдо рд╕реЗ рдЯреИрдЧ рдХрд░рдиреЗ рдкрд░ рдЫрд╡рд┐ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛
рдЧрд┐рдЯ рд╢рд╛рдЦрд╛ рдЯреИрдЧрд┐рдВрдЧ рд░рдгрдиреАрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рд╢рд╛рдЦрд╛ рдирд╛рдо рд╕реЗ рдЯреИрдЧрд┐рдВрдЧ рддрдм рддрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдЬрдм рддрдХ рдЙрд╕ рд╢рд╛рдЦрд╛ рдкрд░ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХрд╛рд▓рд╛рдиреБрдХреНрд░рдорд┐рдХ рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдПрдХрддреНрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдирд┐рд╢реНрдЪрд┐рдд рд╢рд╛рдЦрд╛ рд╕реЗ рд╕рдВрдмрджреНрдз рдкреБрд░рд╛рдиреЗ рдХрдорд┐рдЯ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рддреЛ werf рдкреБрд░рд╛рдиреЗ рдХрдорд┐рдЯ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рдХреЗ рдирдП рдирд┐рд░реНрдорд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд Docker рдЯреИрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЫрд╡рд┐ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджреЗрдЧрд╛ред рдЗрд╕ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрдиреЛрдВ рдореЗрдВ рдЕрдм рдкреЙрдб рдкреБрдирдГ рдЖрд░рдВрдн рд╣реЛрдиреЗ рдХреЗ рджреМрд░рд╛рди рдЫрд╡рд┐ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди CI рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдЦреЛ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рд┐рдВрдХ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдПрдХ рд╣реА рд╢рд╛рдЦрд╛ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдкреБрд╢ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдереЛрдбрд╝реЗ рд╕рдордп рдХрд╛ рдЕрдВрддрд░рд╛рд▓ рд╣реЛрдиреЗ рдкрд░, рдкреБрд░рд╛рдирд╛ рдХрдорд┐рдЯ рдирдП рдХрдорд┐рдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЫрд╡рд┐ рдХрд╛ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг Git рд╢рд╛рдЦрд╛ рдЯреИрдЧ рджреНрд╡рд╛рд░рд╛ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджреЗрдЧрд╛ред рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ CI/CD рдкреНрд░рдгрд╛рд▓реА рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, GitLab CI рдореЗрдВ, рдмрд╛рдж рдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдХрдорд┐рдЯ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рднреА рдкреНрд░рдгрд╛рд▓рд┐рдпрд╛рдБ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ рдФрд░ рдРрд╕реА рдореМрд▓рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рд╛рдордЧреНрд░реА-рдЖрдзрд╛рд░рд┐рдд рдЯреИрдЧрд┐рдВрдЧ рдХреНрдпрд╛ рд╣реИ?
рддреЛ рдлрд┐рд░, рд╕рд╛рдордЧреНрд░реА-рдЖрдзрд╛рд░рд┐рдд рдЯреИрдЧрд┐рдВрдЧ рдХреНрдпрд╛ рд╣реИ?
Docker рдЯреИрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Git рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡реНрд╕ (Git рд╢рд╛рдЦрд╛, Git рдЯреИрдЧ...) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдЪреЗрдХрд╕рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
- рдЫрд╡рд┐ рд╕рд╛рдордЧреНрд░реА. рдЫрд╡рд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЯреИрдЧ рдЙрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддрд╛ рд╣реИред рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рддреЗ рд╕рдордп, рдпрджрд┐ рдЫрд╡рд┐ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ рдмрджрд▓реА рдЧрдИ рд╣реИрдВ рддреЛ рдпрд╣ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛;
- Git рдореЗрдВ рдЗрд╕ рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕. рд╡рд┐рднрд┐рдиреНрди Git рд╢рд╛рдЦрд╛рдУрдВ рдФрд░ werf рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдирд┐рд░реНрдорд╛рдг рдЗрддрд┐рд╣рд╛рд╕ рд╕реЗ рдЬреБрдбрд╝реА рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ ID рдЯреИрдЧ рд╣реЛрдВрдЧреЗред
рддрдерд╛рдХрдерд┐рдд рдЯреИрдЧ рдРрд╕реЗ рд╣реА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЫрд╡рд┐ рдордВрдЪ рд╣рд╕реНрддрд╛рдХреНрд╖рд░.
рдкреНрд░рддреНрдпреЗрдХ рдЫрд╡рд┐ рдореЗрдВ рдЪрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ: from, before-install, git-archive, install, imports-after-install, before-setup, ... git-latest-patch рдЖрджрд┐ред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдордВрдЪ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рдордВрдЪ рд╣рд╕реНрддрд╛рдХреНрд╖рд░).
рдЗрди рдЪрд░рдгреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдиреА рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдХреЛ рдЗрди рдЪрд░рдгреЛрдВ рдХреЗ рд╕рдореВрд╣ рдХреЗ рддрдерд╛рдХрдерд┐рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдЯреИрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЪрд░рдг рд╣рд╕реНрддрд╛рдХреНрд╖рд░, - рдЬреЛ рдЫрд╡рд┐ рдХреЗ рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рд╣реИред
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЫрд╡рд┐ werf.yaml рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рдРрд╕рд╛ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛрдЧрд╛ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдПрдХ рдбреЙрдХрд░ рдЯреИрдЧ рд╣реЛрдЧрд╛ред
рд╕реНрдЯреЗрдЬ рд╕рд┐рдЧреНрдиреЗрдЪрд░ рдЗрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИ:
- рдЦрд╛рд▓реА Git рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдУрдВ рдХреЗ рдкреНрд░рддрд┐ рд▓рдЪреАрд▓рд╛ред
- Git рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдУрдВ рдХреЗ рдкреНрд░рддрд┐ рд▓рдЪреАрд▓рд╛, рдЬреЛ рдЫрд╡рд┐ рд╕реЗ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИред
- рд╢рд╛рдЦрд╛ рдХреЗ рдкреБрд░рд╛рдиреЗ Git рдХрдорд┐рдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдкрд░ рдЫрд╡рд┐ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдорд┐рдЯрд╛рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдпрд╣ рдЕрдм рдЕрдиреБрд╢рдВрд╕рд┐рдд рдЯреИрдЧрд┐рдВрдЧ рд░рдгрдиреАрддрд┐ рд╣реИ рдФрд░ рд╕рднреА CI рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП werf рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
werf рдореЗрдВ рд╕рдХреНрд╖рдо рдФрд░ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ
рдЯреАрдо рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ werf publish: --tag-by-stages-signature=true|false
CI рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ, рдЯреИрдЧрд┐рдВрдЧ рд░рдгрдиреАрддрд┐ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ werf ci-env. рдкрд╣рд▓реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ werf ci-env --tagging-strategy=tag-or-branch. рдЕрдм, рдпрджрд┐ рд╣рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ werf ci-env --tagging-strategy=stages-signature рдпрд╛ рдпрджрд┐ рдЖрдк рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ werf рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЯреИрдЧрд┐рдВрдЧ рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ stages-signature. рдЯреАрдо werf ci-env рдЯреАрдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЭрдВрдбреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░ рджреЗрдЧрд╛ werf build-and-publish (рдпрд╛ werf publish), рдЗрд╕рд▓рд┐рдП рдЗрди рдХрдорд╛рдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрджреЗрд╢:
werf publish --stages-storage :local --images-repo registry.hello.com/web/core/system --tag-by-stages-signatureтАж рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
-
registry.hello.com/web/core/system/backend:4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d -
registry.hello.com/web/core/system/frontend:f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6
рдпрд╣рд╛рдВ 4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d - рдпрд╣ рдЫрд╡рд┐ рдЪрд░рдгреЛрдВ рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИ backendрдФрд░ f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6 тАФ рдЫрд╡рд┐ рдЪрд░рдгреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ frontend.
рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп werf_container_image ╨╕ werf_container_env рд╣реЗрд▓реНрдо рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рдпреЗ рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рдЫрд╡рд┐ рдирд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗред
CI рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрджрд╛рд╣рд░рдг:
type multiwerf && source <(multiwerf use 1.1 beta)
type werf && source <(werf ci-env gitlab)
werf build-and-publish|deployрд╕реЗрдЯрдЕрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ:
- ;
- ;
- .
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░
- рдирдпрд╛ рд╡рд┐рдХрд▓реНрдк
werf publish --tag-by-stages-signature=true|false. - рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдирдпрд╛ рдореВрд▓реНрдп
werf ci-env --tagging-strategy=stages-signature|tag-or-branch(рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдЧрд╛stages-signature). - рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ Git рдХрдорд┐рдЯ рдЯреИрдЧрд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ (
WERF_TAG_GIT_COMMITрдпрд╛ рд╡рд┐рдХрд▓реНрдкwerf publish --tag-git-commit COMMIT), рддреЛ рдЯреИрдЧрд┐рдВрдЧ рд░рдгрдиреАрддрд┐ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЪрд░рдг-рд╣рд╕реНрддрд╛рдХреНрд╖рд░. - рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХрд┐ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рддреБрд░рдВрдд рдирдИ рдЯреИрдЧрд┐рдВрдЧ рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПред
- рдкреБрд░рд╛рдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ werf 1.1 рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдирдИ рдЯреИрдЧрд┐рдВрдЧ рдпреЛрдЬрдирд╛ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреБрд░рд╛рдиреА рдЯреИрдЧ-рдпрд╛-рд╢рд╛рдЦрд╛ рдЕрднреА рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИ.
рд╕рд╛рдордЧреНрд░реА-рдЖрдзрд╛рд░рд┐рдд рдЯреИрдЧрд┐рдВрдЧ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреА рд╣реИ:
- рдЦрд╛рд▓реА Git рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП Docker рдЯреИрдЧ рдирд╛рдо рд▓рдЪреАрд▓рд╛рдкрдиред
- Git рдХрдорд┐рдЯреНрд╕ рдХреЗ рдкреНрд░рддрд┐ Docker рдЯреИрдЧ рдирд╛рдо рдХреА рд▓рдЪреАрд▓рд╛рдкрди, рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВред
- Git рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреЗ Git рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдкрд░ рдЫрд╡рд┐ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдорд┐рдЯрд╛рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдЖрдирдВрдж рд▓реЗрдирд╛! рдФрд░ рд╣рдорд╕реЗ рдорд┐рд▓рдиреЗ рдЖрдирд╛ рдордд рднреВрд▓рдирд╛ , рдХреЛрдИ рдореБрджреНрджрд╛ рдмрдирд╛рдиреЗ рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдореБрджреНрджреЗ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд▓рд╕ рд▓рдЧрд╛рдПрдВ, рдкреАрдЖрд░ рдмрдирд╛рдПрдВ рдпрд╛ рд╕рд┐рд░реНрдл рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рджреЗрдЦреЗрдВред
рдкреБрдирд╢реНрдЪ
рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рднреА рдкрдврд╝реЗрдВ:
- ┬л┬╗
- ┬л┬╗
- ┬л";
- рд╡реЗрдпрд░рдлрд╝ рдореЗрдВ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреЛрдЯреНрд╕ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛:
- ┬л";
- ┬л";
- ┬л";
- ┬л'.
рд╕реНрд░реЛрдд: www.habr.com
