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

рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдирд╣реАрдВ рд╣реИрдВ, рдпрд╣рд╛рдВ рдЙрдирдХреЗ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд╣реИ ред
рдХрдВрдЯреЗрдирд░ рд▓рд╛рдн
рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рд▓рд╛рдн рд╣реИрдВ:
- рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА
- рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛
- рдЗрдиреНрд╕реБрд▓реЗрд╢рди
- рд▓рдкрдЯ
- рдЕрдЪрд▓ рд╕реНрдерд┐рддрд┐ (рдЕрдЪрд▓ рд╕реНрдерд┐рддрд┐)
рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА
рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ, рдЬреИрд╕реЗ рднреМрддрд┐рдХ рд╕рд░реНрд╡рд░, рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди, рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдФрд░ рдЙрддреНрдкрд╛рдж рд╡рд╛рддрд╛рд╡рд░рдг, рдФрд░ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рд╛рде рд╣реА, рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдЗрд╕ рддрдереНрдп рдореЗрдВ рд╣реЛрддреА рд╣реИ рдХрд┐ рдбреЙрдХрдЯрд░ рдХреА рдЫрд╡рд┐ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдФрд░ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХрд╣реАрдВ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЕрдЧрд░ рдбреЙрдХрдЯрд░ рд╡рд╣рд╛рдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛рдиреАред рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рд╕рд░реНрд╡рд░ рдкрд░ред
рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛
рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдХреНрдпрд╛ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдУрдПрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ, рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрджрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ? рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдирд╣реАрдВ, рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдХрдВрдЯреЗрдирд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ: рдХреЗрд╡рд▓ рдЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВред рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд╡реЗ рдХрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЕрдХреНрд╕рд░ рдХрдИ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рд▓реЗрддреА рд╣реИ, рдЬрдмрдХрд┐ рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреБрдЫ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдЬрд┐рддрдирд╛ рдЫреЛрдЯрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╕рд┐рдВрдЧрд▓ рдорд╢реАрди рдкрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд╕рд░реНрд╡рд░ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░ рд╣реЛрддрд╛ рд╣реИ, рдХрдо рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрдо рд▓рд╛рдЧрдд рд╣реЛрддреА рд╣реИред
рдЗрдиреНрд╕реБрд▓реЗрд╢рди
рдХрдВрдЯреЗрдирд░ рд╕рднреА рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрдИ рдХрдВрдЯреЗрдирд░ рдПрдХ рд╣реА рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реЗ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдмреАрдЪ рдХрд┐рд╕реА рднреА рдмрд╛рддрдЪреАрдд рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдПрдХ рдХрдВрдЯреЗрдирд░ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдиреНрдп рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдЕрд▓рдЧрд╛рд╡ рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рднреА рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рд╣реЛрд╕реНрдЯ рдкрд░ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреА рднреЗрджреНрдпрддрд╛ рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдиреЗ рд╕реЗ рдкреВрд░реЗ рд╕рд░реНрд╡рд░ рддрдХ рд╣рдорд▓рд╛рд╡рд░ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдВрдЯреЗрдирд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЗрд╡рд▓ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХрдВрдЯреЗрдирд░ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд▓рдкрдЯ
рдЪреВрдВрдХрд┐ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдУрдПрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╕реЗрдХрдВрдб рдХреЗ рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рд╢реБрд░реВ, рд░реЛрдХрд╛ рдпрд╛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕рд╣рд┐рдд рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЧрддрд┐ рджреЗрдЧрд╛ред рдЖрдк рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдирд╛ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдЕрдЪрд▓ рд╕реНрдерд┐рддрд┐ (рдЕрдЪрд▓ рд╕реНрдерд┐рддрд┐)
рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЕрд╡рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрджреНрдпрддрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдЧрддрд┐ рдЕрд╕рдВрдЧрддрддрд╛ рдХреЛ рдХрдо рдХрд░рддреА рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рджреЛрд╣рд░рд╛рдиреЗ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдкрд░ рдЕрдзрд┐рдХ ред
рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рдпреЗ рд╕рднреА рд▓рд╛рдн рдЖрдкрдХреЛ рдирдП рддрд░реАрдХреЗ рд╕реЗ рдЕрдкрдиреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рд╡рд╛рджреНрдп-рд╕реНрдерд╛рди
рд╕рдордп рдХреЗ рд╕рд╛рде рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдФрд░ рд╕рд░реНрд╡рд░ рдЕрдХреНрд╕рд░ "рд╡реНрдпрдХреНрддрд┐рддреНрд╡" рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрдИ рдЖрдо рддреМрд░ рдкрд░ рдЕрдкреНрд░рд┐рдп рдЖрд╢реНрдЪрд░реНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рдПрдХ рдХреЛрдб (IoC) рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╣реИ - рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд░реНрдгрдирд╛рддреНрдордХ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рдкреНрд░рдмрдВрдзрдиред
IoC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдкрд░реНрдпрд╛рд╡рд░рдг рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЯреАрдо рд╣рдореЗрд╢рд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рд▓рдХреНрд╖реНрдп рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рд╕рдорд╛рди рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рд▓рд╛рддреА рд╣реИред рдпрд╣ рдореМрдЬреВрджрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдХреЗ рдпрд╛ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
IoC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рд▓рдХреНрд╖реНрдп рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдПрдХ рдирдИ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдмреБрдзрд╡рд╛рд░ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╕рдм рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдХрдВрдЯреЗрдирд░ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдФрд░ рдПрдХ рдирдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдирдИ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рдорд┐рдирдЯ рд▓рдЧрддреЗ рд╣реИрдВред
рд╕реНрдХреЗрд▓рд┐рдВрдЧ
рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЙрдкрдХрд░рдг рднреА рд╡рд░реНрддрдорд╛рди рд▓реЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдХрдИ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдЪрд▓рд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдЖрд╡реЗрджрди рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░реЗрдВред рдпрд╣ рд╕рдм рднреА рдЖрд╡реЗрджрди рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред
рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЪрд░рдгреЛрдВ рдореЗрдВ рдХрдВрдЯреЗрдирд░
рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЪрд░рдгреЛрдВ рдореЗрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд╛рднреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдбрд┐рдЬрд╝рд╛рдЗрди
рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╣реИред рдбреЙрдХрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рджреЛ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ: рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП docker run
рдФрд░ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП docker run
рд▓рд┐рдПред рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдЬ рдкрд░ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред
рдбрд┐рдмрдЧрд┐рдВрдЧ
рд╕рднреА рд╡рд╛рддрд╛рд╡рд░рдг рд╕реБрд╕рдВрдЧрдд рд╣реИрдВ рдФрд░ рдЙрдирдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдореМрдЬреВрдж рд╣реИрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрд╡рд╢реНрдпрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрд╣ docker pull
рдХреЛ рдмреНрдпрд╛рдЬ рдХреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ docker pull
рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдкрд░реАрдХреНрд╖рдг / рдХреНрдпреВрдП
рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рддреНрд░реБрдЯрд┐ рдкрд░реНрдпрд╛рд╡рд░рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд░реНрддреЛрдВ рдХреЛ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рднреА рдЕрд╡рд╕рдВрд░рдЪрдирд╛ рдкрд░рд┐рд╡рд░реНрддрди "рдкреНрд░рд▓реЗрдЦрд┐рдд" рд╣реИрдВред рдЪрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реЛ рд░рд╣реА рд╣реИ - рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ, рдЪреМрдЦрдЯреЛрдВ, рдУрдПрд╕ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ ... рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдЪрд▓рд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рд╡рд┐рддрд░рдг
рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ, рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрдкрдХреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рддреИрдирд╛рддреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрд▓рдЧрд╛рд╡ рдХреЗ рдХрд╛рд░рдг рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдХрдВрдЯреЗрдирд░ рд╡рд┐рддрд░рдг рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рд░рдВрддрд░ рд╡рд┐рддрд░рдг
рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдЕрднреНрдпрд╛рд╕ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рд╡рд┐рддрд░рдг рд╕реНрд╡рдЪрд╛рд▓рди рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╢реНрдп рд╣реИ:

рддреАрди рдореБрдЦреНрдп рдЪрд░рдгреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рд╕рднрд╛
- рд╡рд┐рддрд░рдг
- рд▓рд╛рдВрдЪ
рд╕рднрд╛
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдереА - рд╣рдордиреЗ рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рд╡реЗрд╢ рдФрд░ рдирдП рдХреЛрдб рдЖрдзрд╛рд░ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рдирдП рдХреЛрдб рдЖрдзрд╛рд░ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛред рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреВрд░реНрдг рд╣реИред рдмрд┐рд▓реНрдб рдкрд░рд┐рдгрд╛рдо рдПрдХ рдбреЙрдХрд░ рдЫрд╡рд┐ рд╣реИ рдЬрд┐рд╕реЗ рдХрд╣реАрдВ рднреА рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд┐рддрд░рдг
рд╣рдорд╛рд░реА рдЫрд╡рд┐ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдбреЙрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдбреЙрдХрдЯрд░ рдЫрд╡рд┐ рдХреА рдореЗрдЬрдмрд╛рдиреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИред рд╡рд╣рд╛рдВ рд╡рд╣ рдкрд┐рдЫрд▓реА рдЫрд╡рд┐ рдХреЛ рдЙрд╕реА рдирд╛рдо (рдЯреИрдЧ) рд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХреЗ рдХрд╛рд░рдг, рд╣рдордиреЗ рдПрдХ рдирдИ рдЫрд╡рд┐ ( MyProject/MyApp:master
) рдЗрдХрдЯреНрдареА рдХреА рд╣реИ, рдФрд░ рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдбреЙрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдЫрд╡рд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдХреЛрдИ рднреА MyProject/MyApp:master
рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓реЗрдЧрд╛ред
рд▓рд╛рдВрдЪ
рдЕрдВрдд рдореЗрдВ, рдЫрд╡рд┐ рд╢реБрд░реВ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╕реАрдбреА рд╕рд┐рд╕реНрдЯрдо, рдЬреИрд╕реЗ рдЧрд┐рдЯрд▓реИрдм, рдЗрд╕реЗ рдпрд╛ рддреЛ рд╕реАрдзреЗ рдпрд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░ рдХреА рдорджрдж рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рд╣реА рд╣реЛрддреА рд╣реИ - рдХреБрдЫ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдордп-рд╕рдордп рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдпрджрд┐ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЙрдкрд▓рдмреНрдз рд╣реЛ рддреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрди рдЪрд░рдгреЛрдВ рдХреЛ рд╕рдордЭрд╛рддреЗ рд╣реБрдП рд╡реЗрдмрд┐рдирд╛рд░ рджреЗрдЦреЗрдВред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдкреНрд░рддрд┐рдмрджреНрдз рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ:

рд╣рдорд╛рд░реЗ рд╕рддрдд рд╡рд┐рддрд░рдг рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ, рд╣рдо:
- GitLab рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдХреЛрдб
- рд╣рдо рдЫрд╡рд┐ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ
- рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ
- рд╣рдорд╛рд░реА рдбреЙрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдПрдХ рдирдИ рдЫрд╡рд┐ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ
- рдбреЙрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:
- рдбрд╛рдХ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗрд╡рд╛рд▓рд╛ рдордЬрд╝рджреВрд░
- рдбреЙрдХрдЯрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА
- рдкрдВрдЬреАрдХреГрдд рдбреЛрдореЗрди (рд╡реИрдХрд▓реНрдкрд┐рдХ, рд▓реЗрдХрд┐рди рд╡рд╛рдВрдЫрдиреАрдп)
- рдЬреАрдпреВрдЖрдИ рдЙрдкрдХрд░рдг (рд╡реИрдХрд▓реНрдкрд┐рдХ)
рдбрд╛рдХ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗрд╡рд╛рд▓рд╛ рдордЬрд╝рджреВрд░
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдбреЙрдХрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рд▓рд┐рдирдХреНрд╕ рдХреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рдЬреИрд╕реЗ рдХрд┐ рдЙрдмрдВрдЯреВ, рдЖрд░рдПрдЪрдИрдПрд▓ рдпрд╛ рд╕реБрдЬрд╝ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдХрд▓ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред рдореИрдВ рдХреЛрд░реЛрдЬрд╝, рд░реИрдирдЪреЗрд░реЛрд╕, рдЖрджрд┐ рдЬреИрд╕реЗ рд╡рд┐рддрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рджреЗрддрд╛ - рд╡реЗ рд╢реБрд░реБрдЖрддреА рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдирд╣реАрдВ рд╣реИрдВред рд╕реНрдЯреЛрд░реЗрдЬ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдбреЗрд╡рд┐рдХреНрдореЗрдкрд░ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВ ред
рдпрджрд┐ рд╣рдо рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рддреИрдирд╛рддреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЯреВрд▓ рдЬреИрд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕, рд░рдВрдЪрд░ рдпрд╛ рдЭреБрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЙрдирдХреА рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ (рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ)ред
рдбреЙрдХрдЯрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА
рдпрд╣ рдкрд╣рд▓рд╛ рдХрдВрдЯреЗрдирд░ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдбреЙрдХрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдбреЛрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдирд┐рдпрдВрддреНрд░рдг рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреА рдЫрд╡рд┐рдпрд╛рдВ рдХрд╣рд╛рдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ
- рд╕реНрд╡рдпрдВ рдПрдХ рдЫрд╡рд┐ рд╡рд┐рддрд░рдг рд╕рд░реНрд╡рд░
- рдЫрд╡рд┐ рднрдВрдбрд╛рд░рдг рдФрд░ рд╡рд┐рддрд░рдг рдХреЛ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░реЗрдВ
рдпрд╣рд╛рдВ рдбреЙрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ ред
рдбреЙрдХрдЯрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
рдбреЙрдХрдЯрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЛ рдЧрд┐рдЯрд▓реИрдм рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреЙрдХрдЯрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЛ рдПрдЪрдЯреАрдЯреАрдкреАрдПрд╕ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LetтАЩs Encrypt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВрдиреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдбреЙрдХрдЯрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА HTTPS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рд╣реИ (рдЖрдк рдЗрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ), рдбреЙрдХрдЯрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЛ рдЧрд┐рдЯрд▓реИрдм рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред рдпреЗ рдирд┐рд░реНрджреЗрд╢ рдЖрдкрдХреЗ GitLab рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реЗрдЯрдЕрдк рдХреЛ рдбреЙрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ /etc/gitlab/ssl
, рдФрд░ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ /etc/gitlab/gitlab.rb
:
registry_external_url 'https://docker.domain.com' gitlab_rails ['registry_api_url'] = "https://docker.domain.com"
GitLab рдХреЛ рдкреБрди: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдирдпрд╛ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдЯреИрдм рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЬреЛ рдХрд┐ рдмрдирд╛рдИ рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╛рдо рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрдВред

рдбреЛрдореЗрди
рд╣рдорд╛рд░реЗ рдирд┐рд░рдВрддрд░ рд╡рд┐рддрд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫрд╡рд┐ рдмрдирд╛рдПрдВрдЧреЗ, рдФрд░ рдпрджрд┐ рдЫрд╡рд┐ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдХрд░рддреА рд╣реИ, рддреЛ рдпрд╣ рдбреЙрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрддреА рд╣реИ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рд╕рднреА рд╢рд╛рдЦрд╛рдУрдВ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
<featureName>.docker.domain.com
рдкрд░ рдХрдИ <featureName>.docker.domain.com
рд╢рд╛рдЦрд╛рдПрдБmaster.docker.domain.com
рдкрд░ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдгpreprod.docker.domain.com
рдкрд░ preprod.docker.domain.com
рд╕рдВрд╕реНрдХрд░рдг- рдкреНрд░реЛрдбрдХреНрдЯ рд╡рд░реНрдЬрди
prod.docker.domain.com
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдбреЛрдореЗрди рдирд╛рдо рдФрд░ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб DNS рд░рд┐рдХреЙрд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ * .docker.domain.com
рдХреЗ IP рдкрддреЗ рдкрд░ * .docker.domain.com
рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
nginx
рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЙрдк-рдбреЛрдореЗрди рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╣рдо Nginx рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рдЧрд╛рдЗрдб рд╣реИ ред
рдЬреАрдпреВрдЖрдИ рдЙрдкрдХрд░рдг
рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдпрд╛ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрдИ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
- рдХреНрд╖реЗрддреНрд░ рд▓рдЧрд╛рдиреЗрд╡рд╛рд▓рд╛
- MicroBadger
- Portainer
- рд╕рд░рд▓ рдХрд░реНрддрд╛ рдЙрдИ
- ...
рд╡реЗ рдЖрдкрдХреЛ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдФрд░ CLI рдХреЗ рдмрдЬрд╛рдп GUI рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╣реИ рдХреНрдпрд╛ Rancher рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИ:

рдЧрд┐рдЯрд▓рдм рд░рдирд░
рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдЕрдиреНрдп рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ GitLab рдзрд╛рд╡рдХ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЬрд▓реНрд▓рд╛рдж рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рди рдХрд┐ рдбреЙрдХрд░ рдХреАред рдПрдХреНрдЬрд╝рд┐рдХреНрдпреВрдЯрд░ рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдЫрд╡рд┐ рдХреЗ рднреАрддрд░ рд╕реЗ рдХреБрдЫ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╕рдордп, рдФрд░ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдкреАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рд░реВрдкрдг рд╕рд╛рдХреНрд╖реНрдп рдкреВрд░реЗ рдХрдВрдЯреЗрдирд░ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрдХ рд╢реЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╕рддрдд рд╡рд┐рддрд░рдг рд╡рд┐рдиреНрдпрд╛рд╕
рдЕрдм рдЬрдм рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рд╕рддрдд рд╡рд┐рддрд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рднрд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ рдЫрд╡рд┐ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдорд╛рд░рд╛ рдХреЛрдб, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд╕реАрдбреА рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕ gitlab-ci.yml
, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ (рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП) рд╣рдо рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рдкрд░ рдЫрд╡рд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред
GitLab.xml
рд╕реАрдбреА рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ, рд╡рд┐рднрд┐рдиреНрди рдХреЙрд▓рдмреИрдХ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдпрд╛ рдЕрдкрдиреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд┐рдЯ рд╕рдмрдореЙрдбреНрдпреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рд╕рдмрдореЙрдбреНрдпреВрд▓реНрд╕ рдмреЗрд╣рддрд░ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрджреНрдпрддрд┐рдд рд░рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк GitLab рдкрд░ рдПрдХ рд░рд┐рд▓реАрдЬ рдмрдирд╛рдирд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ ADD рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реИред
iris.key
рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬреАред рдЗрд╕реЗ рдХрдВрдЯреЗрдирд░ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рджреМрд░рд╛рди рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рднрдВрдбрд╛рд░ рдореЗрдВ рдХреБрдВрдЬреА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдк WRC рдкрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ InterSystems IRIS рдЕрдиреБрднрд╡ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
pwd.txt
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд╛рд╕рд╡рд░реНрдб рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ред рдлрд┐рд░ рд╕реЗ, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред
load_ci.script
рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛ:
- InterSystems IRIS рдореЗрдВ OS рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ
- рднрд╛рд░ GitLab.xml
- GitLab рдХреЙрд▓рдмреИрдХ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ
- рднрд╛рд░ рдХреЛрдб
set sc = ##Class(Security.System).Get("SYSTEM",.Properties) write:('sc) $System.Status.GetErrorText(sc) set AutheEnabled = Properties("AutheEnabled") set AutheEnabled = $ZBOOLEAN(+AutheEnabled,16,7) set Properties("AutheEnabled") = AutheEnabled set sc = ##Class(Security.System).Modify("SYSTEM",.Properties) write:('sc) $System.Status.GetErrorText(sc) zn "USER" do ##class(%SYSTEM.OBJ).Load(##class(%File).ManagerDirectory() _ "GitLab.xml","cdk") do ##class(isc.git.Settings).setSetting("hooks", "MyApp/Hooks/") do ##class(isc.git.Settings).setSetting("tests", "MyApp/Tests/") do ##class(isc.git.GitLab).load() halt
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЦрд╛рд▓реА рдЫреЛрдбрд╝реА рдЧрдИ рд╣реИред рдпрджрд┐ рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред
gitlab-ci.yml
рдЕрдм, рдирд┐рд░рдВрддрд░ рд╡рд┐рддрд░рдг рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ:
build image: stage: build tags: - test script: - cp -r /InterSystems/mount ci - cd ci - echo 'SuperUser' | cat - pwd.txt load_ci.script > temp.txt - mv temp.txt load_ci.script - cd .. - docker build --build-arg CI_PROJECT_DIR=$CI_PROJECT_DIR -t docker.domain.com/test/docker:$CI_COMMIT_REF_NAME .
рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪреВрдВрдХрд┐ рдЫрд╡рд┐ рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд╡рд▓ рдмреЗрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреА рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИ - рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, рдЖрдкрдХреЛ "рдЧреБрдкреНрдд" рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (рдЬрд┐рд╕рдореЗрдВ GitLab.xml
, iris.key
, pwd.txt
рдФрд░ load_ci.skript
) рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрд▓реЛрди рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЯрд░реНрдорд┐рдирд▓ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдиреНрд╣реЗрдВ load_ci.script
рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ (рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ load_ci.script
рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рд▓рд╛рдЗрди рдХреА load_ci.script
)ред
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдПрдХ рдбреЙрдХрд░ рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВ: docker.domain.com/test/docker:$CI_COMMIT_REF_NAME
рдЬрд╣рд╛рдВ $CI_COMMIT_REF_NAME
рд╢рд╛рдЦрд╛ рдХрд╛ рдирд╛рдо рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдЫрд╡рд┐ рдЯреИрдЧ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ GitLab рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЗрд╕реЗ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдЯреИрдм рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХреЗ (рд╕рд╣реА рдЯреИрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкреВрд░реНрдг рдирд┐рд░реНрджреЗрд╢ рд╡рд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ)ред
Dockerfile
Docker рдЫрд╡рд┐ Dockerfile рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ:
FROM docker.intersystems.com/intersystems/iris:2018.1.1.613.0 ENV SRC_DIR=/tmp/src ENV CI_DIR=$SRC_DIR/ci ENV CI_PROJECT_DIR=$SRC_DIR COPY ./ $SRC_DIR RUN cp $CI_DIR/iris.key $ISC_PACKAGE_INSTALLDIR/mgr/ \ && cp $CI_DIR/GitLab.xml $ISC_PACKAGE_INSTALLDIR/mgr/ \ && $ISC_PACKAGE_INSTALLDIR/dev/Cloud/ICM/changePassword.sh $CI_DIR/pwd.txt \ && iris start $ISC_PACKAGE_INSTANCENAME \ && irissession $ISC_PACKAGE_INSTANCENAME -U%SYS < $CI_DIR/load_ci.script \ && iris stop $ISC_PACKAGE_INSTANCENAME quietly
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ:
- рд╣рдо рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЯрд░рд╕рд┐рд╕реНрдЯрдо рдЖрдИрдЖрд░рдЖрдИрдПрд╕ рдХреА рдЫрд╡рд┐ рд▓реЗрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЗ рдбреЙрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдбреЙрдХрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдлрд╝рд░реНрд╕реНрдЯ рд▓реБрдХ рдЖрдЬрд╝рдорд╛рдПрдБ : рдбреЙрдХрд░ , рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рд╕рд┐рд╕реНрдЯрдо IRIS рдЗрдореЗрдЬ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕реЗ рдбреЙрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред
- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рд╣рдорд╛рд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (рдФрд░ "рдЧреБрдкреНрдд" рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛) рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБред
GitLab.xml
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬреА рдФрд░ GitLab.xml
рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБред- рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ
pwd.txt
рд╕реЗ рдорд╛рди рдореЗрдВ pwd.txt
ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди pwd.txt
рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред - рдЗрдВрдЯрд░рд╕рд┐рд╕реНрдЯрдо IRIS рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
load_ci.script
ред- InterSystems IRIS рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдПрдХ рдЖрдВрд╢рд┐рдХ рдмрд┐рд▓реНрдб рд▓реЙрдЧ рд╣реИ Running with gitlab-runner 10.6.0 (a3543a27) on docker 7b21e0c4 Using Shell executor... Running on docker... Fetching changes... Removing ci/ Removing temp.txt HEAD is now at 5ef9904 Build load_ci.script From http://gitlab.eduard.win/test/docker 5ef9904..9753a8d master -> origin/master Checking out 9753a8db as master... Skipping Git submodules setup $ cp -r /InterSystems/mount ci $ cd ci $ echo 'SuperUser' | cat - pwd.txt load_ci.script > temp.txt $ mv temp.txt load_ci.script $ cd .. $ docker build --build-arg CI_PROJECT_DIR=$CI_PROJECT_DIR -t docker.eduard.win/test/docker:$CI_COMMIT_REF_NAME . Sending build context to Docker daemon 401.4kB Step 1/6 : FROM docker.intersystems.com/intersystems/iris:2018.1.1.613.0 ---> cd2e53e7f850 Step 2/6 : ENV SRC_DIR=/tmp/src ---> Using cache ---> 68ba1cb00aff Step 3/6 : ENV CI_DIR=$SRC_DIR/ci ---> Using cache ---> 6784c34a9ee6 Step 4/6 : ENV CI_PROJECT_DIR=$SRC_DIR ---> Using cache ---> 3757fa88a28a Step 5/6 : COPY ./ $SRC_DIR ---> 5515e13741b0 Step 6/6 : RUN cp $CI_DIR/iris.key $ISC_PACKAGE_INSTALLDIR/mgr/ && cp $CI_DIR/GitLab.xml $ISC_PACKAGE_INSTALLDIR/mgr/ && $ISC_PACKAGE_INSTALLDIR/dev/Cloud/ICM/changePassword.sh $CI_DIR/pwd.txt && iris start $ISC_PACKAGE_INSTANCENAME && irissession $ISC_PACKAGE_INSTANCENAME -U%SYS < $CI_DIR/load_ci.script && iris stop $ISC_PACKAGE_INSTANCENAME quietly ---> Running in 86526183cf7c . Waited 1 seconds for InterSystems IRIS to start This copy of InterSystems IRIS has been licensed for use exclusively by: ISC Internal Container Sharding Copyright (c) 1986-2018 by InterSystems Corporation Any other use is a violation of your license agreement %SYS> 1 %SYS> Using 'iris.cpf' configuration file This copy of InterSystems IRIS has been licensed for use exclusively by: ISC Internal Container Sharding Copyright (c) 1986-2018 by InterSystems Corporation Any other use is a violation of your license agreement 1 alert(s) during startup. See messages.log for details. Starting IRIS Node: 39702b122ab6, Instance: IRIS Username: Password: Load started on 04/06/2018 17:38:21 Loading file /usr/irissys/mgr/GitLab.xml as xml Load finished successfully. USER> USER> [2018-04-06 17:38:22.017] Running init hooks: before [2018-04-06 17:38:22.017] Importing hooks dir /tmp/src/MyApp/Hooks/ [2018-04-06 17:38:22.374] Executing hook class: MyApp.Hooks.Global [2018-04-06 17:38:22.375] Executing hook class: MyApp.Hooks.Local [2018-04-06 17:38:22.375] Importing dir /tmp/src/ Loading file /tmp/src/MyApp/Tests/TestSuite.cls as udl Compilation started on 04/06/2018 17:38:22 with qualifiers 'c' Compilation finished successfully in 0.194s. Load finished successfully. [2018-04-06 17:38:22.876] Running init hooks: after [2018-04-06 17:38:22.878] Executing hook class: MyApp.Hooks.Local [2018-04-06 17:38:22.921] Executing hook class: MyApp.Hooks.Global Removing intermediate container 39702b122ab6 ---> dea6b2123165 [Warning] One or more build-args [CI_PROJECT_DIR] were not consumed Successfully built dea6b2123165 Successfully tagged docker.domain.com/test/docker:master Job succeeded
рд▓рд╛рдВрдЪ
рд╣рдорд╛рд░реА рдПрдХ рдЫрд╡рд┐ рд╣реИ, рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВред рд╕реБрд╡рд┐рдзрд╛ рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдмрд╕ рдкреБрд░рд╛рдиреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рдирд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдирдИ рд╢реБрд░реБрдЖрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрддреНрдкрд╛рдж рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рдЕрд╕реНрдерд╛рдпреА рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдордзреНрдпрдо рдХрдВрдЯреЗрдирд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреБрд░рд╛рдиреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯред
destroy old: stage: destroy tags: - test script: - docker stop iris-$CI_COMMIT_REF_NAME || true - docker rm -f iris-$CI_COMMIT_REF_NAME || true
рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓ рд░рд╣реЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрддреА рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ рд╕рдлрд▓ рд╣реЛрддреА рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдбреЙрдХрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рднреА рдиреЙрдирд╡реЗрдЬ рдХрдВрдЯреЗрдирд░ рдХреЛ рд░реЛрдХрдиреЗ / рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ)ред
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдирдпрд╛ рдХрдВрдЯреЗрдирд░ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред
run image: stage: run environment: name: $CI_COMMIT_REF_NAME url: http://$CI_COMMIT_REF_SLUG.docker.eduard.win/index.html tags: - test script: - docker run -d --expose 52773 --volume /InterSystems/durable/$CI_COMMIT_REF_SLUG:/data --env ISC_DATA_DIRECTORY=/data/sys --env VIRTUAL_HOST=$CI_COMMIT_REF_SLUG.docker.eduard.win --name iris-$CI_COMMIT_REF_NAME docker.eduard.win/test/docker:$CI_COMMIT_REF_NAME --log $ISC_PACKAGE_INSTALLDIR/mgr/messages.log
Nginx рдХрдВрдЯреЗрдирд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреЛрд░реНрдЯ рдореЗрдВ VIRTUAL_HOST
рдкрд░реНрдпрд╛рд╡рд░рдг VIRTUAL_HOST
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, 52773ред
рдЪреВрдВрдХрд┐ InterSystems IRIS рдореЗрдВ рд╣реЛрд╕реНрдЯ рдкрд░ рдХреБрдЫ рдбреЗрдЯрд╛ (рдкрд╛рд╕рд╡рд░реНрдб,% SYS, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛) рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЯрд┐рдХрд╛рдК% SYS рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╣реЛрд╕реНрдЯ рдкрд░ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЬреИрд╕реЗ:
iris.cpf
рдореБрдЦреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рд╣реИред- рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде
/csp
ред - рдирд┐рдЬреА Apache рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде
/httpd/httpd.conf
ред /mgr
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ:
- рдбреЗрдЯрд╛рдмреЗрд╕
IRISSYS
, IRISTEMP
, IRISAUDIT
, IRIS
, USER
ред IRIS.WIJ
ред- рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛
/journal
рднрдВрдбрд╛рд░рдг рдкрддреНрд░рд┐рдХрд╛ред - рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП
/temp
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ред SystemMonitor.log
, journal.log
, SystemMonitor.log
ред
рдЯрд┐рдХрд╛рдК% SYS рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, volume
рддрд░реНрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ISC_DATA_DIRECTORY
рд╣реЛрд╕реНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ ISC_DATA_DIRECTORY
рдФрд░ ISC_DATA_DIRECTORY
рд╡реИрд░рд┐рдПрдмрд▓ рдЯрд┐рдХрд╛рдК% SYS рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдХрдВрдЯреЗрдирд░реАрдХреГрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛рдмреЗрд╕ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП) рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЗрд╕рдХреА рдореИрдкрд┐рдВрдЧ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП USER
рдЧреБрдВрдЬрд╛рдЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджрд╛рдпрд░рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЯрд┐рдХрд╛рдК% SYS рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдкреВрд░реНрд╡рдЧрд╛рдореА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, % рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдЪрд╛рд╣рд┐рдП:
APP
рдХреНрд╖реЗрддреНрд░ / рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдБAPP
рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреЛрдб рдЕрдкрд▓реЛрдб рдХрд░реЗрдВUSER
рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдореИрдкрд┐рдВрдЧ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдПрдВ- рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд░реЗрдВ (рдореИрдВрдиреЗ рдПрдХ CSP рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдПрдХ REST рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛)
рдХреЛрдб% рдЗрдВрд╕реНрдЯреЙрд▓рд░ Class MyApp.Hooks.Local { Parameter Namespace = "APP"; /// See generated code in zsetup+1^MyApp.Hooks.Local.1 XData Install [ XMLNamespace = INSTALLER ] { <Manifest> <Log Text="Creating namespace ${Namespace}" Level="0"/> <Namespace Name="${Namespace}" Create="yes" Code="${Namespace}" Ensemble="" Data="IRISTEMP"> <Configuration> <Database Name="${Namespace}" Dir="/usr/irissys/mgr/${Namespace}" Create="yes" MountRequired="true" Resource="%DB_${Namespace}" PublicPermissions="RW" MountAtStartup="true"/> </Configuration> <Import File="${Dir}Form" Recurse="1" Flags="cdk" IgnoreErrors="1" /> </Namespace> <Log Text="End Creating namespace ${Namespace}" Level="0"/> <Log Text="Mapping to USER" Level="0"/> <Namespace Name="USER" Create="no" Code="USER" Data="USER" Ensemble="0"> <Configuration> <Log Text="Mapping Form package to USER namespace" Level="0"/> <ClassMapping From="${Namespace}" Package="Form"/> <RoutineMapping From="${Namespace}" Routines="Form" /> </Configuration> <CSPApplication Url="/" Directory="${Dir}client" AuthenticationMethods="64" IsNamespaceDefault="false" Grant="%ALL" Recurse="1" /> </Namespace> </Manifest> } /// This is a method generator whose code is generated by XGL. /// Main setup method /// set vars("Namespace")="TEMP3" /// do ##class(MyApp.Hooks.Global).setup(.vars) ClassMethod setup(ByRef pVars, pLogLevel As %Integer = 0, pInstaller As %Installer.Installer) As %Status [ CodeMode = objectgenerator, Internal ] { Quit ##class(%Installer.Manifest).%Generate(%compiledclass, %code, "Install") } /// Entry point ClassMethod onAfter() As %Status { try { write "START INSTALLER",! set vars("Namespace") = ..#Namespace set vars("Dir") = ..getDir() set sc = ..setup(.vars) write !,$System.Status.GetErrorText(sc),! set sc = ..createWebApp() } catch ex { set sc = ex.AsStatus() write !,$System.Status.GetErrorText(sc),! } quit sc } /// Modify web app REST ClassMethod createWebApp(appName As %String = "/forms") As %Status { set:$e(appName)'="/" appName = "/" _ appName #dim sc As %Status = $$$OK new $namespace set $namespace = "%SYS" if '##class(Security.Applications).Exists(appName) { set props("AutheEnabled") = $$$AutheUnauthenticated set props("NameSpace") = "USER" set props("IsNameSpaceDefault") = $$$NO set props("DispatchClass") = "Form.REST.Main" set props("MatchRoles")=":" _ $$$AllRoleName set sc =
рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╣реЛрд╕реНрдЯ рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╣реАрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ /usr/irissys/mgr
, рдХреНрдпреЛрдВрдХрд┐ рдХреЙрд▓ ##class(%File).ManagerDirectory()
рдЯрд┐рдХрд╛рдК% SYS рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдкрде рджреЗрддрд╛ рд╣реИред
рдкрд░реАрдХреНрд╖рдг
рдЕрдм рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред
test image: stage: test tags: - test script: - docker exec iris-$CI_COMMIT_REF_NAME irissession iris -U USER "##class(isc.git.GitLab).test()"
рд╡рд┐рддрд░рдг
рдкрд░реАрдХреНрд╖рдг рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ, рд╣рдо рдЕрдкрдиреА рдЫрд╡рд┐ рдбреЛрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред
publish image: stage: publish tags: - test script: - docker login docker.domain.com -u user -p pass - docker push docker.domain.com/test/docker:$CI_COMMIT_REF_NAME
рд▓реЙрдЧрд┐рди / рдкрд╛рд╕рд╡рд░реНрдб рдЧреБрдкреНрдд рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдм рдЫрд╡рд┐ GitLab рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИред

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