werf рдХрд▓реЗрдХреНрдЯрд░рдорд╛ рд╕рд╛рдордЧреНрд░реА-рдЖрдзрд╛рд░рд┐рдд рдЯреНрдпрд╛рдЧрд┐рдЩ: рдХрд┐рди рд░ рдХрд╕рд░реА рдпрд╕рд▓реЗ рдХрд╛рдо рдЧрд░реНрдЫ?

werf рдХрд▓реЗрдХреНрдЯрд░рдорд╛ рд╕рд╛рдордЧреНрд░реА-рдЖрдзрд╛рд░рд┐рдд рдЯреНрдпрд╛рдЧрд┐рдЩ: рдХрд┐рди рд░ рдХрд╕рд░реА рдпрд╕рд▓реЗ рдХрд╛рдо рдЧрд░реНрдЫ?

рд╡рд╛рдл Kubernetes рдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рд░ рдбреЗрд▓рд┐рднрд░ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореНрд░реЛ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд GitOps CLI рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реЛред IN рд░рд┐рд▓реАрдЬ v1.1 рдЫрд╡рд┐ рдХрд▓реЗрдХреНрдЯрд░рдорд╛ рдирдпрд╛рдБ рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рд╕реНрддреБрдд рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ: рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рдЫрд╡рд┐рд╣рд░реВ рдЯреНрдпрд╛рдЧ рдЧрд░реНрдиреЗ рд╡рд╛ рд╕рд╛рдордЧреНрд░реА рдЖрдзрд╛рд░рд┐рдд рдЯреНрдпрд╛рдЧрд┐рдЩред рдЕрд╣рд┐рд▓реЗ рд╕рдореНрдо, werf рдорд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреНрдпрд╛рдЧрд┐рдЩ рдпреЛрдЬрдирд╛ Git рдЯреНрдпрд╛рдЧ, Git рд╢рд╛рдЦрд╛ рд╡рд╛ Git рдХрдорд┐рдЯ рджреНрд╡рд╛рд░рд╛ рдбрдХрд░ рдЫрд╡рд┐рд╣рд░реВ рдЯреНрдпрд╛рдЧ рдЧрд░реНрдиреЗ рд╕рдорд╛рд╡реЗрд╢ рдерд┐рдпреЛред рддрд░ рдпреА рд╕рдмреИ рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛ рдмреЗрдлрд╛рдЗрджрд╛рд╣рд░реВ рдЫрдиреН рдЬреБрди рдирдпрд╛рдБ рдЯреНрдпрд╛рдЧрд┐рдЩ рд░рдгрдиреАрддрд┐рд▓реЗ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реЗрдХреЛ рдЫред рдпрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╡рд┐рд╡рд░рдгрд╣рд░реВ рд░ рдпреЛ рдХрд┐рди рдпрддрд┐ рд░рд╛рдореНрд░реЛ рдЫ рдХрдЯ рдЕрдиреНрддрд░реНрдЧрдд рдЫрдиреНред

рдПрдЙрдЯрд╛ Git рднрдгреНрдбрд╛рд░рдмрд╛рдЯ рдорд╛рдЗрдХреНрд░реЛ рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рд╕реЗрдЯ рд░реЛрд▓ рдЖрдЙрдЯ рдЧрд░реНрджреИ

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

рддреНрдпрд╣рд╛рдБ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВ рдЫрдиреН рдЬрдм рд╕реЗрд╡рд╛рд╣рд░реВ рд╕рд╛рдБрдЪреНрдЪреИ рд╕реНрд╡рддрдиреНрддреНрд░ рдЫрдиреН рд░ рдПрдХрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫреИрдирдиреНред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рддрд┐рдиреАрд╣рд░реВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рд╣реБрдиреЗрдЫрдиреН рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд░рд┐рд▓реАрдЬ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ CI/CD рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдорд╛рд░реНрдлрдд рдЧрд░рд┐рдиреЗрдЫред

рдпрджреНрдпрдкрд┐, рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдорд╛, рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдкреНрд░рд╛рдпрдГ рдПрдЙрдЯреИ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдзреЗрд░реИ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕реЗрд╕рд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрдЫрдиреН, рддрд░ рдкреНрд░рддреНрдпреЗрдХрдХреЛ рд▓рд╛рдЧрд┐ рдЫреБрдЯреНрдЯреИ рднрдгреНрдбрд╛рд░ рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ... рд╕реНрдкрд╖реНрдЯ рдУрднрд░рдХрд┐рд▓ рд╣реЛред рдпреЛ рдЕрд╡рд╕реНрдерд╛ рд╣реЛ рдЬреБрди рдердк рдЫрд▓рдлрд▓ рдЧрд░рд┐рдиреЗрдЫ: рдзреЗрд░реИ рддреНрдпрд╕реНрддрд╛ рд▓рдШреБ рд╕реЗрд╡рд╛рд╣рд░реВ рдПрдХрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рднрдгреНрдбрд╛рд░рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреН рд░ CI/CD рдорд╛ рдПрдХрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдорд╛рд░реНрдлрдд рд░рд┐рд▓реАрдЬрд╣рд░реВ рд╣реБрдиреНрдЫрдиреНред

Git рд╢рд╛рдЦрд╛ рд░ Git рдЯреНрдпрд╛рдЧ рджреНрд╡рд╛рд░рд╛ рдЯреНрдпрд╛рдЧрд┐рдЩ

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

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

  • 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

рдпреА рдирдпрд╛рдБ рдЫрд╡рд┐ рдирд╛рдорд╣рд░реВ рд╣реЗрд▓реНрдо рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╣рд░реВ рдорд╛рд░реНрдлрдд Kubernetes рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рдкрдард╛рдЗрдиреНрдЫред рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рддреИрдирд╛рддреА рд╕реБрд░реБ рдЧрд░реНрджрд╛ werf deploy рдХреНрд╖реЗрддреНрд░ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рднрдЗрд░рд╣реЗрдХреЛ рдЫ image рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░рд┐рдПрдХреЛ рдЫрд╡рд┐ рдирд╛рдордХреЛ рдХрд╛рд░рдгрд▓реЗ Kubernetes рд╕рдВрд╕рд╛рдзрдирдорд╛ рд╕рдореНрдмрджреНрдз рд╕реНрд░реЛрддрд╣рд░реВ рдкреНрд░рдХрдЯ рд░ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрджреИред

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

рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рд╣рд╛рд▓рдХреЛ рдЯреНрдпрд╛рдЧрд┐рдЩ рдпреЛрдЬрдирд╛рдХреЛ рд╕рд╛рде рдзреЗрд░реИ рдЕрд▓рдЧ Git рднрдгреНрдбрд╛рд░рд╣рд░реВ рдмрд╛рдбреНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рд░ рдпреА рдзреЗрд░реИ рднрдгреНрдбрд╛рд░рд╣рд░реВрдХреЛ рд░реЛрд▓рдЖрдЙрдЯ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрди рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдиреНрдЫред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдпрд╕реНрддреЛ рдпреЛрдЬрдирд╛ рдУрднрд░рд▓реЛрдб рд░ рдЬрдЯрд┐рд▓ рд╣реБрди рдЬрд╛рдиреНрдЫред рдзреЗрд░реИ рд╕реЗрд╡рд╛рд╣рд░реВрд▓рд╛рдИ рдПрдХрд▓ рднрдгреНрдбрд╛рд░рдорд╛ рдорд┐рд▓рд╛рдПрд░ рдбрдХрд░ рдЯреНрдпрд╛рдЧрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБ рд░рд╛рдореНрд░реЛ рд╣реБрдиреНрдЫ рддрд╛рдХрд┐ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреБрди: рд╕реБрд░реБ рд╣реБрдБрджреИрдиред

Git рдХрдорд┐рдЯ рджреНрд╡рд╛рд░рд╛ рдЯреНрдпрд╛рдЧ рдЧрд░реНрджреИ

werf рд╕рдБрдЧ Git рдХрдорд┐рдЯрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЯреНрдпрд╛рдЧрд┐рдЩ рд░рдгрдиреАрддрд┐ рдкрдирд┐ рдЫред

Git-commit рдПрдХ Git рднрдгреНрдбрд╛рд░рдХреЛ рд╕рд╛рдордЧреНрд░реАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛ рд░ Git рднрдгреНрдбрд╛рд░рдорд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╕рдореНрдкрд╛рджрди рдЗрддрд┐рд╣рд╛рд╕рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫ, рддреНрдпрд╕реИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдбрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдорд╛ рдЫрд╡рд┐рд╣рд░реВ рдЯреНрдпрд╛рдЧ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рддрд╛рд░реНрдХрд┐рдХ рджреЗрдЦрд┐рдиреНрдЫред

рдпрджреНрдпрдкрд┐, Git рдХрдорд┐рдЯ рджреНрд╡рд╛рд░рд╛ рдЯреНрдпрд╛рдЧ рдЧрд░реНрдиреЗ Git рд╢рд╛рдЦрд╛рд╣рд░реВ рд╡рд╛ Git рдЯреНрдпрд╛рдЧрд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рдЯреНрдпрд╛рдЧрд┐рдЩрдХреЛ рд░реВрдкрдорд╛ рд╕рдорд╛рди рд╣рд╛рдирд┐рд╣рд░реВ рдЫрдиреН:

  • рдПрдЙрдЯрд╛ рдЦрд╛рд▓реА рдХрдорд┐рдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рдЬрд╕рд▓реЗ рдХреБрдиреИ рдкрдирд┐ рдлрд╛рдЗрд▓рд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрджреИрди, рддрд░ рдЫрд╡рд┐рдХреЛ рдбрдХрд░ рдЯреНрдпрд╛рдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреЗрдЫред
  • рдорд░реНрдЬ рдХрдорд┐рдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рдЬрд╕рд▓реЗ рдлрд╛рдЗрд▓рд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрджреИрди, рддрд░ рдЫрд╡рд┐рдХреЛ рдбрдХрд░ рдЯреНрдпрд╛рдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреЗрдЫред
  • рдПрдЙрдЯрд╛ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рдЬрд╕рд▓реЗ Git рдорд╛ рддреА рдлрд╛рдЗрд▓рд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрджрдЫ рдЬреБрди рдЫрд╡рд┐рдорд╛ рдЖрдпрд╛рдд рдЧрд░рд┐рдПрдХреЛ рдЫреИрди, рд░ рдЫрд╡рд┐рдХреЛ рдбрдХрд░ рдЯреНрдпрд╛рдЧ рдлреЗрд░рд┐ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреЗрдЫред

Git рд╢рд╛рдЦрд╛ рдирд╛рдо рдЯреНрдпрд╛рдЧ рдЧрд░реНрджреИ рдЫрд╡рд┐ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рдЧрд░реНрджреИрди

Git рд╢рд╛рдЦрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЯреНрдпрд╛рдЧрд┐рдЩ рд░рдгрдиреАрддрд┐рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЕрд░реНрдХреЛ рд╕рдорд╕реНрдпрд╛ рдЫред

рд╢рд╛рдЦрд╛рдХреЛ рдирд╛рдордмрд╛рдЯ рдЯреНрдпрд╛рдЧрд┐рдЩрд▓реЗ рдХрд╛рдо рдЧрд░реНрджрдЫ рдЬрдмрд╕рдореНрдо рддреНрдпреЛ рд╢рд╛рдЦрд╛рдорд╛ рдХрдорд┐рдЯрд╣рд░реВ рдХреНрд░рдорд┐рдХ рд░реВрдкрдорд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░рд┐рдиреНрдЫред

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

рдердк рд░реВрдкрдорд╛, рддрд┐рдиреАрд╣рд░реВ рдмреАрдЪрдХреЛ рдЫреЛрдЯреЛ рдЕрд╡рдзрд┐рдХреЛ рд╕рд╛рде рдПрдХ рд╢рд╛рдЦрд╛рдорд╛ рдХреНрд░рдорд┐рдХ рдкреБрд╢рд╣рд░реВ рд╕рдВрдЧ, рдкреБрд░рд╛рдиреЛ рдХрдорд┐рдЯ рдирдпрд╛рдБ рднрдиреНрджрд╛ рдкрдЫрд┐ рдХрдореНрдкрд╛рдЗрд▓ рд╣реБрди рд╕рдХреНрдЫ: рдЫрд╡рд┐рдХреЛ рдкреБрд░рд╛рдиреЛ рд╕рдВрд╕реНрдХрд░рдгрд▓реЗ Git рд╢рд╛рдЦрд╛ рдЯреНрдпрд╛рдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдирдпрд╛рдБрд▓рд╛рдИ рдЕрдзрд┐рд▓реЗрдЦрди рдЧрд░реНрдиреЗрдЫред рддреНрдпрд╕реНрддрд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ CI/CD рдкреНрд░рдгрд╛рд▓реАрджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, GitLab CI рдорд╛ рдкрдЫрд┐рд▓реНрд▓реЛрдХреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрдорд┐рдЯрд╣рд░реВрдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╕реБрд░реБ рдЧрд░рд┐рдПрдХреЛ рдЫ)ред рдпрджреНрдпрдкрд┐, рд╕рдмреИ рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрд▓реЗ рдпрд╕рд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджреИрдирдиреН рд░ рдпрд╕реНрддреЛ рдЖрдзрд╛рд░рднреВрдд рд╕рдорд╕реНрдпрд╛рд▓рд╛рдИ рд░реЛрдХреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдердк рднрд░рдкрд░реНрджреЛ рддрд░рд┐рдХрд╛ рд╣реБрдиреБрдкрд░реНрджрдЫред

рд╕рд╛рдордЧреНрд░реА-рдЖрдзрд╛рд░рд┐рдд рдЯреНрдпрд╛рдЧрд┐рдЩ рдХреЗ рд╣реЛ?

рддреНрдпрд╕реЛрднрдП, рд╕рд╛рдордЧреНрд░реА-рдЖрдзрд╛рд░рд┐рдд рдЯреНрдпрд╛рдЧрд┐рдЩ рднрдиреЗрдХреЛ рдХреЗ рд╣реЛ - рд╕рд╛рдордЧреНрд░реАрджреНрд╡рд╛рд░рд╛ рдЫрд╡рд┐рд╣рд░реВ рдЯреНрдпрд╛рдЧ рдЧрд░реНрдиреЗред

рдбрдХрд░ рдЯреНрдпрд╛рдЧрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, рдпреЛ Git primitives (Git branch, Git рдЯреНрдпрд╛рдЧ...) рд╣реЛрдЗрди рдЬреБрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рддрд░ рдпрд╕рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЪреЗрдХрд╕рдо:

  • рдЫрд╡рд┐ рдХреЛ рд╕рд╛рдордЧреНрд░реАред рдЫрд╡рд┐ рдЖрдИрдбреА рдЯреНрдпрд╛рдЧрд▓реЗ рдпрд╕рдХреЛ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рдЧрд░реНрджрдЫред рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджрд╛, рдпреЛ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреЗ рдЫреИрди рдпрджрд┐ рдЫрд╡рд┐рдорд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рднрдПрди рднрдиреЗ;
  • Git рдорд╛ рдпреЛ рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдЗрддрд┐рд╣рд╛рд╕ред werf рдорд╛рд░реНрдлрдд рдмрд┐рднрд┐рдиреНрди Git рд╢рд╛рдЦрд╛рд╣рд░реВ рд░ рдмрд┐рднрд┐рдиреНрди рдирд┐рд░реНрдорд╛рдг рдЗрддрд┐рд╣рд╛рд╕рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫрд╡рд┐рд╣рд░реВрдорд╛ рдлрд░рдХ 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 рдХрдорд┐рдЯрд╣рд░реВрдорд╛ рдбрдХрд░ рдЯреНрдпрд╛рдЧ рдирд╛рдо рдкреНрд░рддрд┐рд░реЛрдзред
  • Git рдорд╛ рдбрдХрд░ рдЯреНрдпрд╛рдЧ рдирд╛рдордХреЛ рд▓рдЪрд┐рд▓реЛрдкрдирд▓реЗ рдЫрд╡рд┐рдорд╛ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдлрд╛рдЗрд▓рд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрджрдЫред
  • Git рд╢рд╛рдЦрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреБрд░рд╛рдиреЛ Git рдХрдорд┐рдЯрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рд░реНрдорд╛рдгрд╣рд░реВ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрджрд╛ рдЫрд╡рд┐рдХреЛ рд╣рд╛рд▓рдХреЛ рд╕рдВрд╕реНрдХрд░рдгрд▓рд╛рдИ рдУрднрд░рд╣рд╛рд▓ рдЧрд░реНрдиреЗ рд╕рдорд╕реНрдпрд╛рдХреЛ рдиреЗрддреГрддреНрд╡ рдЧрд░реНрджреИрдиред

рдпрд╕рдХреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░! рд░ рд╣рд╛рдореАрд▓рд╛рдИ рднреНрд░рдордг рдЧрд░реНрди рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реН GitHubрдПрдЙрдЯрд╛ рдореБрджреНрджрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╡рд╛ рдЕрд╡рд╕реНрдерд┐рдд рдПрдЙрдЯрд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди, рдкреНрд▓рд╕ рджрд┐рдиреБрд╣реЛрд╕реН, PR рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд╡рд╛ рдХреЗрд╡рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд╡рд┐рдХрд╛рд╕ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред

PS

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

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

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