Go рдмреИрдХрдПрдВрдбреНрд╕ рдХреЗ рд▓рд┐рдП CI/CD: рдмрд┐рд▓реНрдб, рдЯреЗрд╕реНрдЯ, рдорд╛рдЗрдЧреНрд░реЗрдЯ, рдбрд┐рдкреНрд▓реЙрдп
Go рдмреИрдХрдПрдВрдбреНрд╕ рдХреЗ рд▓рд┐рдП CI/CD: рдмрд┐рд▓реНрдб, рдЯреЗрд╕реНрдЯ, рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдФрд░ Kubernetes рдпрд╛ VMs рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдбрд┐рдкреНрд▓реЙрдп рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрджрдоред

рдХреНрдпреЛрдВ CI/CD Go рдмреИрдХрдПрдВрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ
рдореИрдиреБрдЕрд▓ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдЕрдХреНрд╕рд░ рдиреАрд░рд╕, рдмрд╛рд░-рдмрд╛рд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдлреЗрд▓ рд╣реЛрддреЗ рд╣реИрдВред рдХреЛрдИ рдЕрдкрдиреЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рдЕрд▓рдЧ Go рд╡рд░реНрд╢рди рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИ, рдХреЛрдИ env рд╡реЗрд░рд┐рдПрдмрд▓ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдХреЛрдИ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдпрд╛ рдЧрд▓рддреА рд╕реЗ рдЧрд▓рдд рд╕рд░реНрд╡рд┐рд╕ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИред рд░рд┐рд▓реАрдЬрд╝ тАЬрдореЗрд░реЗ рдкрд╛рд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИтАЭ, рдкрд░ рдкреНрд░реЛрдбрдХреНрд╢рди рдореЗрдВ рдирд╣реАрдВ рдЪрд▓рддрд╛ тАФ рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рддрдм рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдЬрдм рдпреВрдЬрд╝рд░ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдХреЛрдб рд╕реЗ рд░рд┐рд▓реАрдЬрд╝ рдбрд┐рд╕рд┐рдкреНрд▓рд┐рди рдХреА рдЬрд╝рд░реВрд░рдд рдЦрддреНрдо рдирд╣реАрдВ рд╣реЛрддреАред рдЬрдм рдЖрдк рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдмреИрдХрдПрдВрдб рдХреЛ рд░реАрдЬрдирд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирдП рдПрдВрдбрдкреЙрдЗрдВрдЯ, рдирдП рдбреЗрдЯрд╛ рд╢реЗрдк рдпрд╛ рдирдИ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЖ рд╕рдХрддреА рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЖрдкрдиреЗ рд╣рд╛рде рд╕реЗ рдХреЛрдб рдирд╣реАрдВ рдЫреБрдЖ рд╣реЛред рдРрд╕реЗ рд╕рдордп рдореЗрдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реБрд░рдХреНрд╖рд╛ рд░реЗрд▓ рдХреА рддрд░рд╣ рдХрд╛рдо рдЖрдП: рд╣рд░ рдмрджрд▓рд╛рд╡ рд╣рд░ рдмрд╛рд░ рдПрдХ рдЬреИрд╕реЗ рдЪреЗрдХ рд╕реЗ рдЧреБрдЬрд░реЗред
рдкреНрд░реАрдбрд┐рдХреНрдЯреЗрдмрд▓ рдПрдиреНрд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдмрд┐рд▓реНрдб рдФрд░ рдбрд┐рдкреНрд▓реЙрдп рд╕реНрдЯреЗрдк рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдирд╛рдо рджреЗ рдХрд░ рджреЛрд╣рд░рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдЫ рдирд┐рдпрдо рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░ рджреЗрддреЗ рд╣реИрдВ:
- рд╡рд░реНрдЬрд╝рди рдкрд┐рди рдХрд░реЗрдВ (Go toolchain, рдмреЗрд╕ рдЗрдореЗрдЬ, OS рдкреИрдХреЗрдЬ)ред
- рдПрдХ рдмрд╛рд░ рдмрдирд╛рдПрдВ, рд╡рд╣реА рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рд╣рд░ рдЬрдЧрд╣ рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВред
- рдХреЙрдиреНрдлрд╝рд┐рдЧ рдмрд╛рдЗрдирд░реА рдХреЗ рдмрд╛рд╣рд░ рд░рдЦреЗрдВ (env vars рдпрд╛ рд╣рд░ environment рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╛рдЗрд▓)ред
- рд╣рд░ environment рдореЗрдВ рд╡рд╣реА рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЯреВрд▓ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВред
- рд░реЛрд▓рдмреИрдХ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдирд╛рдПрдВ: рдкрд┐рдЫрд▓рд╛ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рд░рдЦреЗрдВ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрд╣ рдЬрд╛рдиреЗрдВред
CI/CD рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рд┐рд░реНрдл рдСрдЯреЛрдореЗрд╢рди рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рдордХрд╕рдж рдХрдо рддрдирд╛рд╡ рдХреЗ рд╕рд╛рде рд░реЗрдкреНрд░реАрдбрд┐рдХреЗрдЯреЗрдмрд▓ рд░рд┐рд▓реАрдЬрд╝ рд╣реИрдВ: рд░реАрдЬрдирд░реЗрдЯ рдХрд░реЗрдВ, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд▓рд╛рдПрдБ, рдФрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВ рдХрд┐ рдЬреЛ рдирд┐рдХрд▓реЗ рд╡рд╣ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред
рдЕрдЧрд░ рдЖрдк AppMaster рдЬреИрд╕реА рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ Go рдмреИрдХрдПрдВрдб рдмрдирд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдФрд░ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд░реАрдЬрдирд░реЗрд╢рди рдПрдХ рдлреАрдЪрд░ рд╣реИ, рдкрд░ рдпрд╣ рддрднреА рд╕реБрд░рдХреНрд╖рд┐рдд рдорд╣рд╕реВрд╕ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдмрджрд▓рд╛рд╡ рд╕реЗ рдкреНрд░реЛрдбрдХреНрд╢рди рддрдХ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд▓рдЧрд╛рддрд╛рд░, рдЯреЗрд╕реНрдЯреЗрдб рдФрд░ рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рд╣реЛред
рдЕрдкрдирд╛ рд░рдирдЯрд╛рдЗрдо рдЪреБрдиреЗрдВ рдФрд░ тАЬрдкреНрд░реАрдбрд┐рдХреНрдЯреЗрдмрд▓тАЭ рдкрд╣рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
тАЬрдкреНрд░реАрдбрд┐рдХреНрдЯреЗрдмрд▓тАЭ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд╣реА рдЗрдирдкреБрдЯ рдХрднреА рднреА, рдХрд╣реАрдВ рднреА рдПрдХ рдЬреИрд╕рд╛ рдкрд░рд┐рдгрд╛рдо рджреЗред Go рдмреИрдХрдПрдВрдбреНрд╕ рдХреЗ рд▓рд┐рдП CI/CD рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдирд╛ рд╢реБрд░реВ рдореЗрдВ рдЬрд╝рд░реВрд░реА рд╣реИ рдХрд┐ dev, staging рдФрд░ prod рдореЗрдВ рдХреНрдпрд╛ рдЪреАрдЬрд╝реЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд░рд╣рдиреА рдЪрд╛рд╣рд┐рдПред
рд╕рд╛рдорд╛рдиреНрдп рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдЪреАрдЬрд╝реЗрдВ рд╣реИрдВ: Go рд╡рд░реНрд╢рди, рдЖрдкрдХрд╛ рдмреЗрд╕ OS рдЗрдореЗрдЬ, рдмрд┐рд▓реНрдб рдлреНрд▓реИрдЧреНрд╕, рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ред рдЕрдЧрд░ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рдЪреАрдЬрд╝ environment рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрджрд▓рддреА рд╣реИ рддреЛ рдЖрдкрдХреЛ TLS рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЕрдВрддрд░, рдорд┐рд╕рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкреИрдХреЗрдЬ, рдпрд╛ рдРрд╕реЗ рдмрдЧ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рд┐рд░реНрдл рдкреНрд░реЛрдбрдХреНрд╢рди рдореЗрдВ рджрд┐рдЦреЗрдВред
рдЬрд╝реНрдпрд╛рджрд╛рддрд░ рдПрдиреНрд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдбреНрд░рд┐рдлреНрдЯ рд╡рд╣реАрдБ рджрд┐рдЦрддреА рд╣реИ:
- OS рдФрд░ рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрд╢рди рд╡рд░реНрд╢рди, рдорд┐рд╕рд┐рдВрдЧ CA рд╕рд░реНрдЯрд┐рдлрд╝рд┐рдХреЗрдЯ, рдЯрд╛рдЗрдордЬрд╝реЛрди)
- рдХреЙрдиреНрдлрд╝рд┐рдЧ рд╡реИрд▓реНрдпреВрдЬрд╝ (рдлреАрдЪрд░ рдлреНрд▓реИрдЧреНрд╕, рдЯрд╛рдЗрдордЖрдЙрдЯ, allowed origins, рдмрд╛рд╣рд░реА рд╕рд░реНрд╡рд┐рд╕ URLs)
- рдбреЗрдЯрд╛рдмреЗрд╕ рд╢реЗрдк рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (рдорд╛рдЗрдЧреНрд░реЗрд╢рди, рдПрдХреНрд╕рдЯреЗрдВрд╢рди, рдХреЛрд▓реЗрд╢рди, рдХрдиреЗрдХреНрд╢рди рд▓рд┐рдорд┐рдЯ)
- рд╕реАрдХреНрд░реЗрдЯреНрд╕ рд╣реИрдВрдбрд▓рд┐рдВрдЧ (рдХрд╣рд╛рдБ рд░рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдХреИрд╕реЗ рд░реЛрдЯреЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдХреМрди рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ)
- рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрдорд╛рди (DNS, рдлрд╝рд╛рдпрд░рд╡реЙрд▓, рд╕рд░реНрд╡рд┐рд╕ рдбрд┐рд╕реНрдХрд╡рд░реА)
Kubernetes рдФрд░ VMs рдХреЗ рдмреАрдЪ рдЪреБрдирд╛рд╡ тАЬрд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛тАЭ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреА рдЯреАрдо рдХрд┐рд╕реЗ рд╢рд╛рдВрддрд┐рдкреВрд░реНрд╡рдХ рдЪрд▓рд╛ рд╕рдХрддреА рд╣реИред
Kubernetes рддрдм рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ autoscaling, rolling updates рдФрд░ рдХрдИ рд╕рд░реНрд╡рд┐рд╕реЗрд╕ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдПрдХ рдорд╛рдирдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕реНрдерд┐рд░рддрд╛ рднреА рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдбреНрд╕ рдПрдХ рд╣реА рдЗрдореЗрдЬ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред VMs рддрдм рдареАрдХ рд░рд╣рддреЗ рд╣реИрдВ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдпрд╛ рдХреБрдЫ рд╣реА рд╕рд░реНрд╡рд┐рд╕ рд╣реИрдВ, рдЯреАрдо рдЫреЛрдЯреА рд╣реИ рдФрд░ рдЖрдк рдХрдо рдореВрд╡рд┐рдВрдЧ рдкрд╛рд░реНрдЯреНрд╕ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд╕рдорд╛рди рдмрдирд╛рдП рд░рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ рднрд▓реЗ рд╣реА рд░рдирдЯрд╛рдЗрдо рдЕрд▓рдЧ рд╣реЛрдВ: рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдФрд░ рдЙрд╕рдХреЗ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреЛ рд╕реНрдЯреИрдгреНрдбрд░реНрдб рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: CI рдореЗрдВ рд╣рдореЗрд╢рд╛ рд╡рд╣реА рдХрдВрдЯреЗрдирд░ рдЗрдореЗрдЬ рдмрдирд╛рдПрдВ, рд╡рд╣реА рдЯреЗрд╕реНрдЯ рд╕реНрдЯреЗрдкреНрд╕ рдЪрд▓рд╛рдПрдБ, рдФрд░ рд╡рд╣реА рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдмрдВрдбрд▓ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВред рддрдм рд╕рд┐рд░реНрдлрд╝ deploy рд╕реНрдЯреЗрдк рдмрджрд▓реЗрдЧрд╛: Kubernetes рдирдпрд╛ рдЗрдореЗрдЬ рдЯреИрдЧ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ VMs рдЗрдореЗрдЬ рдЦреАрдВрдЪрдХрд░ рд╕рд░реНрд╡рд┐рд╕ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВред
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг: рдПрдХ рдЯреАрдо AppMaster рд╕реЗ рдЬрдирд░реЗрдЯреЗрдб Go рдмреИрдХрдПрдВрдб рдХреЛ staging рдкрд░ Kubernetes рдореЗрдВ рдФрд░ production рдореЗрдВ VM рдкрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рддреА рд╣реИред рдЕрдЧрд░ рджреЛрдиреЛрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рдЗрдореЗрдЬ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд╛рди рддрд░рд╣ рдХреЗ рд╕реАрдХреНрд░реЗрдЯ рд╕реНрдЯреЛрд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ тАЬрдЕрд▓рдЧ рд░рдирдЯрд╛рдЗрдотАЭ рдХреЗрд╡рд▓ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХрд╛ рд╡рд┐рд╡рд░рдг рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдмрдЧ рдХрд╛ рд╕реНрд░реЛрдд рдирд╣реАрдВред AppMaster (appmaster.io) рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдпрд╣ рдореЙрдбрд▓ рдЕрдЪреНрдЫреА рддрд░рд╣ рдлрд┐рдЯ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк managed cloud targets рдкрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╕реНрд░реЛрдд рдХреЛ рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдкрд░ рд╡рд╣реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рд╕рд░рд▓ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирдХреНрд╢рд╛ рдЬрд┐рд╕реЗ рдЖрдк рдХрд┐рд╕реА рдХреЛ рднреА рд╕рдордЭрд╛ рд╕рдХреЗрдВ
рдкреНрд░реАрдбрд┐рдХреНрдЯреЗрдмрд▓ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдХреЛрдб рдЪреЗрдХ рдХрд░реЗрдВ, рдмрдирд╛рдПрдВ, рд╕рд╛рдмрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╡рд╣реА рдЪреАрдЬрд╝ рд╢рд┐рдк рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдЯреЗрд╕реНрдЯ рдХрд┐рдпрд╛, рдлрд┐рд░ рд╣рд░ рдмрд╛рд░ рдЙрд╕реА рддрд░рд╣ рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯрддрд╛ рддрдм рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬрдм рдЖрдкрдХрд╛ рдмреИрдХрдПрдВрдб рд░реАрдЬрдирд░реЗрдЯ рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, AppMaster рд╕реЗ), рдХреНрдпреЛрдВрдХрд┐ рдмрджрд▓рд╛рд╡ рдХрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЫреВ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рддреЗрдЬрд╝, рд▓рдЧрд╛рддрд╛рд░ рдлрд╝реАрдбрдмреИрдХ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдПрдХ рд╕реАрдзрд╛ рд╕рд╛ CI/CD рдлреНрд▓реЛ рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
- Lint рдФрд░ рдмреЗрд╕рд┐рдХ рдЪреЗрдХреНрд╕
- Build
- рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯреНрд╕
- рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдЪреЗрдХреНрд╕
- рдкреИрдХреЗрдЬ (immutable artifacts)
- Migrate (рдирд┐рдпрдВрддреНрд░рд┐рдд рд╕реНрдЯреЗрдк)
- Deploy
рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдмрдирд╛рдПрдВ рдХрд┐ рдлрд╝реЗрд▓рд┐рдпрд░ рдЬрд▓реНрджреА рд░реБрдХ рдЬрд╛рдПрдБред рдЕрдЧрд░ lint рдлреЗрд▓ рд╣реЛ рддреЛ рдЖрдЧреЗ рдХреБрдЫ рднреА рди рдЪрд▓реЗред рдЕрдЧрд░ build рдлреЗрд▓ рд╣реЛ рддреЛ integration checks рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдХреЗ рд╕рдордп рди рдЧрдВрд╡рд╛рдПрдБред рдЗрд╕рд╕реЗ рд▓рд╛рдЧрдд рдХрдо рд░рд╣рддреА рд╣реИ рдФрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рддреНрд╡рд░рд┐рдд рдорд╣рд╕реВрд╕ рд╣реЛрддреА рд╣реИред
рд╣рд░ рд╕реНрдЯреЗрдк рд╣рд░ рдХрдорд┐рдЯ рдкрд░ рдЪрд▓рдирд╛ рдЬрд╝рд░реВрд░реА рдирд╣реАрдВред рдПрдХ рдЖрдо рд╡рд┐рднрд╛рдЬрди рд╣реИ:
- рд╣рд░ рдХрдорд┐рдЯ/PR: lint, build, рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯреНрд╕
- main рдмреНрд░рд╛рдВрдЪ: рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдЪреЗрдХреНрд╕, рдкреИрдХреЗрдЬрд┐рдВрдЧ
- рд░рд┐рд▓реАреЫ рдЯреИрдЧреНрд╕: рдорд╛рдЗрдЧреНрд░реЗрдЯ, рдбрд┐рдкреНрд▓реЙрдп
рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред рдЖрдо рддреМрд░ рдкрд░ рд╡реЛ compiled binary рдпрд╛ container image рд╣реЛрддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ рдЖрдк рдбрд┐рдкреНрд▓реЙрдп рдХрд░рддреЗ рд╣реИрдВ), рд╕рд╛рде рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд▓реЙрдЧ рдФрд░ рдЯреЗрд╕реНрдЯ рд░рд┐рдкреЛрд░реНрдЯред рдЗрдиреНрд╣реЗрдВ рд░рдЦрдиреЗ рд╕реЗ рд░реЛрд▓рдмреИрдХ рдФрд░ рдСрдбрд┐рдЯ рдЖрд╕рд╛рди рд╣реЛрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реЗ рдЯреЗрд╕реНрдЯ рдФрд░ рдкреНрд░рдореЛрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЪрд░рдг-рджрд░-рдЪрд░рдг: рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдЬ рдЬреЛ рд╕реНрдерд┐рд░ рдФрд░ рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рд╣реЛ
рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдЬ рдХрд╛ рдПрдХ рд╕рд╡рд╛рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдХреНрдпрд╛ рд╣рдо рдЖрдЬ, рдХрд▓ рдФрд░ рдХрд┐рд╕реА рджреВрд╕рд░реЗ рд░рдирд░ рдкрд░ рд╡рд╣реА рдмрд╛рдЗрдирд░реА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдЕрдЧрд░ рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдЧреЗ рдХреЗ рд╕реНрдЯреЗрдкреНрд╕ (рдЯреЗрд╕реНрдЯ, рдорд╛рдЗрдЧреНрд░реЗрд╢рди, рдбрд┐рдкреНрд▓реЙрдп) рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рд╢реБрд░реВрдЖрдд environment рдХреЛ рдкрд┐рди рдХрд░рдиреЗ рд╕реЗ рдХрд░реЗрдВред рдлрд┐рдХреНрд╕реНрдб Go рд╡рд░реНрд╢рди (рдЙрджрд╛. 1.22.x) рдФрд░ рдлрд┐рдХреНрд╕реНрдб рд░рдирд░ рдЗрдореЗрдЬ (Linux distro рдФрд░ рдкреИрдХреЗрдЬ рд╡рд░реНрд╢рди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред "latest" рдЯреИрдЧреНрд╕ рд╕реЗ рдмрдЪреЗрдВред libc, Git рдпрд╛ Go рдЯреВрд▓рдЪреЗрди рдореЗрдВ рдЫреЛрдЯреЗ рдмрджрд▓рд╛рд╡ "рдореЗрд░реЗ рдорд╢реАрди рдкрд░ рдЪрд▓рддрд╛ рдерд╛" рдЬреИрд╕реА рдЧрд▓рддрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдбрд┐рдмрдЧ рдХрд░рдирд╛ рджрд░реНрджрдирд╛рдХ рд╣реЛрддрд╛ рд╣реИред
рдореЙрдбреНрдпреВрд▓ рдХреИрд╢рд┐рдВрдЧ рдорджрдж рдХрд░рддреА рд╣реИ, рдкрд░ рдЗрд╕реЗ рд╕реНрдкреАрдб рдмреВрд╕реНрдЯ рдХреА рддрд░рд╣ рд╣реА рд╕рдордЭреЗрдВ, рдЯреНрд░реВрде рдХрд╛ рд╕реНрд░реЛрдд рдирд╣реАрдВред Go build cache рдФрд░ рдореЙрдбреНрдпреВрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХреИрд╢ рдХреЛ рдХреИрд╢ рдХрд░реЗрдВ, рдкрд░ рдЗрд╕реЗ go.sum рд╕реЗ рдХреА рдХрд░реЗрдВ (рдпрд╛ рдЬрдм deps рдмрджрд▓реЗрдВ рддреЛ main рдкрд░ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ) рддрд╛рдХрд┐ рдирдИ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рдкрд░ рдХреНрд▓реАрди рдбрд╛рдЙрдирд▓реЛрдб рдЯреНрд░рд┐рдЧрд░ рд╣реЛред
рдХрдореНрдкрд╛рдЗрд▓реЗрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рддреЗрдЬрд╝ рдЧреЗрдЯ рдЬреЛрдбрд╝реЗрдВред рдЗрд╕реЗ рдЙрддрдирд╛ рддреЗрдЬрд╝ рд░рдЦреЗрдВ рддрд╛рдХрд┐ рдбреЗрд╡реЗрд▓рдкрд░ рдЗрд╕реЗ рдмрд╛рдИрдкрд╛рд╕ рди рдХрд░реЗрдВред рдЖрдо рд╕реЗрдЯ рд╣реИ gofmt рдЪреЗрдХреНрд╕, go vet, рдФрд░ рдпрджрд┐ рддреЗрдЬрд╝ рд░рд╣реЗ рддреЛ staticcheckред рд╕рд╛рде рд╣реА рдорд┐рд╕рд┐рдВрдЧ рдпрд╛ stale generated рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдлреЗрд▓ рдХрд░реЗрдВ тАФ рдпрд╣ рд░реАрдЬрдирд░реЗрдЯреЗрдб рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдЖрдо рд╕рдорд╕реНрдпрд╛ рд╣реИред
рд░рд┐рдкреНрд░реЛрдбреНрдпреВрд╕рд┐рдмрд▓реА рддрд░реАрдХреЗ рд╕реЗ рдХрдореНрдкрд╛рдЗрд▓ рдХрд░реЗрдВ рдФрд░ рд╡рд░реНрд╢рди рдЬрд╛рдирдХрд╛рд░реА рдПрдореНрдмреЗрдб рдХрд░реЗрдВред -trimpath рдЬреИрд╕реЗ рдлрд╝реНрд▓реИрдЧреНрд╕ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк -ldflags рд╕реЗ commit SHA рдФрд░ build time рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддрд┐ рд╕рд░реНрд╡рд┐рд╕ рдПрдХ рдирд╛рдорд┐рдд рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдмрдирд╛рдПрдВред рдЗрд╕рд╕реЗ Kubernetes рдпрд╛ VM рдкрд░ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЯреНрд░реЗрд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдЖрдкрдХрд╛ рдмреИрдХрдПрдВрдб рд░реАрдЬрдирд░реЗрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реЛред
рдЪрд░рдг-рджрд░-рдЪрд░рдг: рдРрд╕реЗ рдЯреЗрд╕реНрдЯ рдЬреЛ рдбрд┐рдкреНрд▓реЙрдп рд╕реЗ рдкрд╣рд▓реЗ рдореБрджреНрджреЗ рдкрдХрдбрд╝ рд▓реЗрдВ
рдЯреЗрд╕реНрдЯ рддрдм рд╣реА рдорджрдж рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рд╡реЗ рд╣рд░ рдмрд╛рд░ рдПрдХ рд╣реА рддрд░рд╣ рдЪрд▓реЗрдВред рдкрд╣рд▓реЗ рддреЗрдЬрд╝ рдлрд╝реАрдбрдмреИрдХ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдлрд┐рд░ рдЧрд╣рд░рд╛рдИ рд╡рд╛рд▓реЗ рдЪреЗрдХ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЕрднреА рднреА рдПрдХ рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рд╕рдордп рдореЗрдВ рдЦрддреНрдо рд╣реЛрдВред
рд╣рд░ рдХрдорд┐рдЯ рдкрд░ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯреНрд╕ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдПрдХ рд╕рдЦреНрдд рдЯрд╛рдЗрдордЖрдЙрдЯ рд░рдЦреЗрдВ рддрд╛рдХрд┐ рдЕрдЯрдХреЗ рд╣реБрдП рдЯреЗрд╕реНрдЯреНрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд╣реИрдВрдЧ рди рдХрд░ рджреЗрдВред рдпрд╣ рднреА рддрдп рдХрд░реЗрдВ рдХрд┐ рдЯреАрдо рдХреЗ рд▓рд┐рдП тАЬрдкрд░реНрдпрд╛рдкреНрддтАЭ рдХрд╡рд░реЗрдЬ рдХреНрдпрд╛ рд╣реИред рдХрд╡рд░реЗрдЬ рдЯреНрд░реЙрдлреА рдирд╣реАрдВ рд╣реИ, рдкрд░ рдПрдХ рдиреНрдпреВрдирддрдо рдмрд╛рд░ рдЧреБрдгрд╡рддреНрддрд╛ рд╕рд▓реЛрдлрд╝реНрдЯ рдбреНрд░рд┐рдлреНрдЯ рдХреЛ рд░реЛрдХрддреА рд╣реИред
рдПрдХ рд╕реНрдерд┐рд░ рдЯреЗрд╕реНрдЯ рд╕реНрдЯреЗрдЬ рдЖрдорддреМрд░ рдкрд░ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ:
go test ./...рдХреЛ рдкреНрд░рддрд┐-рдкреИрдХреЗрдЬ рдЯрд╛рдЗрдордЖрдЙрдЯ рдФрд░ рдЧреНрд▓реЛрдмрд▓ рдЬреЙрдм рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдБред- рдХрд┐рд╕реА рднреА рдЯреЗрд╕реНрдЯ рдХреЛ рдЬреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдкрд░ рдкрд╣реБрдВрдЪреЗ, рдлреНрд▓реЗрдХреА рд╕рдордЭрдиреЗ рдХреА рдмрдЬрд╛рдП рдЕрд╕рд▓реА рдмрдЧ рдорд╛рдиреЗрдВ рдФрд░ рдареАрдХ рдХрд░реЗрдВред
- рдХреНрд░рд┐рдЯрд┐рдХрд▓ рдкреИрдХреЗрдЬреЗрд╕ (auth, billing, permissions) рдХреЗ рд▓рд┐рдП рдХрд╡рд░реЗрдЬ рдЕрдкреЗрдХреНрд╖рд╛рдПрдБ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ, рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдкреВрд░реЗ рд░рд┐рдкреЛ рдХреЗ рд▓рд┐рдПред
- concurrency рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб (queues, caches, fan-out workers) рдкрд░ race detector рдЬреЛрдбрд╝реЗрдВред
рд░реЗрд╕ рдбрд┐рдЯреЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдкрд░ рдпрд╣ рдмрд┐рд▓реНрдб рдХреЛ рдХрд╛рдлреА рдзреАрдорд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдЪреНрдЫрд╛ рд╕рдордЭреМрддрд╛ рд╣реИ PRs рдФрд░ рдирд╛рдЗрдЯрд▓реА рдмрд┐рд▓реНрдбреНрд╕ рдкрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдирд╛, рдпрд╛ рдХреЗрд╡рд▓ рдЪреБрдиреЗ рд╣реБрдП рдкреИрдХреЗрдЬреЗрд╕ рдкрд░ рдЪрд▓рд╛рдирд╛, рд╣рд░ рдкреБрд╢ рдкрд░ рдирд╣реАрдВред
рдлреНрд▓реЗрдХреА рдЯреЗрд╕реНрдЯреНрд╕ рдХреЛ рдмрд┐рд▓реНрдб рдлреЗрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдХрд┐рд╕реА рдЯреЗрд╕реНрдЯ рдХреЛ рдХреНрд╡рд╛рд░рдВрдЯреАрди рдХрд░рдирд╛ рд╣реА рдкрдбрд╝реЗ рддреЛ рдЙрд╕реЗ рд╡рд┐рдЬрд┐рдмрд▓ рд░рдЦреЗрдВ: рдЙрд╕реЗ рдЕрд▓рдЧ рдЬреЙрдм рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдБ рдЬреЛ рдлрд┐рд░ рднреА рд░рди рд╣реЛрдХрд░ рд░реЗрдб рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗ, рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ owner рдФрд░ рдбреЗрдбрд▓рд╛рдЗрди рдЖрд╡рд╢реНрдпрдХ рд░рдЦреЗрдВред
рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╕рдм рдХреБрдЫ рджреБрдмрд╛рд░рд╛ рдЪрд▓рд╛рдирд╛ рди рдкрдбрд╝реЗред рд░реЙ рд▓реЙрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рд░рд┐рдкреЛрд░реНрдЯ (рдкрд╛рд╕/рдлреЗрд▓, рдЕрд╡рдзрд┐, рдФрд░ рд╕рдмрд╕реЗ рдзреАрдореЗ рдЯреЗрд╕реНрдЯ) рд╕реЗрд╡ рдХрд░реЗрдВред рдпрд╣ рд░реАрдЬрдирд░реЗрдЯреЗрдб рдмрджрд▓рд╛рд╡реЛрдВ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдиреЗ рдкрд░ рд░рд┐рдЧреНрд░реЗрд╢рди рдкрдХрдбрд╝рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛ред
рд░реАрдпрд▓ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рдХреЗ рд╕рд╛рде рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдЪреЗрдХреНрд╕, рдмрд┐рдирд╛ рдзреАрдореЗ рдмрд┐рд▓реНрдб рдХреЗ
рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯреНрд╕ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдЕрд▓рдЧ рд╣реЛрдХрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдЪреЗрдХреНрд╕ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рд╕рд░реНрд╡рд┐рд╕ рдмреВрдЯ рд╣реЛрддреА рд╣реИ, рд░рд┐рдпрд▓ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреА рд╣реИ рдФрд░ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рд╣реИрдВрдбрд▓ рдХрд░рддреА рд╣реИ рддреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреИрд╕рд╛ рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рд╕реБрд░рдХреНрд╖рд╛ рдиреЗрдЯ рд╣реИ рдЬреЛ рдЙрди рдореБрджреНрджреЛрдВ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рд╕рд┐рд░реНрдлрд╝ рд╕рдм рдХреБрдЫ рдЬреБрдбрд╝рдиреЗ рдкрд░ рджрд┐рдЦрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рд╕реНрдЯрд╛рд░реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЪрд╛рд╣рд┐рдП рддреЛ рдПрдкhemeral рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВред рдиреМрдХрд░реА рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдлрд╝ рдПрдХ рдЕрд╕реНрдерд╛рдпреА PostgreSQL (рдФрд░ рдЬрд░реВрд░рдд рд╣реЛ рддреЛ Redis) рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рд╡рд░реНрд╢рди рдкреНрд░реЛрдбрдХреНрд╢рди рдХреЗ рдХрд░реАрдм рд░рдЦреЗрдВ, рдкрд░ рд╣рд░ рдкреНрд░реЛрдбрдХреНрд╢рди рдбрд┐рдЯреЗрд▓ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗрдВред
рдПрдХ рдЕрдЪреНрдЫрд╛ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рд╕реНрдЯреЗрдЬ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЫреЛрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ:
- рд╕рд░реНрд╡рд┐рд╕ рдХреЛ рдкреНрд░реЛрдбрдХреНрд╢рди-рдЬреИрд╕реА env vars рдХреЗ рд╕рд╛рде рд╕реНрдЯрд╛рд░реНрдЯ рдХрд░реЗрдВ (рдкрд░ рдЯреЗрд╕реНрдЯ рд╕реАрдХреНрд░реЗрдЯ)
- рдПрдХ рд╣реЗрд▓реНрде рдЪреЗрдХ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ (рдЙрджрд╛. /health 200 рд▓реМрдЯрд╛рдпреЗ)
- рдПрдХ-рджреЛ рдХреНрд░рд┐рдЯрд┐рдХрд▓ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд╕реНрдЯреЗрдЯрд╕ рдХреЛрдб рдФрд░ рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рд╢реЗрдк рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ
- рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ PostgreSQL (рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ Redis) рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реИ
API рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдЪреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрди рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдЬреЛ рдЯреВрдЯрдиреЗ рд╕реЗ рд╕рдмрд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдиреБрдХрд╕рд╛рди рд╣реЛрдЧрд╛ред рдЖрдкрдХреЛ рдкреВрд░рд╛ end-to-end рд╕реВрдЯ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдХреБрдЫ request/response рд╕рддреНрдпрд╛рдПрдБ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ: рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдбреНрд╕ 400 рд╕реЗ рд░рд┐рдЬреЗрдХреНрдЯ рд╣реЛрдВ, auth рдорд╛рдБрдЧрдиреЗ рдкрд░ 401 рд▓реМрдЯреЗ, рдФрд░ рд╣реИрдкреНрдкреА-рдкрд╛рде рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ 200 рдХреЗ рд╕рд╛рде рдЕрдкреЗрдХреНрд╖рд┐рдд JSON рдХреАрдЬрд╝ рджреЗред
рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдЯреЗрд╕реНрдЯреНрд╕ рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдЪрд▓рд╛рдиреЗ рдпреЛрдЧреНрдп рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреЛрдк рдХреЛ рд╕реАрдорд┐рдд рд░рдЦреЗрдВ рдФрд░ рдХреНрд▓реЙрдХ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВред рдПрдХ рдЫреЛрдЯрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд░рдЦреЗрдВ, рдХреБрдЫ рд╣реА рд░рд┐рдХреНрд╡реЗрд╕реНрдЯреНрд╕ рдЪрд▓рд╛рдПрдБ, рдФрд░ рд╕рдЦреНрдд рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╕реНрдЯрдХ рдмреВрдЯ рд╕реЗрдХрдВрдбреНрд╕ рдореЗрдВ рдлреЗрд▓ рд╣реЛ, рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдирд╣реАрдВред
рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ рдмреИрдХрдПрдВрдб рд░реАрдЬрдирд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛. AppMaster рдХреЗ рд╕рд╛рде), рддрдм рдпреЗ рдЪреЗрдХреНрд╕ рдФрд░ рднреА рдЬрд╝реНрдпрд╛рджрд╛ рд╡рдЬрди рд░рдЦрддреЗ рд╣реИрдВред рдпреЗ рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд░реАрдЬрдирд░реЗрдЯреЗрдб рд╕рд░реНрд╡рд┐рд╕ рд╕рд╛рдлрд╝ рддрд░реАрдХреЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдФрд░ рд╡рд╣ API рдмреЛрд▓рддреА рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдХреА рд╡реЗрдм/рдореЛрдмрд╛рдЗрд▓ рдРрдк рдХреЛ рдЙрдореНрдореАрдж рд╣реИред
рдбреЗрдЯрд╛рдмреЗрд╕ рдорд╛рдЗрдЧреНрд░реЗрд╢рди: рд╕реБрд░рдХреНрд╖рд┐рдд рдСрд░реНрдбрд░рд┐рдВрдЧ, рдЧреЗрдЯреНрд╕ рдФрд░ рд░реЛрд▓рдмреИрдХ рдХреА рд╕рдЪреНрдЪрд╛рдИ
рдкрд╣рд▓реЗ рддрдп рдХрд░реЗрдВ рдХрд┐ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХрд╣рд╛рдБ рдЪрд▓реЗрдВрдЧреЗред CI рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛рдирд╛ рд╢реБрд░реБрдЖрддреА рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ, рдкрд░ CI рдХреЛ рдЖрдо рддреМрд░ рдкрд░ рдкреНрд░реЛрдбрдХреНрд╢рди рддрдХ рдирд╣реАрдВ рдЫреВрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЯреАрдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ рдбрд┐рдкреНрд▓реЙрдп рдХреЗ рджреМрд░рд╛рди (рдПрдХ рд╕рдорд░реНрдкрд┐рдд рд╕реНрдЯреЗрдк) рдЪрд▓рд╛рддреА рд╣реИрдВ рдпрд╛ рдПрдХ рдЕрд▓рдЧ тАЬmigrateтАЭ рдЬреЙрдм рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдирдП рд╡рд░реНрд╢рди рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд░рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд┐рдпрдо: CI рдореЗрдВ рдмрд┐рд▓реНрдб рдФрд░ рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ, рдлрд┐рд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ рдкреНрд░реЛрдбрдХреНрд╢рди рдХреЗ рдЬрд┐рддрдирд╛ рдкрд╛рд╕ рд╣реЛ рд╕рдХреЗ рдЙрддрдирд╛ рдкрд╛рд╕ рдЪрд▓рд╛рдПрдБ, рдкреНрд░реЛрдбрдХреНрд╢рди рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдФрд░ рдкреНрд░реЛрдбрдХреНрд╢рди-рдЬреИрд╕реЗ рд▓рд┐рдорд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рдеред Kubernetes рдореЗрдВ рдпрд╣ рдЕрдХреНрд╕рд░ рдПрдХ one-off Job рд╣реЛрддрд╛ рд╣реИред VMs рдкрд░ рдпрд╣ рд░рд┐рд▓реАрдЬрд╝ рд╕реНрдЯреЗрдк рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдХрдорд╛рдВрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдСрд░реНрдбрд░рд┐рдВрдЧ рдЕрдкреЗрдХреНрд╖рд╛ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИред рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдкреЗрдб рдлрд╛рдЗрд▓реЗрдВ (рдпрд╛ рд╕реАрдХреНрд╡реЗрдВрд╢рд┐рдпрд▓ рдирдВрдмрд░) рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ рдФрд░ тАЬрдареАрдХ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ, рдПрдХ рдмрд╛рд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВтАЭ рдХрд╛ рдкрд╛рд▓рди рдХрд░рд╛рдПрдВред рдЬрд╣рд╛рдБ рд╕рдВрднрд╡ рд╣реЛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ idempotent рдмрдирд╛рдПрдВ, рддрд╛рдХрд┐ retry рдХрд░рдиреЗ рдкрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рди рдмрдиреЗ рдпрд╛ рдЖрдзрд╛тАСрдЖрдзрд╛ рдХреНрд░реИрд╢ рди рд╣реЛред
рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд░рдгрдиреАрддрд┐ рд╕рд░рд▓ рд░рдЦреЗрдВ:
- рдкрд╣рд▓реЗ additive рдмрджрд▓рд╛рд╡ рдкрд╕рдВрдж рдХрд░реЗрдВ (рдирдП рдЯреЗрдмрд▓/рдХреЙрд▓рдо, nullable рдХреЙрд▓рдо, рдирдП рдЗрдВрдбреЗрдХреНрд╕)
- рдРрд╕рд╛ рдХреЛрдб рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВ рдЬреЛ рдПрдХ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рджреМрд░рд╛рди рдкреБрд░рд╛рдиреА рдФрд░ рдирдИ рд╕реНрдХреАрдорд╛ рджреЛрдиреЛрдВ рд╕рдВрднрд╛рд▓ рд╕рдХреЗ
- рддрднреА рдорд░рдореНрдордд рдпрд╛ рдХрдбрд╝рд╛рдИ рдмрдврд╝рд╛рдПрдБ (рдХреЙрд▓рдо рдбреНрд░реЙрдк рдХрд░рдирд╛, NOT NULL рдмрдирд╛рдирд╛)
- рд▓рдВрдмреА рдСрдкрд░реЗрд╢рдиреНрд╕ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдПрдВ (рдЬреИрд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЗрдВрдбреЗрдХреНрд╕ concurrent рдмрдирд╛рдПрдВ)
рдХреБрдЫ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдЧреЗрдЯ рдЬреЛрдбрд╝реЗрдВред рдпрд╣ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд▓реЙрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдПрдХ рд╕рдордп рдореЗрдВ рд╕рд┐рд░реНрдлрд╝ рдПрдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЪрд▓реЗ, рдФрд░ рдПрдХ рдиреАрддрд┐ рдЬреИрд╕реЗ тАЬрдмрд┐рди рдЕрдиреБрдореЛрджрди рдХреЗ рдХреЛрдИ destructive рдмрджрд▓рд╛рд╡ рдирд╣реАрдВтАЭ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдлреЗрд▓ рдХрд░ рджреЗрдВ рдЕрдЧрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдореЗрдВ DROP TABLE рдпрд╛ DROP COLUMN рд╣реИ рдЬрдм рддрдХ рдореИрдиреНрдпреБрдЕрд▓ рдЧреЗрдЯ рдЕрдкреНрд░реВрд╡ рди рд╣реЛред
рд░реЛрд▓рдмреИрдХ рдХрдареЛрд░ рд╕рдЪреНрдЪрд╛рдИ рд╣реИ: рдХрдИ рд╕реНрдХреАрдорд╛ рдмрджрд▓рд╛рд╡ reversible рдирд╣реАрдВ рд╣реЛрддреЗред рдХреЙрд▓рдо рдбреНрд░реЙрдк рдХрд░рдиреЗ рдкрд░ рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ред рд░реЛрд▓рдмреИрдХ рдХреА рдпреЛрдЬрдирд╛ рдЖрдЧреЗ рдХреА рдорд░рдореНрдордд рдХреЗ рдЗрд░реНрджтАСрдЧрд┐рд░реНрдж рд░рдЦреЗрдВ: рдХреЗрд╡рд▓ рддрднреА down рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд░рдЦреЗрдВ рдЬрдм рдпрд╣ рд╕рдЪ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ, рдЕрдиреНрдпрдерд╛ рдмреИрдХрдЕрдк рдФрд░ рдЖрдЧреЗ рдХреА рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдкрд░ рднрд░реЛрд╕рд╛ рд░рдЦреЗрдВред
рд╣рд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд░рд┐рдХрд╡рд░реА рдкреНрд▓рд╛рди рдЬреЛрдбрд╝реЗрдВ: рдЕрдЧрд░ рдпрд╣ рдмреАрдЪ рдореЗрдВ рдлреЗрд▓ рд╣реЛ рддреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЕрдЧрд░ рдРрдк рдХреЛ рд░реЛрд▓рдмреИрдХ рдХрд░рдирд╛ рдкрдбрд╝реЗ рддреЛ рдХреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛрдЧреАред рдпрджрд┐ рдЖрдк Go рдмреИрдХрдПрдВрдб рд░реАрдЬрдирд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛. AppMaster рд╕реЗ), рддреЛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ рдЕрдкрдиреА рд░рд┐рд▓реАрдЬрд╝ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдорд╛рдиреЗрдВ рддрд╛рдХрд┐ рд░реАрдЬрдирд░реЗрдЯреЗрдб рдХреЛрдб рдФрд░ рд╕реНрдХреАрдорд╛ рд╕рд┐рдВрдХ рдореЗрдВ рд░рд╣реЗрдВред
рдкреИрдХреЗрдЬрд┐рдВрдЧ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧ: рд╡реЗ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдЬрд┐рди рдкрд░ рдЖрдк рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХреЗрдВ
рдкрд╛рдЗрдкрд▓рд╛рдЗрди рддрднреА рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рд▓рдЧрддреА рд╣реИ рдЬрдм рдЖрдк рдЬреЛ рдбрд┐рдкреНрд▓реЙрдп рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣реА рдЪреАрдЬрд╝ рд╣реЛ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдЯреЗрд╕реНрдЯ рдХрд┐рдпрд╛ред рдпрд╣ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рдмрд┐рд▓реНрдб рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕реАрд▓реНрдб рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдорд╛рдиреЗрдВ рдФрд░ рд╕рднреА environment рднрд┐рдиреНрдирддрд╛рдПрдБ рдЙрд╕рдХреЗ рдмрд╛рд╣рд░ рд░рдЦреЗрдВред
рдкреИрдХреЗрдЬрд┐рдВрдЧ рдЖрдорддреМрд░ рдкрд░ рджреЛ рд░рд╛рд╕реНрддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрддреА рд╣реИред Kubernetes рдкрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП container image рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ OS рд▓реЗрдпрд░ рдкрд┐рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд░реЛрд▓рдЖрдЙрдЯ рдХреЛ рд╕реБрд╕рдВрдЧрдд рдмрдирд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдкрдХреЛ VMs рдХреА рдЬрд╝рд░реБрд░рдд рд╣реЛ рддреЛ VM рдмрдВрдбрд▓ рдЙрддрдирд╛ рд╣реА рднрд░реЛрд╕реЗрдордВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдЗрд╕рдореЗрдВ compiled binary рдФрд░ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП рдЬрд╝рд░реВрд░реА рдЫреЛрдЯреА рдлрд╛рдЗрд▓реЗрдВ (CA certs, рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕, рд╕реНрдЯреИрдЯрд┐рдХ рдЕрд╕реЗрдЯреНрд╕) рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдФрд░ рдЖрдк рд╣рд░ рдмрд╛рд░ рдЙрд╕реЗ рдПрдХ рд╣реА рддрд░рд╣ рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВред
рдХреЙрдиреНрдлрд╝рд┐рдЧ рдмрд╛рд╣рд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдмрд╛рдЗрдирд░реА рдореЗрдВ рдирд╣реАрдВред рдЬрд╝реНрдпрд╛рджрд╛рддрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (рдкреЛрд░реНрдЯреНрд╕, DB host, рдлреАрдЪрд░ рдлреНрд▓реИрдЧреНрд╕) рдХреЗ рд▓рд┐рдП environment variables рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЬрд╣рд╛рдБ рдорд╛рди рд▓рдВрдмреЗ рдпрд╛ рд╕рдВрд░рдЪрд┐рдд рд╣реЛрдВ, рд╡рд╣рд╛рдВ рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╛рдЗрд▓ рд░рдЦреЗрдВ рдФрд░ рдЙрд╕реЗ environment-рд╡рд┐рд╢реЗрд╖ рдмрдирд╛рдПрдВред рдЕрдЧрд░ рдЖрдк рдХреЛрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧ рд╕рд░реНрд╡рд┐рд╕ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЙрд╕реЗ рдПрдХ dependency рдХреА рддрд░рд╣ рдЯреНрд░реАрдЯ рдХрд░реЗрдВ: рд▓реЙрдХреНрдб рдкрд░рдорд┐рд╢рди, рдСрдбрд┐рдЯ рд▓реЙрдЧреНрд╕ рдФрд░ рдХреНрд▓рд┐рдпрд░ рдлреЙрд▓рдмреИрдХ рдкреНрд▓рд╛рди рд░рдЦреЗрдВред
рд╕реАрдХреНрд░реЗрдЯреНрд╕ рд╡рд╣ рд░реЗрдЦрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдкрд╛рд░ рдордд рдХрд░реЗрдВред рд╡реЗ repo, рдЗрдореЗрдЬ рдпрд╛ CI рд▓реЙрдЧреНрд╕ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддреЗред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред рд╕реАрдХреНрд░реЗрдЯреНрд╕ рдХреЛ рдЕрдкрдиреЗ CI рдХреЗ рд╕реАрдХреНрд░реЗрдЯ рд╕реНрдЯреЛрд░ рдореЗрдВ рд░рдЦреЗрдВ рдФрд░ рдбрд┐рдкреНрд▓реЙрдп рдХреЗ рд╕рдордп рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВред
рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯреНрд╕ рдХреЛ рдЯреНрд░реЗрд╕реЗрдмрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд░ рдмрд┐рд▓реНрдб рдореЗрдВ рдкрд╣рдЪрд╛рди рдмреЗрдХ рдХрд░реЗрдВ: рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдХреЛ рд╡рд░реНрд╢рди рдФрд░ commit hash рдХреЗ рд╕рд╛рде рдЯреИрдЧ рдХрд░реЗрдВ, рдмрд┐рд▓реНрдб рдореЗрдЯрд╛рдбреЗрдЯрд╛ (рд╡рд░реНрд╢рди, commit, build time) info endpoint рдореЗрдВ рдбрд╛рд▓реЗрдВ, рдФрд░ рдЕрдкрдиреЗ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд▓реЙрдЧ рдореЗрдВ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдЯреИрдЧ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВред рдЗрд╕рд╕реЗ рдПрдХ рдХрдорд╛рдВрдб рдпрд╛ рдбреИрд╢рдмреЛрд░реНрдб рд╕реЗ тАЬрдХреМрди рдЪрд▓ рд░рд╣рд╛ рд╣реИтАЭ рдХрд╛ рдЬрд╡рд╛рдм рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк Go рдмреИрдХрдПрдВрдб рдЬрдирд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛. AppMaster), рддреЛ рдпрд╣ рдбрд┐рд╕рд┐рдкреНрд▓рд┐рди рдФрд░ рднреА рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИ: рд░реАрдЬрдирд░реЗрд╢рди рддрднреА рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдЬрдм рдЖрдкрдХрд╛ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдирд╛рдордХрд░рдг рдФрд░ рдХреЙрдиреНреЮрд┐рдЧ рдирд┐рдпрдо рд╣рд░ рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рдХрд░реЗрдВред
Kubernetes рдпрд╛ VMs рдкрд░ рдмрд┐рдирд╛ рд╕рд░рдкреНрд░рд╛рдЗрдЬрд╝ рдХреЗ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдирд╛
рдЬрд╝реНрдпрд╛рджрд╛рддрд░ рдбрд┐рдкреНрд▓реЙрдп рдлреЗрд▓рд┐рдпрд░ тАЬрдЦрд░рд╛рдм рдХреЛрдбтАЭ рдХреА рд╡рдЬрд╣ рд╕реЗ рдирд╣реАрдВ рд╣реЛрддреЗред рд╡реЗ рдПрдиреНрд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдХреЗ mismatch рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ: рдЕрд▓рдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧ, рдорд┐рд╕рд┐рдВрдЧ рд╕реАрдХреНрд░реЗрдЯреНрд╕, рдпрд╛ рд╕рд░реНрд╡рд┐рд╕ рдЬреЛ рд╢реБрд░реВ рддреЛ рд╣реЛрддреА рд╣реИ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ready рдирд╣реАрдВ рд╣реЛрддреАред рд▓рдХреНрд╖реНрдп рд╕рд░рд▓ рд╣реИ: рд╡рд╣реА рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рд╣рд░ рдЬрдЧрд╣ рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВ, рдФрд░ рдХреЗрд╡рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧ рдмрджрд▓реЗрдВред
Kubernetes: рдбрд┐рдкреНрд▓реЙрдп рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд░реЛрд▓рдЖрдЙрдЯ рдорд╛рдиреЗрдВ
Kubernetes рдкрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рд░реЛрд▓рдЖрдЙрдЯ рдХрд╛ рд▓рдХреНрд╖реНрдп рд░рдЦреЗрдВред rolling updates рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдк рдкрд╛рдбреНрд╕ рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рдмрджрд▓реЗрдВ, рдФрд░ readiness рдФрд░ liveness рдЪреЗрдХреНрд╕ рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЬрд╛рди рд╕рдХреЗ рдХрдм рдЯреНрд░реИрдлрд╝рд┐рдХ рднреЗрдЬрдирд╛ рд╣реИ рдФрд░ рдХрдм рдЕрдЯрдХреА рдХрдВрдЯреЗрдирд░ рдХреЛ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдирд╛ рд╣реИред Resource requests рдФрд░ limits рднреА рдорд╛рдпрдиреЗ рд░рдЦрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдмрдбрд╝рд╛ CI рд░рдирд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА Go рд╕рд░реНрд╡рд┐рд╕ рдЫреЛрдЯреЗ рдиреЛрдб рдкрд░ OOMтАСkill рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЗрдореЗрдЬ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧ рдХреЛ рдЕрд▓рдЧ рд░рдЦреЗрдВред рд╣рд░ commit рдкрд░ рдПрдХ рдЗрдореЗрдЬ рдмрдирд╛рдПрдВ, рдлрд┐рд░ рдбрд┐рдкреНрд▓реЙрдп рдЯрд╛рдЗрдо рдкрд░ environment-рд╡рд┐рд╢реЗрд╖ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ (ConfigMaps, Secrets рдпрд╛ рдЖрдкрдХрд╛ secret manager)ред рдЗрд╕ рддрд░рд╣ staging рдФрд░ production рдПрдХ рд╣реА рдмрд┐рдЯреНрд╕ рдЪрд▓рд╛рддреЗ рд╣реИрдВред
VMs: systemd рдЖрдкрдХреЛ рдЬрд╝рд░реВрд░реА рдЪреАрдЬрд╝реЗрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИ
рдЕрдЧрд░ рдЖрдк VMs рдкрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рддреЗ рд╣реИрдВ, рддреЛ systemd рдЖрдкрдХрд╛ тАЬрдЫреЛрдЯрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░тАЭ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдпреВрдирд┐рдЯ рдлрд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдкрд╖реНрдЯ working directory, environment file рдФрд░ restart policy рд╣реЛред рд▓реЙрдЧреНрд╕ рдХреЛ predictable рдмрдирд╛рдПрдВтАФstdout/stderr рдХреЛ рдЕрдкрдиреЗ рд▓реЙрдЧ рдХрд▓реЗрдХреНрдЯрд░ рдпрд╛ journald рдкрд░ рднреЗрдЬреЗрдВ рддрд╛рдХрд┐ incidents SSH scavenger hunts рдореЗрдВ рди рдмрджрд▓реЗрдВред
рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рднреА рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реЛрд▓рдЖрдЙрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╕рд╛рджрд╛ blue/green рд╕реЗрдЯрдЕрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рджреЛ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА (рдпрд╛ рджреЛ VMs) рд░рдЦреЗрдВ, load balancer рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдФрд░ рдкрд┐рдЫрд▓рд╛ рд╡рд░реНрд╢рди рддреЗрдЬрд╝ рд░реЛрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рдЦреЗрдВред Canary рднреА рдЗрд╕реА рддрд░рд╣ рд╣реИ: рдирдП рд╡рд░реНрд╢рди рдХреЛ рдкрд╣рд▓реЗ рдереЛрдбрд╝реА рдЯреНрд░реИрдлрд╝рд┐рдХ рднреЗрдЬреЗрдВред
рдПрдХ рдбрд┐рдкреНрд▓реЙрдп рдХреЛ тАЬрдХрд┐рдпрд╛ рдЧрдпрд╛тАЭ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рд░ рдЬрдЧрд╣ рд╡рд╣реА рдкреЛрд╕реНрдЯтАСрдбрд┐рдкреНрд▓реЙрдп рд╕реНрдореЛрдХ рдЪреЗрдХ рдЪрд▓рд╛рдПрдБ:
- рд╣реЗрд▓реНрде endpoint OK рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдФрд░ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рдкрд╣реБрдБрдЪ рдореЗрдВ рд╣реИрдВ рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ
- рдПрдХ рдЫреЛрдЯрд╛ рдЕрд╕рд▓реА рдПрдХреНрд╢рди рдЪрд▓рд╛рдПрдБ (рдЙрджрд╛. рдПрдХ рдЯреЗрд╕реНрдЯ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдПрдБ рдФрд░ рдкрдврд╝реЗрдВ)
- рд╕рд░реНрд╡рд┐рд╕ рд╡рд░реНрд╢рди/build ID рдХрдорд┐рдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реЛ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ
- рдЕрдЧрд░ рдЪреЗрдХ рдлреЗрд▓ рд╣реЛ рддреЛ рд░реЛрд▓рдмреИрдХ рдХрд░реЗрдВ рдФрд░ рдЕрд▓рд░реНрдЯ рдХрд░реЗрдВ
рдпрджрд┐ рдЖрдк рдмреИрдХрдПрдВрдб рд░реАрдЬрдирд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛. AppMaster рд╕реЗ), рддреЛ рдпрд╣ рддрд░реАрдХрд╛ рд╕реНрдерд┐рд░ рд░рд╣рддрд╛ рд╣реИ: рдПрдХ рдмрд╛рд░ рдмрд┐рд▓реНрдб рдХрд░реЗрдВ, рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВ, рдФрд░ environment рдХреЙрдиреНрдлрд┐рдЧ ad-hoc рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдЗрдЪреНрдЫрд┐рдд рднрд┐рдиреНрдирддрд╛рдПрдБ рдЪрд▓рд╛рдПрдБред
рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддрд┐рдпрд╛рдБ рдЬреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреНрд╕ рдХреЛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдмрдирд╛рддреА рд╣реИрдВ
рдЬреНрдпрд╛рджрд╛рддрд░ рдЯреВрдЯреЗ рд╣реБрдП рд░рд┐рд▓реАрдЬрд╝ тАЬрдЦрд░рд╛рдм рдХреЛрдбтАЭ рдХреА рдмрдЬрд╛рдП рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ Go рдмреИрдХрдПрдВрдбреНрд╕ рдХреЗ рд▓рд┐рдП CI/CD рд╢рд╛рдВрдд рдФрд░ рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рдорд╣рд╕реВрд╕ рд╣реЛ, рддреЛ рдЗрди рдкреИрдЯрд░реНрдиреНрд╕ рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред
рд╡рд╣ рдЧрд▓рддреА рд╡рд╛рд▓реЗ рдкреИрдЯрд░реНрди рдЬреЛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╡рд┐рдлрд▓рддрд╛ рд▓рд╛рддреЗ рд╣реИрдВ
рдмрд┐рдирд╛ рдЧрд╛рд░реНрдбреНрд░реЗрд▓ рдХреЗ рд╣рд░ рдбрд┐рдкреНрд▓реЙрдп рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЪрд▓рд╛рдирд╛ рдХреНрд▓рд╛рд╕рд┐рдХ рд╣реИред рдХреЛрдИ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЬреЛ рдЯреЗрдмрд▓ рд▓реЙрдХ рдХрд░ рджреЗ, рдПрдХ рд╡реНрдпрд╕реНрдд рд╕рд░реНрд╡рд┐рд╕ рдХреЛ рдбрд╛рдЙрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░реЛрдбрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдореЛрджрди рдЖрд╡рд╢реНрдпрдХ рд░рдЦреЗрдВ рдФрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдПрдВред
latest рдЯреИрдЧреНрд╕ рдпрд╛ рдЕрдирдкрд┐рдиреНрдб рдмреЗрд╕ рдЗрдореЗрдЬреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдФрд░ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдорд┐рд╕реНрдЯреНрд░реА рдлреЗрд▓реНрдпреЛ рд╣реЛрддреЗ рд╣реИрдВред Docker рдЗрдореЗрдЬ рдФрд░ Go рд╡рд░реНрдЬрд╝рди рдкрд┐рди рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдкрдХрд╛ рдмрд┐рд▓реНрдб рдПрдиреНрд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдбреНрд░рд┐рдлреНрдЯ рди рдХрд░реЗред
рдЕрд╕реНрдерд╛рдпреА рддреМрд░ рдкрд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рд╕реНрдерд╛рдпреА рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЯреЗрд╕реНрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдореЗрдВ рд▓реАрдХ рд╣реЛрдиреЗ рдпрд╛ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкреНрд░реЛрдбрдХреНрд╢рди рдХреЛ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдПрдиреНрд╡рд╛рдпрд░рдирдореЗрдВрдЯтАСрд╡рд┐рд╢реЗрд╖ рдбреЗрдЯрд╛рдмреЗрд╕ (рдФрд░ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕) рд░рдЦреЗрдВред
рд╣реЗрд▓реНрде рдФрд░ readiness рдЪреЗрдХреНрд╕ рдХрд╛ рдЕрднрд╛рд╡ рдПрдХ рдбрд┐рдкреНрд▓реЙрдп рдХреЛ "рд╕рдлрд▓" рдмрдирд╛ рджреЗрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рд╕рд░реНрд╡рд┐рд╕ рдЯреВрдЯ рдЪреБрдХреА рд╣реЛрддреА рд╣реИ рдФрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рдмрд╣реБрдд рдЬрд▓реНрджреА рд░реВрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реЗ рдЪреЗрдХ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реЛрдВ: рдХреНрдпрд╛ рдРрдк рд╕реНрдЯрд╛рд░реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рд╕рд░реНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рд╕реАрдХреНрд░реЗрдЯреНрд╕, рдХреЙрдиреНрдлрд╝рд┐рдЧ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ рдУрдирд░рд╢рд┐рдк рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рдЕрдЯрдХрдиреЗ рд╡рд╛рд▓реА рд╕реНрдерд┐рддрд┐ рдмрдирд╛ рджреЗрддреА рд╣реИред рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд▓реЗрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕реАрдХреНрд░реЗрдЯреНрд╕ рдХреИрд╕реЗ рдмрдирд╛рдП, рд░реЛрдЯреЗрдЯ рдХрд┐рдП рдФрд░ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдП рдЬрд╛рдПрдБред
рдПрдХ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд╡рд┐рдлрд▓рддрд╛: рдЯреАрдо рдиреЗ рдмрджрд▓рд╛рд╡ рдорд░реНрдЬ рдХрд┐рдпрд╛, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдиреЗ рдбрд┐рдкреНрд▓реЙрдп рдХрд┐рдпрд╛, рдФрд░ рдПрдХ рдСрдЯреЛрдореИрдЯрд┐рдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдкрд╣рд▓реЗ рдЪрд▓рд╛ред рдпрд╣ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдореЗрдВ рдЫреЛрдЯреЗ рдбреЗрдЯрд╛ рдкрд░ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛, рдкрд░ рдкреНрд░реЛрдбрдХреНрд╢рди рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛ рдЧрдпрд╛ред рдкрд┐рдиреНрдб рдЗрдореЗрдЬреЗрд╕, рдЕрд▓рдЧ рдПрдиреНрд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдФрд░ рдЧреЗрдЯреЗрдб рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕реНрдЯреЗрдк рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдбрд┐рдкреНрд▓реЙрдп рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд░реБрдХ рдЬрд╛рддрд╛ред
рдЕрдЧрд░ рдЖрдк Go рдмреИрдХрдПрдВрдбреНрд╕ рдЬрдирд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛. AppMaster рд╕реЗ), рддреЛ рдпреЗ рдирд┐рдпрдо рдФрд░ рднреА рдЬрд╝рд░реВрд░реА рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд░реАрдЬрдирд░реЗрд╢рди рдХрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЫреВ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░реАрдбрд┐рдХреНрдЯреЗрдмрд▓ рдЗрдирдкреБрдЯ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдЧреЗрдЯреНрд╕ рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдЬреЛрдЦрд┐рдо рднрд░рд╛ рд░рд┐рд▓реАрдЬрд╝ рдмрдирдиреЗ рд╕реЗ рд░реЛрдХрддреЗ рд╣реИрдВред
рдПрдХ рдкреНрд░реАрдбрд┐рдХреНрдЯреЗрдмрд▓ CI/CD рд╕реЗрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рдЪреЗрдХрд▓рд┐рд╕реНрдЯ
рдЗрд╕реЗ Go рдмреИрдХрдПрдВрдбреНрд╕ рдХреЗ рд▓рд┐рдП CI/CD рдХрд╛ рдПрдХ рдЧрдЯтАСрдЪреЗрдХ рд╕рдордЭреЗрдВред рдЕрдЧрд░ рдЖрдк рд╣рд░ рдкреЙрдЗрдВрдЯ рдХрд╛ рд╕реНрдкрд╖реНрдЯ тАЬрд╣рд╛рдВтАЭ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рд░рд┐рд▓реАрдЬрд╝ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
- рд╕рд┐рд░реНрдл рдХреЛрдб рдирд╣реАрдВ, рд╡рд╛рддрд╛рд╡рд░рдг рднреА рд▓реЙрдХ рдХрд░реЗрдВред Go рд╡рд░реНрд╢рди рдФрд░ рдмрд┐рд▓реНрдб рдХрдВрдЯреЗрдирд░ рдЗрдореЗрдЬ рдкрд┐рди рдХрд░реЗрдВ, рдФрд░ рд▓реЛрдХрд▓реА рдФрд░ CI рдореЗрдВ рдПрдХ рд╣реА рд╕реЗрдЯрдЕрдк рд░рдЦреЗрдВред
- рдкрд╛рдЗрдкрд▓рд╛рдЗрди 3 рд╕рд░рд▓ рдХрдорд╛рдВрдб рдкрд░ рдЪрд▓реЗред рдПрдХ рдХрдорд╛рдВрдб рдмрд┐рд▓реНрдб рдХрд░реЗ, рдПрдХ рдЯреЗрд╕реНрдЯреНрд╕ рдЪрд▓рд╛рдП, рдПрдХ deployable рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдмрдирд╛рдПред
- рдорд╛рдЗрдЧреНрд░реЗрд╢рдиреНрд╕ рдХреЛ рдкреНрд░реЛрдбрдХреНрд╢рди рдХреЛрдб рдХреА рддрд░рд╣ рдЯреНрд░реАрдЯ рдХрд░реЗрдВред рд╣рд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд░рди рдХреЗ рд▓реЙрдЧ рдорд╛рдВрдЧреЗрдВ рдФрд░ рдпрд╣ рд▓рд┐рдЦреЗрдВ рдХрд┐ рд░реЛрд▓рдмреИрдХ рдХрд╛ рдорддрд▓рдм рдЖрдкрдХреЗ рдРрдк рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИред
- рдРрд╕реА immutable рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдмрдирд╛рдПрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЯреНрд░реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдПрдХ рдмрд╛рд░ рдмрд┐рд▓реНрдб рдХрд░реЗрдВ, commit SHA рд╕реЗ рдЯреИрдЧ рдХрд░реЗрдВ, рдФрд░ рдмрд┐рдирд╛ рдлрд┐рд░ рд╕реЗ рдмрд┐рд▓реНрдб рдХрд┐рдП рдПрдиреНрд╡рд╛рдпрд░рдирдореЗрдВрдЯреНрд╕ рдореЗрдВ рдкреНрд░рдореЛрдЯ рдХрд░реЗрдВред
- рдРрд╕реЗ рдЪреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВ рдЬреЛ рдЬрд▓реНрджреА рдлреЗрд▓ рд╣реЛрдВред readiness/liveness рд╣реЗрд▓реНрде рдЪреЗрдХреНрд╕ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╣рд░ рдбрд┐рдкреНрд▓реЙрдп рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕реНрдореЛрдХ рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдПрдБред
рдкреНрд░реЛрдбрдХреНрд╢рди рдПрдХреНрд╕реЗрд╕ рд╕реАрдорд┐рдд рдФрд░ рдСрдбрд┐рдЯреЗрдмрд▓ рд░рдЦреЗрдВред CI рдХреЛ рдбрд┐рдкреНрд▓реЙрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд░реНрдкрд┐рдд рд╕рд░реНрд╡рд┐рд╕ рдЕрдХрд╛рдЙрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕реАрдХреНрд░реЗрдЯреНрд╕ рдХреЗрдВрджреНрд░реАрдХреГрдд рд░реВрдк рд╕реЗ рдореИрдиреЗрдЬ рд╣реЛрдВ, рдФрд░ рдХреЛрдИ рднреА рдореИрдиреНрдпреБрдЕрд▓ рдкреНрд░реЛрдбрдХреНрд╢рди рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реНрдкрд╖реНрдЯ рдЯреНрд░реЗрд▓ рдЫреЛрдбрд╝ рджреЗ (рдХреМрди, рдХреНрдпрд╛, рдХрдм)ред
рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЕрдЧрд▓реЗ рдХрджрдо рдЬреЛ рдЖрдк рдЗрд╕ рд╣рдлреНрддреЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЪрд╛рд░ рд╕рджрд╕реНрдп рдХреА рдПрдХ рдЫреЛрдЯреА ops рдЯреАрдо рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдПрдХ рдмрд╛рд░ рд╢рд┐рдк рдХрд░рддреА рд╣реИред рд╡реЗ рдЕрдХреНрд╕рд░ рдЕрдкрдирд╛ Go рдмреИрдХрдПрдВрдб рд░реАрдЬрдирд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдбрдХреНрдЯ рдЯреАрдо рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреА рд░рд╣рддреА рд╣реИред рдЙрдирдХрд╛ рд▓рдХреНрд╖реНрдп рд╕рд░рд▓ рд╣реИ: рд░рд╛рдд рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдХрдо рдХреЙрд▓реНрд╕ рдФрд░ рдРрд╕реЗ рд░рд┐рд▓реАрдЬрд╝ рдЬреЛ рдХрд┐рд╕реА рдХреЛ рд╣реИрд░рд╛рди рди рдХрд░реЗрдВред
рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╢реБрдХреНрд░рд╡рд╛рд░ рдХрд╛ рдмрджрд▓рд╛рд╡: рд╡реЗ customers рдореЗрдВ рдПрдХ рдирдпрд╛ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (schema change) рдФрд░ API рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИ (code change)ред рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЗрдирдХреЛ рдПрдХ рд░рд┐рд▓реАрдЬрд╝ рдорд╛рдирддреА рд╣реИред рдпрд╣ рдПрдХ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдмрдирд╛рддреА рд╣реИ, рдЙрд╕реА рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рддреА рд╣реИ, рдФрд░ рддрднреА рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрднреА рдЙрд╕ рдХреЛрдб рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рд╣реЛрддрд╛ рдЬрд┐рд╕рдХреА рдЙрд╕реЗ рдЙрдореНрдореАрдж рд╣реИ, рдФрд░ рдХреЛрдб рдХрднреА рдЙрд╕рдХреЗ рдореИрдЪрд┐рдВрдЧ рд╕реНрдХреАрдорд╛ рдХреЗ рдмрд┐рдирд╛ рдбрд┐рдкреНрд▓реЙрдп рдирд╣реАрдВ рд╣реЛрддрд╛ред
рдЬрдм рд╕реНрдХреАрдорд╛ рдмрджрд▓рд╛рд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдЧреЗрдЯ рдЬреЛрдбрд╝рддреА рд╣реИред рдпрд╣ рдЬрд╛рдБрдЪрддреА рд╣реИ рдХрд┐ рдорд╛рдЗрдЧреНрд░реЗрд╢рди additive рд╣реИ (рдЬреИрд╕реЗ nullable рдХреЙрд▓рдо рдЬреЛрдбрд╝рдирд╛) рдФрд░ рдЬреЛрдЦрд┐рдо рднрд░реЗ рдПрдХреНрд╢рдВрд╕ (рдЬреИрд╕реЗ рдХреЙрд▓рдо рдбреНрд░реЙрдк рдпрд╛ рдмрдбрд╝реЗ рдЯреЗрдмрд▓ рдХреА рд░реАтАСрд░рд╛рдЗрдЯ) рдХреЛ рдлреНрд▓реИрдЧ рдХрд░рддреА рд╣реИред рдЕрдЧрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЬреЛрдЦрд┐рдо рднрд░рд╛ рд╣реИ, рддреЛ рд░рд┐рд▓реАрдЬрд╝ рдкреНрд░реЛрдбрдХреНрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рд░реБрдХ рдЬрд╛рддреА рд╣реИред рдЯреАрдо рдпрд╛ рддреЛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рддреА рд╣реИ рдпрд╛ рдПрдХ рдирд┐рдпреЛрдЬрд┐рдд рд╡рд┐рдВрдбреЛ рд╢реЗрдбреНрдпреВрд▓ рдХрд░рддреА рд╣реИред
рдЕрдЧрд░ рдЯреЗрд╕реНрдЯ рдлреЗрд▓ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдХреБрдЫ рднреА рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝рддрд╛ред рдпрд╣ рдкреНрд░реАтАСрдкреНрд░реЛрдбрдХреНрд╢рди рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлреЗрд▓ рд╣реЛрдиреЗ рдкрд░ рднреА рд╕рдЪреНрдЪрд╛ рд╣реИред рдкрд╛рдЗрдкрд▓рд╛рдЗрди "рдмрд╕ рдЗрд╕реЗ рдПрдХ рдмрд╛рд░" рдХрд░рдХреЗ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдЕрдзрд┐рдХрддрд░ рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рд╕рд░рд▓ рдЕрдЧрд▓реЗ рдХрджрдо:
- рдПрдХ environment рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ (рдПрдХ dev deploy рдЬрд┐рд╕реЗ рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд░реАрд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
- рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реЗ рд╣рдореЗрд╢рд╛ рдПрдХ рд╡рд░реНрд╢рдирдб рдмрд┐рд▓реНрдб рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рд╛рдПрдБред
- рдбреЗрд╡рд▓рдк рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдСрдЯреЛрдореИрдЯрд┐рдХ рдЪрд▓рд╛рдПрдБ, рдкрд░ рдкреНрд░реЛрдбрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░реВрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рд░рдЦреЗрдВред
- рдХреБрдЫ рд╣рдлреНрддреЛрдВ рддрдХ dev рд╕реНрдерд┐рд░ рд░рд╣рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА staging рдЬреЛрдбрд╝реЗрдВред
- рдПрдХ рдкреНрд░реЛрдбрдХреНрд╢рди рдЧреЗрдЯ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ green tests рдФрд░ рд╕рдлрд▓ staging рдбрд┐рдкреНрд▓реЙрдп рдорд╛рдБрдЧрддрд╛ рд╣реЛред
рдЕрдЧрд░ рдЖрдк AppMaster рд╕реЗ рдмреИрдХрдПрдВрдб рдЬрдирд░реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд░реАрдЬрдирд░реЗрд╢рди рдХреЛ рд╡рд╣реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реНрдЯреЗрдЬреЗрдЬрд╝ рдореЗрдВ рд░рдЦреЗрдВ: regenerate, build, test, migrate рд╕реБрд░рдХреНрд╖рд┐рдд рдПрдиреНрд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдореЗрдВ, рдлрд┐рд░ deployред рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рд╕реНрд░реЛрдд рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрд░реЛрдд рдХреА рддрд░рд╣ рдЯреНрд░реАрдЯ рдХрд░реЗрдВред рд╣рд░ рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рдПрдХ рдЯреИрдЧреНрдб рд╡рд░реНрд╢рди рд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рд╣рд░ рдмрд╛рд░ рдПрдХ рд╣реА рд╕реНрдЯреЗрдкреНрд╕ рд╣реЛрдВред
рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди
рдЕрдкрдиреА Go рд╡рд░реНрд╢рди рдФрд░ рдмрд┐рд▓реНрдб рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдкрд┐рди рдХрд░реЗрдВ рддрд╛рдХрд┐ рдПрдХ рд╣реА рдЗрдирдкреБрдЯ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдмрд╛рдЗрдирд░реА рдпрд╛ рдЗрдореЗрдЬ рдмрдирд╛рдПред рдЗрд╕рд╕реЗ тАЬрдореЗрд░реЗ рдорд╢реАрди рдкрд░ рдЪрд▓рддрд╛ рд╣реИтАЭ рдЬреИрд╕реА рд╕рдорд╕реНрдпрд╛рдПрдБ рдХрдо рд╣реЛрдВрдЧреА рдФрд░ рдлреЗрд▓ рд╣реЛрдирд╛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
рд░реЗрдЬрдирд░реЗрд╢рди рд╕реЗ рдПрдиреНрдбрдкреЙрдЗрдВрдЯ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЙрдбрд▓ рдФрд░ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдХрд┐рд╕реА рдиреЗ рдХреЛрдб рд╣рд╛рде рд╕реЗ рди рдЫреБрдЖ рд╣реЛред рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЙрди рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╣рд░ рдмрд╛рд░ рдПрдХ рд╣реА рдЪреЗрдХ рд╕реЗ рдЧреБрдЬрд╛рд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд░реЗрдЬрдирд░реЗрдЯ рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣рддрд╛ рд╣реИред
рдПрдХ рдмрд╛рд░ рдмрд┐рд▓реНрдб рдХрд░реЗрдВ, рдлрд┐рд░ рд╡рд╣реА рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ dev, staging рдФрд░ prod рдореЗрдВ рдкреНрд░рдореЛрдЯ рдХрд░реЗрдВред рд╣рд░ environment рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдмрд┐рд▓реНрдб рдХрд░рдиреЗ рдкрд░ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдХрднреА рдЯреЗрд╕реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рд╣рд░ PR/commit рдкрд░ рддреЗрдЬрд╝ рдЧреЗрдЯреНрд╕ рдЪрд▓рд╛рдПрдБ: рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ, рдмреЗрд╕рд┐рдХ рд╕реНрдЯреИрдЯрд┐рдХ рдЪреЗрдХ, рдмрд┐рд▓реНрдб рдФрд░ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯреНрд╕ (рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд╕рд╛рде)ред рдЗрд╕реЗ рдЗрддрдирд╛ рддреЗрдЬрд╝ рд░рдЦреЗрдВ рдХрд┐ рд▓реЛрдЧ рдЗрд╕реЗ рдмypass рди рдХрд░реЗрдВ, рдФрд░ рдЗрддрдирд╛ рд╕рдЦреНрдд рд░рдЦреЗрдВ рдХрд┐ рдЧрд▓рдд рдмрджрд▓рд╛рд╡ рдЬрд▓реНрдж рд░реЛрдХреЗ рдЬрд╛рдПрдБред
рдПрдХ рдЫреЛрдЯрд╛ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рд╕реНрдЯреЗрдЬ рд░рдЦреЗрдВ рдЬреЛ рд╕рд░реНрд╡рд┐рд╕ рдХреЛ рдкреНрд░реЛрдбрдХреНрд╢рди-рдЬреИрд╕реА рдХреЙрдиреНрдлрд╝рд┐рдЧ рдХреЗ рд╕рд╛рде рдмреВрдЯ рдХрд░реЗрдВ рдФрд░ рд░рд┐рдпрд▓ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ (рдЬреИрд╕реЗ PostgreSQL) рд╕реЗ рдмрд╛рдд рдХрд░реЗред рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рд╣реИ рдХрд┐ тАЬрдХрдВрдкрд╛рдЗрд▓ рддреЛ рд╣реЛ рдЧрдпрд╛ рд▓реЗрдХрд┐рди рд╕реНрдЯрд╛рд░реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛тАЭ рдЬреИрд╕реА рд╕рдорд╕реНрдпрд╛рдПрдБ рдкрдХрдбрд╝реА рдЬрд╛ рд╕рдХреЗрдВ рдмрд┐рдирд╛ CI рдХреЛ рдШрдВрдЯреЛрдВ рдХрд╛ рдмрдирд╛рдпрд╛ред
рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ рдПрдХ рдирд┐рдпрдВрддреНрд░рд┐рдд рд░рд┐рд▓реАрдЬрд╝ рд╕реНрдЯреЗрдк рдХреА рддрд░рд╣ рджреЗрдЦреЗрдВ, рди рдХрд┐ рд╣рд░ рдбрд┐рдкреНрд▓реЙрдп рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЖрдк рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдХреБрдЫред рд╕реНрдкрд╖реНрдЯ рд▓реЙрдЧ, рд╕рд┐рдВрдЧрд▓-рд░рди рд▓реЙрдХ рдФрд░ рдкреНрд░реЛрдбрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдореЛрджрди рдЖрд╡рд╢реНрдпрдХ рд░рдЦреЗрдВтАФрдХрдИ рд╕реНрдХреАрдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╕рд░рд▓ рд░реЛрд▓рдмреИрдХ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрддреЗред
рд░реАрдбрд┐рдиреЗрд╕ рдЪреЗрдХреНрд╕ рд░рдЦреЗрдВ рддрд╛рдХрд┐ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЗрд╡рд▓ рдЙрд╕реА рдкреЙрдб/рдЗрдВрд╕рдЯреЗрдВрд╕ рдкрд░ рдЬрд╛рдП рдЬреЛ рддреИрдпрд╛рд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд▓рд┐рд╡рдиреЗрд╕ рдЪреЗрдХреНрд╕ рд░рдЦреЗрдВ рддрд╛рдХрд┐ рдЕрдЯрдХреА рд╣реБрдИ рдХрдВрдЯреЗрдирд░ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рд╣реЛ рдЬрд╛рдПрдБред рд░реАрдпрд▓рд┐рд╕реНрдЯрд┐рдХ resource requests/limits рд╕реЗрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ CI рдкрд░ рдкрд╛рд╕ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╕рд░реНрд╡рд┐рд╕ рдкреНрд░реЛрдбрдХреНрд╢рди рдореЗрдВ OOM рдирд╛ рдЦрд╛ рдЬрд╛рдПред
рдПрдХ рд╕рд╛рджрд╛ systemd рдпреВрдирд┐рдЯ рдФрд░ рдПрдХ рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬрд╝ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдХреНрд╕рд░ VMs рдкрд░ рд╢рд╛рдВрдд рдбрд┐рдкреНрд▓реЙрдп рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╣реЛрддреЗ рд╣реИрдВред рд╕рдВрднрд╡ рд╣реЛ рддреЛ рд╡рд╣реА рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдореЙрдбрд▓ рд░рдЦреЗрдВ рдЬреЛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рд╣рд░ рдбрд┐рдкреНрд▓реЙрдп рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рдкреЛрд╕реНрдЯтАСрдбрд┐рдкреНрд▓реЙрдп рд╕реНрдореЛрдХ рдЪреЗрдХ рдЪрд▓рд╛рдПрдБред
рд╕рд┐рдХреНрдпреЛрд░ рд╕реНрдЯреЛрд░ рдореЗрдВ рд░рдЦреЗрдВтАФрд░рд┐рдкреЙрдЬрд┐рдЯрд░реА, рдЗрдореЗрдЬ рдпрд╛ CI рд▓реЙрдЧреНрд╕ рдореЗрдВ рдирд╣реАрдВред рдбрд┐рдкреНрд▓реЙрдп рдЯрд╛рдЗрдо рдкрд░ рдЗрдиреНрд╣реЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ, рдкрдврд╝рдиреЗ рдХреА рд╕реАрдорд╛рдПрдБ рд░рдЦреЗрдВ рдФрд░ рд░реЛрдЯреЗрд╢рди рдХреЛ рдирд┐рдпрдорд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдПрдВред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред
рд░реЗрдЬрдирд░реЗрд╢рди рдХреЛ рдЙрд╕реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдЕрдВрджрд░ рд░рдЦреЗрдВ рдЬреИрд╕реЗ рдЕрдиреНрдп рдмрджрд▓рд╛рд╡: regenerate, build, test, package, рдлрд┐рд░ migrate рдФрд░ deploy рдЧреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рдеред AppMaster рд╕реЗ рдЬрдирд░реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдпрд╣ рддрд░реАрдХрд╛ рдЖрдкрдХреЛ рддреЗрдЬрд╝реА рд╕реЗ рдФрд░ рднрд░реЛрд╕реЗрдордВрдж рддрд░реАрдХреЗ рд╕реЗ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред


