Gitlab CI рдФрд░ Ansible [рдХреЙрдиреНрд╕реЗрдкреНрдЯ] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдХрдорд╛рдВрдб рд╕рд░реНрд╡рд░ рдкрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓рдирд╛



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


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ 20 рд╡рд┐рдХрд╛рд╕ рджрд▓ рдФрд░ 1 рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ / DevOps рдЯреАрдо рд╣реИред рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкрд╛рд╕рд╡рд░реНрдб рдХреИрд╕реЗ рдмрджрд▓реЗрдВ? рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд░реВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ? рдЖрджрд┐


рдпрд╣ рдХрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рд╣реИ?


рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐:
рд╡реИрд╢реНрд╡рд┐рдХ рдкреНрд░рд╢рд╛рд╕рдХ / DevOps рд╣реИрдВред
рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧ (NTP, DNS, рдкреНрд░реЙрдХреНрд╕реА, рдЖрджрд┐) рд╣реИрдВ
рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рджрд▓ рд╣реИрдВ: TeamA, TeamB, TeamC, TeamD, рдЖрджрд┐ред
рдРрд╕реЗ рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдЕрдкрдиреА рдЯреАрдо рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╡реИрд╢реНрд╡рд┐рдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ, рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ / рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ?



рдпрд╣ рдХрд╛рд░реНрдп рдЗрд╕ рддрдереНрдп рд╕реЗ рдЬрдЯрд┐рд▓ рд╣реИ рдХрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдирд┐рдЬреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдХрдорд╛рдВрдб рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рдЕрд▓рдЧ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреВрд░реА рдХрдВрдкрдиреА рдореЗрдВ рдХреБрдЫ рд╕рд░реНрд╡рд░ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рд╕рд░рд▓ рдореЛрдб рдореЗрдВ Ansible рдХреЛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред


рдмрдбрд╝реА рд╕реНрдерд╛рдкрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдХрдВрдкрдирд┐рдпрд╛рдВ рдЖрдорддреМрд░ рдкрд░ рдХрдардкреБрддрд▓реА, рдмрд╛рд╡рд░реНрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред


рд╕рдВрдХрд▓реНрдкрдирд╛


рдПрдХ рдмрдбрд╝реЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдХрдорд╛рдВрдб рд╕рд░реНрд╡рд░ рдкрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдЧрд┐рдЯ рд╕рдмрдореЙрдбреНрдпреВрд▓ рддрдВрддреНрд░ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред


рд╕реНрдерд╛рдиреАрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рднрдВрдбрд╛рд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде git рд╕рдмрдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред


рдиреАрдЪреЗ рдПрдХ рдирд┐рдЬреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рдХрдорд╛рдВрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рдпреЛрдЬрдирд╛рдмрджреНрдз рдЖрд░реЗрдЦ рд╣реИред



рдЖрдк рдкрдкреЗрдЯ, рд╢реЗрдл, рд╕реЙрд▓реНрдЯ рдХреЗ рд╕рд╛рде рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдореЗрдВ рдЧрд┐рдЯ рд╕рдмрдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЗрдЦ рдЕрдВрд╕рд┐рдмрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, tomatat, mysql, nginx рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЯреАрдо рдирд╛рдордХ рдЯреАрдо рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░реЗрдВред


Gitlab рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдореВрд╣ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВред


рд╕рд╛рдорд╛рдиреНрдп рд╕рдореВрд╣ рдореЗрдВ рдПрдХ рдмреЗрд╕-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╢рд╛рд╕рдХ, sysctl рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЖрджрд┐ рд╣реЛрддреЗ рд╣реИрдВред


рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдХрдВрдкрдиреА рдореЗрдВ рдХрдИ рд╡рд┐рдХрд╛рд╕ рд╡рд┐рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ - рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдиреНрд╣реЗрдВ рдЯреАрдореЛрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЧрд┐рдЯрд▓реИрдм рдореЗрдВ, рдПрдХ рдЯреАрдо рд╕рдореВрд╣ рдмрдирд╛рдПрдВ (рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреА рдЯреАрдо рдХрд╛ рдирд╛рдо рд╣реЛрдЧрд╛)ред


рдЯреАрдо рд╕рдореВрд╣ рдореЗрдВ рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ: рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдбреЗрдЯрд╛рдмреЗрд╕, рд▓реЛрдбрдмреЗрд▓рд░ред


рдмреЗрд╕-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк, рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдбреЗрдЯрд╛рдмреЗрд╕, рд▓реЛрдбрдмреЗрд▓рд░ рд╕реЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ:



рдмреЗрд╕-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдбреЗрдЯрд╛рдмреЗрд╕, рд▓реЛрдбрдмреЗрд▓рд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЧрд┐рдЯ рд╕рдмрдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рд╣рд░ рдмрд╛рд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдбреЗрдЯрд╛рдмреЗрд╕, рд▓реЛрдбрдмреЗрд▓рд░ рдмреЗрд╕-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╕рдмрдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред


рдЙрд╕рдХреЗ рдмрд╛рдж, рдмреЗрд╕-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╕реЗ ansible-playbook рдФрд░ рдмреЗрд╕-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╕реЗ ansible-playbook рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдбреЗрдЯрд╛рдмреЗрд╕, рд▓реЛрдбрдмреЗрд▓рд░ рд╕рд░реНрд╡рд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рдЖрдк рдмреЗрд╕-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдореЗрдВ рдПрдХ рдирдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдпрд╛ рдмреЗрд╕-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдбреЗрдЯрд╛рдмреЗрд╕, рд▓реЛрдбрдмреЗрд▓рд░ рдХреЗ рд╕рд╛рде, рдмреЗрд╕-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╕реЗ рдирдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдбреЗрдЯрд╛рдмреЗрд╕, рд▓реЛрдбрдмреЗрд▓рд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЯреНрд░реЗрдирд┐рдВрдЧ


рдЖрдкрдХреЛ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░ рджреЗрдиреЗ рдпреЛрдЧреНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП:


# рд╢реБрд░реБрдЖрдд рдХрд╣рд╛рдВ рд╕реЗ рдХрд░реЗрдВ


# рдЙрддреНрддрд░ рджреЗрдиреЗ рдпреЛрдЧреНрдп рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛


рдЖрдкрдХреЗ рдкрд╛рд╕ gitlab рдФрд░ gitlab-runner рд╕реНрдерд╛рдкрд┐рдд рдбреЙрдХрдЯрд░ рдХреЗ рд╕рд╛рде рддреИрдирд╛рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


рдбреЙрдХ рдирд┐рд╖реНрдкрд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЖрдк рд╢реИрд▓ рдирд┐рд╖реНрдкрд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЧрд┐рдЯрд▓реИрдм рдФрд░ рдЧрд┐рдЯрд▓реИрдм-рд░рдирд░ рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд░реЗрдВ:


# рд╕рд╛рдЙрдердмреНрд░рд┐рдЬ рдЧрд┐рдЯрд▓реИрдм-рд╕реАрдЖрдИ рд▓реЗрдЦ


# рдЧрд┐рдЯрд▓реИрдм рд╕реАрдЖрдИ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдПрдХреАрдХрд░рдг рдФрд░ рдбреЙрдХрдЯрд░ рдХреА рддреИрдирд╛рддреА


рдЖрдкрдХреЗ рдкрд╛рд╕ 3 рд╕рд░реНрд╡рд░ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ubuntu рдкрд░): рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдбреЗрдЯрд╛рдмреЗрд╕, рд▓реЛрдбрдмреЗрд▓рд░ред


рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдбреЗрдЯрд╛рдмреЗрд╕, рд▓реЛрдбрдмрд▓рд░ рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо рд╣реИрдВред


рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░, рд╕реБрдзрд╛рд░, рдЕрдиреНрдп рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рд▓реЗрдЦ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред


рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ?


рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░ рд╕рднреА рдХреЛрдб рдпрд╣рд╛рдВ рд╕реЗ рд▓рд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/patsevanton/ansible-gitlab-habr


рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо / рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╛рдВрдЫрд┐рдд рд╕рдореВрд╣ рдореЗрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЯреАрдо) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдкрд╛рд╕рд╡рд░реНрдб рдЪрд░ рдмрдирд╛рддреЗ рд╣реИрдВ (рдЬрдм рдЖрдкрдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдХреЛрдб рдореЗрдВ рднреА рдЪрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ) рдФрд░ рд╡рд╣рд╛рдВ рдкрд╛рд╕рд╡рд░реНрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ (рдкрд╛рд╕рд╡рд░реНрдб рдкрд╛рд╕рд╡рд░реНрдб рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)


рдЕрдВрдд рд╕рд░реНрд╡рд░ рдкрд░ sudo рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред


рдЬреЛ рд▓реЛрдЧ SSH рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЯреАрдо рд╕рдореВрд╣ рдореЗрдВ SSH_PRIVATE_KEY рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЛ рдЙрд╕рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝ рдЬрд╛рдПрдЧрд╛ред


рдпрд╣ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред


рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдбреЗрдЯрд╛рдмреЗрд╕, рд▓реЛрдбрдмреЗрд▓рд░) рдПрдХ рдЧрд┐рдЯ рд╕рдмрдореЙрдбреНрдпреВрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ:


git submodule add git@gitlab.example.com:common/base-bootstrap.git git submodule add git@gitlab.example.com:team/team-users.git 

рд╕рд╛рдЭрд╛ рдирд┐рдЬреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрдореЙрдбреНрдпреВрд▓ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред


рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЖрдзрд╛рд░-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рдЯреАрдо-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯреАрдо рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднрдВрдбрд╛рд░ рдХреЗ рд╕рд╛рде рднрдВрдбрд╛рд░ рд╣реИред


рдЬрд╣рд╛рдБ gitlab.example.com рдЖрдкрдХрд╛ gitlab рд╕рд░реНрд╡рд░ рд╣реИред


рдлрд┐рд░ .itmodules рдореЗрдВ рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рд╕рд╛рдкреЗрдХреНрд╖ рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ


рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 [submodule "team-users"] path = team-users url = ../team-users.git [submodule "base-bootstrap"] path = base-bootstrap url = ../../common/base-bootstrap.git 

рдореЗрдЬрдмрд╛рдиреЛрдВ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдЖрдИрдкреА рдмрджрд▓рддреЗ рд╣реИрдВ, ansible.cfg рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд░рд┐рдореЛрдЯ_рд╕рд┐рдпрд░ рдмрджрд▓рддреЗ рд╣реИрдВред


рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рдШрдВрдЯреЛрдВ / рджрд┐рдиреЛрдВ рдореЗрдВ рдХреЛрдИ рдХрдорд┐рдЯрдореЗрдВрдЯ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рдирдП рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) - рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП ansible-pull рд╣реИред


рд╕рд╛рдорд╛рдиреНрдп / рдмреЗрд╕-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ansible-pull рд╕реЗрдЯ рдХрд░реЗрдВред


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЯреЛрдХрди рд╕рдВрдЧреНрд░рд╣ рдЬреЛрдбрд╝реЗрдВред


рд╕рд╛рдорд╛рдиреНрдп / рдмреЗрд╕-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░ рдЬрд╛рдПрдВ рдлрд┐рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ / рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА / рдбрд┐рдкреНрд▓реЙрдп рдЯреЛрдХрди рдкрд░ рдЬрд╛рдПрдВред


рдПрдХ рдЯреЛрдХрди рдмрдирд╛рдПрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдЖрдзрд╛рд░-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк / vars / cron.yml рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред


рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рд╣рд░ 2 рдорд┐рдирдЯ" рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдПрдХ-рдЦреАрдВрдЪрдиреЗ рдХреЗ рд╢реБрд░реБрдЖрддреА рд╕рдордп рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИред


рдпрджрд┐ ansible-pull рдЧрд┐рд░ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рд╕реЗрд╡рд╛ рдХрд╛ CI рдбреНрд░реЙрдк рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рд╣рд░ рдмрд╛рд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рд╕реЗрд╡рд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╕реЗрд╡рд╛ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)


рдирд┐рд░реАрдХреНрд╖рдг


рдПрдХ рдирдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдмрдирд╛рдПрдВред


Https://github.com/patsevanton/ansible-gitlab-habr/blob/master/commons/base-bootstrap/vars/users.yml рдкрд░ рдПрдХ рдирдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ


Sysctl рдкрд░рд┐рд╡рд░реНрддрди


Https://github.com/patsevanton/ansible-gitlab-habr/blob/master/commons/base-bootstrap/vars/sysctl.yml рдореЗрдВ sysctl рд╕реЗрдЯрд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ / рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ


рдПрдВрдЯреНрд░реА рдХреЛ рдХреНрд░реЛрди рдореЗрдВ рдЬреЛрдбрд╝рдирд╛


Https://github.com/patsevanton/ansible-gitlab-habr/blob/master/commons/base-bootstrap/vars/cron.yml рдкрд░ рдХреНрд░реЛрди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ


рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдпрд╛ рд╕реНрдерд╛рдкрдирд╛


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рднреВрдорд┐рдХрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


Https://galaxy.ansible.com/ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреВрдорд┐рдХрд╛ рдЦреЛрдЬреЗрдВред


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


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреЙрдордХреИрдЯ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдЬрд╛рд╡рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдкрд╣рд▓реЗ geerlingguy.java рднреВрдорд┐рдХрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ


 ansible-galaxy install geerlingguy.java 

рдорд╛рдирдХ ansible.cfg рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рдорд╛рди рдмрдирд╛рдПрдВред


рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдПрдБ:


 [java] java ansible_host=IP- 

рдПрдХ рдкреНрд▓реЗрдмреБрдХ рдмрдирд╛рдПрдВ java.yml


 - hosts: java become: yes vars_files: - vars/main.yml roles: - { role: geerlingguy.java } 

рдЪрд▓рд╛рдПрдБ-рдпреЛрдЧреНрдп-рдЪрд▓рд╛рдПрдБ-рд╕реВрдЪреА java.yml


рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣реЛ рдЧрдпрд╛, рддреЛ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрд╡реЗрджрди)


Geberlingguy.java рдХреА рднреВрдорд┐рдХрд╛ robertdebock.tomcat https://github.com/patsevanton/ansible-gitlab-habr/blob/master/team/application/tomcat-app.yml#L11 рдХреА рднреВрдорд┐рдХрд╛ рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИ


рд╡рд╣реА рдЕрдиреНрдп рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


Playbook рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕реБрд░рдХреНрд╖рд╛


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


рдкреНрд▓реЗрдмреБрдХ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдкрд░ рд▓реЗрдЦ рд╣реИрдВ:
# рдЙрддреНрддрд░: рдкреНрд▓реЗрдмреБрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг (рднрд╛рдЧ 1)


# рдЕрдгреБ рдФрд░ рдЬреЗрдирдХреАрдВрд╕ рдХреЗ рд╕рд╛рде рдЕрдиреНрд╕рд┐рдмрд▓ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдФрд░ рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг


рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм


1) рдореЗрдВрдЯ: рдФрд░ рдХреНрдпреЛрдВ, рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде, рдПрдХ рдпреЛрдЧреНрдп рдЧреЛрджреА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ? рдкрд╣рд▓реА рдмрд╛рд░ рдкрдврд╝рдиреЗ рд╕реЗ рдпрд╣ рд╕рдм рдкрд░ рдлрд┐рд░ рд╕реЗ рд▓рдЧрд╛рдо рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдЬреИрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╕рднреА рдЙрдкрд▓рдмреНрдз-рдкреНрд▓реЗрдмреБрдХ -i env / teamA personalAPlaybook.yml
рдЙрддреНрддрд░: рдпрд╣ рдпреЛрдЬрдирд╛ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддреА рд╣реИред рдкреНрд░рд╢реНрди рдореЗрдВ рдЬреЛ рд╡рд░реНрдгрд┐рдд рд╣реИ, рд╡рд╣ рдХрдорд╛рдВрдб рдХреА рд╕реНрдерд╛рдиреАрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред


PS рд╢рд╛рдпрдж рдЙрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ Ansible Tower рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ - рдореИрдВрдиреЗ рдПрдВрд╕рд┐рдмрд▓ рдЯреЙрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред

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


All Articles