рдЧрд┐рдЯрд▓реИрдм рд╢реИрд▓ рд░рдирд░ред рдбреЙрдХрд░ рдХрдореНрдкреЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рд▓реЙрдиреНрдЪ


рдпрд╣ рд▓реЗрдЦ рдкрд░реАрдХреНрд╖рдХреЛрдВ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдкреА рдХрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрди рд╡рд╛рд╣рди рдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд▓рдХреНрд╖рд┐рдд рд╣реИ, рдЬреЛ рдЕрдкрд░реНрдпрд╛рдкреНрдд рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдФрд░ / рдпрд╛ рдХрдВрдЯреЗрдирд░ рдпрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдордВрдЪ рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП GitLab CI / CD рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд╣реА рдЧрд┐рддрд▓рд╛рдм рд╢реИрд▓ рд░рдирд░ рдкрд░ рдбреЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рддреИрдирд╛рддреА рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдФрд░ рддрд╛рдХрд┐ рдХрдИ рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╕рдордп, рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛ рд░рд╣реА рд╕реЗрд╡рд╛рдПрдВ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рди рдХрд░реЗрдВред



рд╕рд╛рдордЧреНрд░реА




рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ


  1. рдореЗрд░реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рдЕрдХреНрд╕рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдХреЛ "рдареАрдХ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдЖред рдФрд░ рдЕрдХреНрд╕рд░ рдкрд╣рд▓реА рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рд╕реАрдЖрдИ рдкрд╛рдЗрдк рд▓рд╛рдЗрди рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рд╕реЗрд╡рд╛ (рдПрд╕) рдХрд╛ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рджреЗрд╡ рдЪрд░рдг рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдХрд╛рдлреА рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реБрдИрдВ:


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

    рдХреЛрдИ рдХрд╣реЗрдЧрд╛ рдХрд┐ рдЕрдЪреНрдЫреЗ рдСрдЯреЛрдЯреЗрд╕реНрдЯреНрд╕ рдХреЛ рдЕрдкрдиреЗ рдмрд╛рдж рдбреЗрдЯрд╛ рд╕рд╛рдл рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рдкрд╛рд╕ рддрд░реНрдХ рд╣реИрдВ:


    • рдЧрддрд┐рд╢реАрд▓ рд╕реНрдЯреИрдВрдб рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВред
    • рд╣рд░ рд╡рд╕реНрддреБ рдХреЛ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдирд╣реАрдВ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рд╣реИред
    • рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИред
    • рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдЕрдиреНрдпреЛрдиреНрдпрд╛рд╢реНрд░рд┐рдд рд╣реИрдВ, рддреЛ рдкрд░реАрдХреНрд╖рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛ рд╕рдлрд╛рдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд┐рд░рджрд░реНрдж рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред
    • рдЕрддрд┐рд░рд┐рдХреНрдд (рдФрд░, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЙрдЪрд┐рдд рдирд╣реАрдВ) рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
    • рдФрд░ рдореБрдЦреНрдп рддрд░реНрдХ: рдЬрдм рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕реАрдзреЗ рд╕рд╛рдл рдХрд░рдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ PK / FK рд╕рд░реНрдХрд╕ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ! рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдпрд╣ рд╢реНрд░рд╡реНрдп рд╣реИ: "рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдиреЗрдордкреНрд▓реЗрдЯ рдХреЛ рдЬреЛрдбрд╝рд╛ / рд╣рдЯрд╛ рджрд┐рдпрд╛ / рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛, 100500 рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рдХреНрдпреЛрдВ рд╣реБрдП?"

    рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИред


  2. рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП docker-compose рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди CI / CD рдореЗрдВ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рд▓реЛрдЧ docker-compose рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдВ рдореИрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕, рдЭреБрдВрдб рдФрд░ рдЕрдиреНрдп рдХрдВрдЯреЗрдирд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реВрдВред рд╣рд░ рдХрдВрдкрдиреА рдЙрдирдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ docker-compose.yml рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдерд╛ред
  3. рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рдХреНрдпреВрдП рдзрд╛рд╡рдХ рд╣реИ, рддреЛ рд╣рдо рдпрд╣ рдХреИрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢реБрд░реВ рдХреА рдЧрдИ рд╕реЗрд╡рд╛рдПрдВ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рди рдХрд░реЗрдВ?
  4. рдкрд░реАрдХреНрд╖рдг рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓реЙрдЧ рдХреИрд╕реЗ рдПрдХрддреНрд░ рдХрд░реЗрдВ?
  5. рдзрд╛рд╡рдХ рдХреЛ рдХреИрд╕реЗ рд╕рд╛рдл рдХрд░реЗрдВ?

рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ GitLab рд░рдирд░ рд╣реИ рдФрд░ TestRail рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдореИрдВ рдЗрди рдореБрджреНрджреЛрдВ рдкрд░ рдЖрдпрд╛ рдерд╛ред рдпрд╛ рдмрд▓реНрдХрд┐, рдЬрдм рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдЪрд▓ рд░рд╣реЗ рд╣реЛрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЗрди рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░реЗрдВрдЧреЗред


рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП



рдЧрд┐рдЯрд▓рдм рд╢реЗрд▓ рд░рдирд░


рдзрд╛рд╡рдХ рдХреЗ рд▓рд┐рдП, рдореИрдВ 4 рд╡реАрд╕реАрдкреАрдпреВ, 4 рдЬреАрдмреА рд░реИрдо, 50 рдЬреАрдмреА рдПрдЪрдбреАрдбреА рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд┐рдирдХреНрд╕ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рдЧрд┐рдЯрд▓реИрдм-рд░рдирд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА, рдЗрд╕рд▓рд┐рдП рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:


  • рд╣рдо SSH рдкрд░ рдорд╢реАрди рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ
  • рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ 8 рдЬреАрдмреА рд╕реЗ рдХрдо рд░реИрдо рд╣реИ, рддреЛ рдореИрдВ 10 рдЬреАрдмреА рдХрд╛ рд╕реНрд╡реИрдк рдмрдирд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рддрд╛рдХрд┐ рдУрдУрдПрдо рд╣рддреНрдпрд╛рд░рд╛ рди рдЖрдП рдФрд░ рд░реИрдо рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рд╣рдореЗрдВ рдорд╛рд░ рди рдбрд╛рд▓реЗред рдпрд╣ рддрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм 5 рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдп рдПрдХ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдХрд╛рд░реНрдп рдзреАрдореЗ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╕реНрдерд┐рд░ рд╣реЛрдВрдЧреЗред


    OOM рд╣рддреНрдпрд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг

    рдпрджрд┐ рдЖрдк bash: line 82: 26474 Killed рджреЗрдЦрддреЗ рд╣реИрдВ bash: line 82: 26474 Killed рдХрд╛рд░реНрдп рд▓реЙрдЧ рдореЗрдВ bash: line 82: 26474 Killed рдЧрдП, рддреЛ рдмрд╕ sudo dmesg | grep 26474 рдЪрд▓рд╛рдПрдВ sudo dmesg | grep 26474


     [26474] 1002 26474 1061935 123806 339 0 0 java Out of memory: Kill process 26474 (java) score 127 or sacrifice child Killed process 26474 (java) total-vm:4247740kB, anon-rss:495224kB, file-rss:0kB, shmem-rss:0kB 

    рдФрд░ рдЕрдЧрд░ рддрд╕реНрд╡реАрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ, рддреЛ рдпрд╛ рддреЛ рд╕реНрд╡реИрдк рдпрд╛ рдбреНрд░реЙрдк рд░реИрдо рдЬреЛрдбрд╝реЗрдВред




  • Gitlab-runner , docker , docker-compose , make рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
  • gitlab-runner рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ gitlab-runner рд╕рдореВрд╣ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
     sudo groupadd docker sudo usermod -aG docker gitlab-runner 
  • Gitlab-runner рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ ред
  • рд╕рдВрдкрд╛рджрди /etc/gitlab-runner/config.toml рд▓рд┐рдП рдЦреЛрд▓реЗрдВ рдФрд░ рдЬреЛрдбрд╝реЗрдВ


     concurrent=20 [[runners]] request_concurrency = 10 

    рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдзрд╛рд╡рдХ рдкрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рд░реНрдп рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдФрд░ рдкрдврд╝реЗрдВ рдпрд╣рд╛рдБ
    рдпрджрд┐ рдЖрдкрдХреА рдорд╢реАрди рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 8 рд╡реАрд╕реАрдкреАрдпреВ, 16 рдЬреАрдмреА рд░реИрдо, рддреЛ рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ рдХрдо рд╕реЗ рдХрдо 2 рдЧреБрдирд╛ рдмрдбрд╝рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдзрд╛рд╡рдХ рдкрд░ рдХреНрдпрд╛ рдФрд░ рдХрд┐рд╕ рдорд╛рддреНрд░рд╛ рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рдЗрддрдирд╛ рд╣реА рдХрд╛рдлреА рд╣реИред


рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП



Docker-Compose.yml рддреИрдпрд╛рд░ рдХрд░рдирд╛


рдореБрдЦреНрдп рдХрд╛рд░реНрдп docker-compose.yml рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдерд╛рдиреАрдп рдФрд░ CI рдкрд╛рдЗрдкрд▓рд╛рдЗрди рджреЛрдиреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдЪрд░ COMPOSE_PROJECT_NAME рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ( рдореЗрдХрдлрд╛рдЗрд▓ рджреЗрдЦреЗрдВ)ред


рдореЗрд░реЗ docker-compose.yml рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг


 version: "3" #    web (php)  fmt , #      . #   ,   /var/www/testrail volumes: static-content: services: db: image: mysql:5.7.22 environment: MYSQL_HOST: db MYSQL_DATABASE: mydb MYSQL_ROOT_PASSWORD: 1234 SKIP_GRANT_TABLES: 1 SKIP_NETWORKING: 1 SERVICE_TAGS: dev SERVICE_NAME: mysql migration: image: registry.gitlab.com/touchbit/image/testrail/migration:latest links: - db depends_on: - db fpm: image: registry.gitlab.com/touchbit/image/testrail/fpm:latest container_name: "testrail-fpm-${CI_JOB_ID:-local}" volumes: - static-content:/var/www/testrail links: - db web: image: registry.gitlab.com/touchbit/image/testrail/web:latest #   TR_HTTP_PORT  TR_HTTPS_PORTS  , #     80  443  . ports: - ${TR_HTTP_PORT:-80}:80 - ${TR_HTTPS_PORT:-443}:443 volumes: - static-content:/var/www/testrail links: - db - fpm 

рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП



рдореЗрдХрдлрд╛рдЗрд▓ рддреИрдпрд╛рд░реА


рдореИрдВ Makefile рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдмрдВрдзрди рдФрд░ CI рдореЗрдВ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред


рдЖрдЧреЗ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЗрдирд▓рд╛рдЗрди рд╣реИрдВ


 #           `.indirect`, #     `docker-compose.yml` #  bash   pipefail # pipefail -   ,      SHELL=/bin/bash -o pipefail #   CI_JOB_ID   ifeq ($(CI_JOB_ID),) #   local CI_JOB_ID := local endif #    export COMPOSE_PROJECT_NAME = $(CI_JOB_ID)-testrail #    , , volumes docker-down: docker-compose -f .indirect/docker-compose.yml down #   docker-down () docker-up: docker-down #     docker-registry docker-compose -f .indirect/docker-compose.yml pull #   # force-recreate -    # renew-anon-volumes -   volumes   docker-compose -f .indirect/docker-compose.yml up --force-recreate --renew-anon-volumes -d #  ,   ,           docker ps #    docker-logs: mkdir -p ./logs docker logs $${COMPOSE_PROJECT_NAME}_web_1 >& logs/testrail-web.log || true docker logs $${COMPOSE_PROJECT_NAME}_fpm_1 >& logs/testrail-fpm.log || true docker logs $${COMPOSE_PROJECT_NAME}_migration_1 >& logs/testrail-migration.log || true docker logs $${COMPOSE_PROJECT_NAME}_db_1 >& logs/testrail-mysql.log || true #   docker-clean: @echo   testrail- docker kill $$(docker ps --filter=name=testrail -q) || true @echo    docker rm -f $$(docker ps -a -f --filter=name=testrail status=exited -q) || true @echo  dangling  docker rmi -f $$(docker images -f "dangling=true" -q) || true @echo  testrail  docker rmi -f $$(docker images --filter=reference='registry.gitlab.com/touchbit/image/testrail/*' -q) || true @echo    volume docker volume rm -f $$(docker volume ls -q) || true @echo   testrail  docker network rm $(docker network ls --filter=name=testrail -q) || true docker ps 

рд╕реНрдерд╛рдиреАрдп рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
 $ make docker-up docker-compose -f .indirect/docker-compose.yml pull Pulling db ... done Pulling migration ... done Pulling fpm ... done Pulling web ... done docker-compose -f .indirect/docker-compose.yml up --force-recreate --renew-anon-volumes -d Creating network "local-testrail_default" with the default driver Recreating local-testrail_db_1 ... done Recreating local-testrail_migration_1 ... done Recreating local-testrail_fpm_1 ... done Recreating local-testrail_web_1 ... done docker ps CONTAINER ID NAMES 3b8f9d4af29c local-testrail_web_1 5622c7d742d5 local-testrail_fpm_1 b580e3392038 local-testrail_migration_1 e467630bd3a5 local-testrail_db_1 

рд╕реАрдЖрдИ рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рдБрдЪ
 $ export CI_JOB_ID=123456789 $ make docker-up docker-compose -f .indirect/docker-compose.yml pull Pulling db ... done Pulling migration ... done Pulling fpm ... done Pulling web ... done docker-compose -f .indirect/docker-compose.yml up --force-recreate --renew-anon-volumes -d Creating network "123456789-testrail_default" with the default driver Creating volume "123456789-testrail_static-content" with default driver Creating 123456789-testrail_db_1 ... done Creating 123456789-testrail_fpm_1 ... done Creating 123456789-testrail_migration_1 ... done Creating 123456789-testrail_web_1 ... done docker ps CONTAINER ID NAMES ccf1ad33d0e8 123456789-testrail_web_1 bc079964f681 123456789-testrail_fpm_1 10dc9d4d8f2a 123456789-testrail_migration_1 fe98d43c380e 123456789-testrail_db_1 

рд▓реЙрдЧ рд╕рдВрдЧреНрд░рд╣ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
 $ make docker-logs mkdir -p ./logs docker logs ${COMPOSE_PROJECT_NAME}_web_1 >& logs/testrail-web.log || true docker logs ${COMPOSE_PROJECT_NAME}_fpm_1 >& logs/testrail-fpm.log || true docker logs ${COMPOSE_PROJECT_NAME}_migration_1 >& logs/testrail-migration.log || true docker logs ${COMPOSE_PROJECT_NAME}_db_1 >& logs/testrail-mysql.log || true 


рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП



рддреИрдпрд╛рд░реА рдХрд░ рд░рд╣рд╛ рд╣реИ редitlabab-ci.yml



рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ


 Integration: stage: test tags: - my-shell-runner before_script: #   registry - docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY} #   TR_HTTP_PORT  TR_HTTPS_PORT - export TR_HTTP_PORT=$(shuf -i10000-60000 -n1) - export TR_HTTPS_PORT=$(shuf -i10000-60000 -n1) script: #    - make docker-up #    jar (  ) - java -jar itest.jar --http-port ${TR_HTTP_PORT} --https-port ${TR_HTTPS_PORT} #    - docker run --network=testrail-network-${CI_JOB_ID:-local} --rm itest after_script: #   - make docker-logs #   - make docker-down artifacts: #   when: always paths: - logs expire_in: 30 days 

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



рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП



рд░рдирд░ рд╕рдлрд╛рдИ


рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ рд╕рдордп рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


 stages: - clean - build - test Clean runner: stage: clean only: - schedules tags: - my-shell-runner script: - make docker-clean 

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ GitLab рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЬрд╛рдПрдВ -> CI / CD -> рдЕрдиреБрд╕реВрдЪрд┐рдпрд╛рдВ -> рдирдпрд╛ рд╢реЗрдбреНрдпреВрд▓ рдФрд░ рдПрдХ рдирдпрд╛ рд╢реЗрдбреНрдпреВрд▓ рдЬреЛрдбрд╝реЗрдВ



рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП



рдкрд░рд┐рдгрд╛рдо


GitLab CI рдореЗрдВ 4 рдХрд╛рд░реНрдп рдЪрд▓рд╛рдПрдБ


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


 CONTAINER ID NAMES c6b76f9135ed 204645172-testrail-web_1 01d303262d8e 204645172-testrail-fpm_1 2cdab1edbf6a 204645172-testrail-migration_1 826aaf7c0a29 204645172-testrail-mysql_1 6dbb3fae0322 204645084-testrail-web_1 3540f8d448ce 204645084-testrail-fpm_1 70fea72aa10d 204645084-testrail-mysql_1 d8aa24b2892d 204644881-testrail-web_1 6d4ccd910fad 204644881-testrail-fpm_1 685d8023a3ec 204644881-testrail-mysql_1 1cdfc692003a 204644793-testrail-web_1 6f26dfb2683e 204644793-testrail-fpm_1 029e16b26201 204644793-testrail-mysql_1 c10443222ac6 204567103-testrail-web_1 04339229397e 204567103-testrail-fpm_1 6ae0accab28d 204567103-testrail-mysql_1 b66b60d79e43 204553690-testrail-web_1 033b1f46afa9 204553690-testrail-fpm_1 a8879c5ef941 204553690-testrail-mysql_1 069954ba6010 204553539-testrail-web_1 ed6b17d911a5 204553539-testrail-fpm_1 1a1eed057ea0 204553539-testrail-mysql_1 

рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд▓реЙрдЧ
 $ docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY} WARNING! Using --password via the CLI is insecure. Use --password-stdin. WARNING! Your password will be stored unencrypted in /home/gitlab-runner/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded $ export TR_HTTP_PORT=$(shuf -i10000-60000 -n1) $ export TR_HTTPS_PORT=$(shuf -i10000-60000 -n1) $ mkdir ${CI_JOB_ID} $ cp .indirect/docker-compose.yml ${CI_JOB_ID}/docker-compose.yml $ make docker-up docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml kill docker network rm testrail-network-${CI_JOB_ID:-local} || true Error: No such network: testrail-network-204645172 docker network create testrail-network-${CI_JOB_ID:-local} 0a59552b4464b8ab484de6ae5054f3d5752902910bacb0a7b5eca698766d0331 docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml pull Pulling web ... done Pulling fpm ... done Pulling migration ... done Pulling db ... done docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml up --force-recreate --renew-anon-volumes -d Creating volume "204645172-testrail_static-content" with default driver Creating 204645172-testrail-mysql_1 ... Creating 204645172-testrail-mysql_1 ... done Creating 204645172-testrail-migration_1 ... done Creating 204645172-testrail-fpm_1 ... done Creating 204645172-testrail-web_1 ... done docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c6b76f9135ed registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofтАж" 13 seconds ago Up 1 second 0.0.0.0:51148->80/tcp, 0.0.0.0:25426->443/tcp 204645172-testrail-web_1 01d303262d8e registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiтАж" 16 seconds ago Up 13 seconds 9000/tcp 204645172-testrail-fpm_1 2cdab1edbf6a registry.gitlab.com/touchbit/image/testrail/migration:latest "docker-entrypoint.sтАж" 16 seconds ago Up 13 seconds 3306/tcp, 33060/tcp 204645172-testrail-migration_1 826aaf7c0a29 mysql:5.7.22 "docker-entrypoint.sтАж" 18 seconds ago Up 16 seconds 3306/tcp 204645172-testrail-mysql_1 6dbb3fae0322 registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofтАж" 36 seconds ago Up 22 seconds 0.0.0.0:44202->80/tcp, 0.0.0.0:20151->443/tcp 204645084-testrail-web_1 3540f8d448ce registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiтАж" 38 seconds ago Up 35 seconds 9000/tcp 204645084-testrail-fpm_1 70fea72aa10d mysql:5.7.22 "docker-entrypoint.sтАж" 40 seconds ago Up 37 seconds 3306/tcp 204645084-testrail-mysql_1 d8aa24b2892d registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofтАж" About a minute ago Up 53 seconds 0.0.0.0:31103->80/tcp, 0.0.0.0:43872->443/tcp 204644881-testrail-web_1 6d4ccd910fad registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiтАж" About a minute ago Up About a minute 9000/tcp 204644881-testrail-fpm_1 685d8023a3ec mysql:5.7.22 "docker-entrypoint.sтАж" About a minute ago Up About a minute 3306/tcp 204644881-testrail-mysql_1 1cdfc692003a registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofтАж" About a minute ago Up About a minute 0.0.0.0:44752->80/tcp, 0.0.0.0:23540->443/tcp 204644793-testrail-web_1 6f26dfb2683e registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiтАж" About a minute ago Up About a minute 9000/tcp 204644793-testrail-fpm_1 029e16b26201 mysql:5.7.22 "docker-entrypoint.sтАж" About a minute ago Up About a minute 3306/tcp 204644793-testrail-mysql_1 c10443222ac6 registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofтАж" 5 hours ago Up 5 hours 0.0.0.0:57123->80/tcp, 0.0.0.0:31657->443/tcp 204567103-testrail-web_1 04339229397e registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiтАж" 5 hours ago Up 5 hours 9000/tcp 204567103-testrail-fpm_1 6ae0accab28d mysql:5.7.22 "docker-entrypoint.sтАж" 5 hours ago Up 5 hours 3306/tcp 204567103-testrail-mysql_1 b66b60d79e43 registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofтАж" 5 hours ago Up 5 hours 0.0.0.0:56321->80/tcp, 0.0.0.0:58749->443/tcp 204553690-testrail-web_1 033b1f46afa9 registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiтАж" 5 hours ago Up 5 hours 9000/tcp 204553690-testrail-fpm_1 a8879c5ef941 mysql:5.7.22 "docker-entrypoint.sтАж" 5 hours ago Up 5 hours 3306/tcp 204553690-testrail-mysql_1 069954ba6010 registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofтАж" 5 hours ago Up 5 hours 0.0.0.0:32869->80/tcp, 0.0.0.0:16066->443/tcp 204553539-testrail-web_1 ed6b17d911a5 registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiтАж" 5 hours ago Up 5 hours 9000/tcp 204553539-testrail-fpm_1 1a1eed057ea0 mysql:5.7.22 "docker-entrypoint.sтАж" 5 hours ago Up 5 hours 3306/tcp 204553539-testrail-mysql_1 

рд╕рднреА рдХрд╛рд░реНрдп рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реЗ рд╣реБрдП

рдЯрд╛рд╕реНрдХ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗрд╡рд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд▓реЙрдЧ рд╣реЛрддреЗ рд╣реИрдВ



рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕реБрдВрджрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИред рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдЬрдмрд░рди рд░рджреНрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдирд╛ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдордп-рд╕рдордп рдкрд░ рдЖрдкрдХреЛ рдзрд╛рд╡рдХ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, GitLab CE рдореЗрдВ рд╕рдВрд╢реЛрдзрди рдХрд╛рд░реНрдп рдЕрднреА рднреА рдЦреБрд▓реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ


рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдп рд▓реЙрдиреНрдЪ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдФрд░ рдХреЛрдИ рднреА рд╣рдореЗрдВ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЬрд╛рдПрдВ -> CI / CD -> рд╢реЗрдбреНрдпреВрд▓ рдФрд░ Clean runner рдЯрд╛рд╕реНрдХ рдЪрд▓рд╛рдПрдВ



рдХреБрд▓:


  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╢реЗрд▓ рд░рдирд░ рд╣реИред
  • рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдмреАрдЪ рдХреЛрдИ рдЯрдХрд░рд╛рд╡ рдирд╣реАрдВ рд╣реИрдВред
  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рд▓реЙрдиреНрдЪ рд╣реИред
  • рдЖрдк рд╕реНрдерд╛рдиреАрдп рдФрд░ рдХрдВрдЯреЗрдирд░ рджреЛрдиреЛрдВ рдореЗрдВ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
  • рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓реЙрдЧ рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛рд░реНрдп рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред
  • рдкреБрд░рд╛рдиреЗ рдбреЙрдХрдЯрд░-рдЪрд┐рддреНрд░реЛрдВ рд╕реЗ рдзрд╛рд╡рдХ рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рд╕реЗрдЯрдЕрдк рд╕рдордп ~ 2 рдШрдВрдЯреЗ рд╣реИред
рд╡рд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рд╣реИред рдореБрдЭреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЦреБрд╢реА рд╣реЛрдЧреАред


рдкреБрдирд╢реНрдЪ
рдлреНрд░реАрд╕рдЪреЗрдпрд░ vvasilenok ivanych рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рджред рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдмрд╣реБрдд рдореВрд▓реНрдпрд╡рд╛рди рдереАрдВред


рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП

Source: https://habr.com/ru/post/hi449910/


All Articles