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

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

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

рдЙрддрд╛рд░рдиреЗ рдХреЗ рдХрд┐рд╕реА рднреА рдкреНрд░рдпрд╛рд╕ рдкрд░ рдЧрд┐рд░рддреЗ рд╣реБрдП рдЪреЗрд╣рд░реЗ рд╕реЗ рдердХ рдХрд░, рдлрд┐рд░ рд╕реЗ рдмреИрда рдЬрд╛рдирд╛ рдФрд░ рдХрдард┐рди рд╕реЛрдЪрдирд╛ рддрдп рдерд╛ред рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рддрд░рдл рдкреАрдПрд╕-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕рдореВрд╣ рд╣реИ рдФрд░ рджреВрд╕рд░реА рддрд░рдл рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдЧрд▓рдд рдереЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрдбрд╝ рдирд╣реАрдВ рдереАред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдЗрди рдЪреАрдЬреЛрдВ рдХреЗ рдмреАрдЪ рд╣рдореЗрд╢рд╛ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рд╣реЛрддрд╛ рдерд╛ред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдбреЗрд╡рд▓рдкрд░, рдПрдХ рдкрд░реАрдХреНрд╖рдХ, рдпрд╛ рдХреЛрдИ рдФрд░ рд╣реИ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд╛рд░реНрдХрд┐рдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣рдореЗрд╢рд╛ рд╕рд┐рд░ рдореЗрдВ рд╣реБрдИ рд╣реИ:
- рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- рд╣рд╛рдБ, рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореЗрдЬрдмрд╛рди рдкреВрд▓ рд╣реИ
- рдФрд░ рдпрд╣рд╛рдБ рд╡рд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдм рдореИрдВ рдЗрд╕реЗ рдЪрд▓рд╛рдКрдВрдЧрд╛, рдФрд░ рд╕рдм рдХреБрдЫ рд╣реЛрдЧрд╛
рдРрд╕реА рдкреНрд░рддреАрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рд░рд▓ рдЪреАрдЬ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рд╕рд╛рде, рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рдирдП рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рд╢реБрд░реВ рд╣реБрдИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рднреА рджрд░реНрдж рд╣рдорд╛рд░реЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдПрдХрд▓ рд╡рд┐рд╡рд░рдг рдХреА рдХрдореА рд╕реЗ рд╣реИрдВред рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдерд╛, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдерд╛, рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рднрд╛рдЧреЛрдВ рдореЗрдВ рдмреИрдареЗ рдереЗ, рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЗрд╕рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рдорд╛рдВрдЧрддреЗ рдереЗ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рдЕрд▓рдЧ рд░рд╛рдЬреНрдп рдореЗрдВ рд░рд╣рддреЗ рдереЗред
рдЗрд╕ рд╕рдордп, рд╣рдо рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪреЗ рдХрд┐ рд╣рдорд╛рд░реА рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдЙрддреНрддрд░ рд╣реИ:
рдПрдХ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪрд╛
рдпрд╣ рдареАрдХ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкреВрд░реЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рдХреЛрдб рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рднрдВрдбрд╛рд░ рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рднреА рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЗрдВ, рдЙрдирдХреЗ рд╕рднреА рдкреИрд░рд╛рдореАрдЯрд░, рд╕рдм рдХреБрдЫ рдЬреЛ рд╡рд╣рд╛рдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ - рд╕рдм рдХреБрдЫ рдХреЛрдб рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рд╡реИрдз рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ - рдХреНрдпреЛрдВ?
рд╣рдо рдЙрддреНрддрд░ рджреЗрддреЗ рд╣реИрдВ: рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреА рджреБрдирд┐рдпрд╛ рд╕реЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╕рднреА рдЖрджреА рд╣реИрдВ:
- рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдгред рд╣рдо рд╣рдореЗрд╢рд╛ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдФрд░ рдХрдм рдмрджрд▓рд╛ рд╣реИред рдХреЛрдИ рдФрд░ рдЕрдзрд┐рдХ рдореЗрдЬрдмрд╛рди рдХрд╣реАрдВ рд╕реЗ рднреА рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЖрдпрд╛ рдпрд╛ рдХрд╣реАрдВ рдирд╣реАрдВ рдЧрдпрд╛ред рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдХрд┐ рдмрджрд▓рд╛рд╡ рдХрд┐рд╕рдиреЗ рдХрд┐рдПред
- рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рд╣рдо рддреИрдирд╛рддреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рддрд╛рдХрд┐ рдХреБрдЫ рджреВрд╕рд░реЛрдВ рдкрд░ рдЙрд▓реНрд▓рдВрдШрди рди рдХрд░реЗрдВред
- рдирд┐рд░рдВрддрд░ рдПрдХрддрд╛ред
рдЙрдкрдХрд░рдг рдЪрдпрди
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ, рдХрдИ рд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рдмрдВрдзрди рдЙрдкрдХрд░рдг рд╣реИрдВред рд╣рдордиреЗ Ansible рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ, рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рди рдкреНрд░рдгрд╛рд▓реА рдХрд┐рд╕реА рднреА рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рди рд╣реЛ, рдХреБрдЫ рдХреЛ рдХрд╣реАрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрджрд┐ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдмрдЯрди рджрдмрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ UI рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдмреЗрдХрд╛рд░рддрд╛ред рдкрд╣рд▓реЗ рдХреНрдпрд╛ рд╣реБрдЖ рдерд╛, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд▓реЗрдмреБрдХ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рдЖрдк "IIS рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ" рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди "IIS рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП", рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рдкрд╣рд▓реЗ рдерд╛ рдпрд╛ рдирд╣реАрдВред рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ Ansible playbooks рдРрд╕рд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЙрд▓реНрд▓реЗрдЦ рдпреЛрдЧреНрдп рд╣реИ Ansible рдХреА рдПрдЬреЗрдВрдЯрд╣реАрдирддрд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрд╡рдЪрд╛рд▓рди рдкреНрд░рдгрд╛рд▓реА рдПрдЬреЗрдВрдЯреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди - рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛ рдХрд┐ рдХреЛрдИ рдПрдЬреЗрдВрдЯ рдирд╣реАрдВ рдерд╛ рддрд╛рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░ рди рдХрд░рдирд╛ рдкрдбрд╝реЗред
PowerShell:
$url = "http://buildserver/build.msi" $output = "$PSSscriptRoot\build.msi" Invoke-WebRequest -Uri $url -OutFile $output
Ansible:
name: Download build hosts: all tasks: name: Download installer win_get_url: url: "http://buildserver/build.msi" dest: "build.msi" force: no
рдпрд╣рд╛рдБ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдВрд╕рд░-рдХреА рдкреНрд▓реЗрдмреБрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреАрдПрд╕-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реЛрдЧреАред рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА 7 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдкреНрд▓реЗрдмреБрдХ рдХреА 3 рд▓рд╛рдЗрдиреЗрдВред
рд▓реЗрдХрд┐рди, рдкреЗрдЯрдХрд╛, рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИред рдЬреИрд╕реЗ рд╣реА рд╣рдо idempotency рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдмрджрд▓реА рдЧрдИ рд╣реИ рдФрд░ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ HEAD рдЕрдиреБрд░реЛрдз рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд▓рдЧрднрдЧ 200 рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред рдФрд░ рдкреНрд▓реЗрдмреБрдХ рдореЗрдВ - рдПрдХред Ansible win_get_url рдореЙрдбреНрдпреВрд▓, рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рднреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рдореЗрдВ рдХреЛрдб рдХреА 257 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
рдФрд░ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред

рдФрд░ рдЕрдЧрд░ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рдкрд░ рдмреЗрд╡рдХреВрдлреА рдХреА рдЬрд░реВрд░рдд рд╣реИ:
- рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдпрд╛ рддреЛ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдирдВрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЙрдард╛рддреЗ рд╣реИрдВ, рдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реА рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рдПрдЧреАред
- рдорд╢реАрди рдкрд░ рдПрдордПрд╕рдЖрдИ рдкреИрдХреЗрдЬ рдХреНрдпрд╛ рд╣реИрдВ? рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛, рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдореЗрдВ, рдорд╢реАрди рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧреАред
- рдХреНрдпрд╛ рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрджрд┐ рдЖрдкрдХрд╛ рдирд┐рд░реНрдорд╛рдг рдПрдХ рджрд░реНрдЬрди рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХрд╛ рд╡рдЬрди рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред рдФрд░ рдЬреЛ рд▓реЛрдЧ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ?
рдФрд░ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг, рдЬрд╣рд╛рдВ рдмрд╛рд╣рд░ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рдЕрдВрддрд╣реАрди рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рднрдбрд╝рдХрд╛рдирд╛ рд╣реИ рдЬреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдбреАрдмрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, Ansible рдЕрдкрдиреЗ рдореЗрдЬрдмрд╛рдиреЛрдВ рдФрд░ рдорд╢реАрдиреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдЬреЗрдВрдЯреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓рд┐рдирдХреНрд╕ рдкрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ ssh рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП, WinRM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдд: рд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо: рдЕрдиреНрд╕рд┐рдмрд▓ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╣реИред рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ рдЙрдкрдХрд░рдгреЛрдВ рддрдХ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреА рдХреБрдЫ рд╢рд╛рдирджрд╛рд░ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдФрд░ рдЖрдЦрд┐рд░реА, рд▓реЗрдХрд┐рди рдХреЛрдИ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, YAML рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рд╣реИред рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдореАрдард╛ рдирд╣реАрдВ рд╣реИ, рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
- рд╕рдорд╕реНрдпрд╛ рд╕рдВрджрд┐рдЧреНрдз рд╣реИ: рдкреНрд▓реЗрдмреБрдХ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрднреА рднреА рдПрдХ рд▓рд┐рдирдХреНрд╕ рдорд╢реАрди рдХреА рдЬрд░реВрд░рдд рд╣реИ, рднрд▓реЗ рд╣реА рдЖрдкрдХрд╛ рдкреВрд░рд╛ рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдПрдХреНрд╕рдХреНрд▓реВрд╕рд┐рд╡ рд╡рд┐рдВрдбреЛрдЬ рд╣реЛред рдпрджреНрдпрдкрд┐ рдЖрдзреБрдирд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдпрд╣ рдЗрддрдиреА рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ рдЕрдм рдбрдмреНрд▓реНрдпреВрдПрд╕рдПрд▓ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдк рдЙрдмрдВрдЯреВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдкреНрд▓реЗрдмреБрдХ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
- рдХрднреА-рдХрднреА playbooks рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИред Ansible рдХреЛ рдЕрдЬрдЧрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЖрдЦрд┐рд░реА рдЪреАрдЬ рдЬрд┐рд╕реЗ рдореИрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рдкрд╛рдВрдЪ-рд╕реНрдХреНрд░реАрди рдЕрдЬрдЧрд░ рд╕реНрдЯреИрдХ рд╢реАрдЯ рд╣реИред рдФрд░ рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдореЗрдВ рдПрдХ рдЯрд╛рдЗрдкреЛ
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ рд▓рд┐рдирдХреНрд╕ рдорд╢реАрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Ansible рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ, рдЗрд╕реЗ рдХрдВрдЯреНрд░реЛрд▓ рдорд╢реАрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд▓реЗрдмреБрдХ рдЗрд╕рд╕реЗ рд╢реБрд░реВ рд╣реЛрдЧреА, рдФрд░ рд╕рд╛рд░рд╛ рдЬрд╛рджреВ рдЗрд╕ рдкрд░ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рдорд╢реАрди рдкрд░ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
- рдЕрдЬрдЧрд░ рдФрд░ рдЕрдЬрдЧрд░ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдкрд╛рдЗрдкред рдХрдИ рд╡рд┐рддрд░рдг рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реИред
- рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Ansible рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рд╕рдмрд╕реЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ: рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ ansible
- рд╡рд┐рдВрдбреЛрдЬ рдорд╢реАрдиреЛрдВ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ winrm рдореЙрдбреНрдпреВрд▓ рдЬреЛрдбрд╝реЗрдВ: рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ pywinrm [рдХреНрд░реЗрдбрд┐рдЯ]
- рдФрд░ рдЬрд┐рди рдорд╢реАрдиреЛрдВ рдХреЛ рд╣рдо рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрди рдкрд░ рд╣рдореЗрдВ winrm рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рд╕рднреА Ansible рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИ рдХрд┐ рддреИрдпрд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЖрдВрд╕рд┐рдмрд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдП: ConfigureRemotingForAnsible.ps1 -EnableCredSSP
рдкреАрдПрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рджреБрдЦ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдЗрдиреНрд╡реЗрдВрдЯрд░реА рдерд╛ред рдПрдХ YAML рдлрд╝рд╛рдЗрд▓ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ), рдЬреЛ рд╣рдорд╛рд░реЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рдФрд░ рдЬрд╣рд╛рдВ рдЖрдк рд╣рдореЗрд╢рд╛ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣ рдХрд╣рд╛рдВ рддреИрдирд╛рдд рд╣реИред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЦреБрдж рдХреЛ playbooksред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдХрд╛рдо рдЖрд╡рд╢реНрдпрдХ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдлрд╝рд╛рдЗрд▓ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд▓реЗрдмреБрдХ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
all: children: webservers: hosts: spbdotnet-test-host.dev.local: dbservers: hosts: spbdotnet-test-host.dev.local: vars: ansible_connection: winrm ansible_winrm_transport: credssp ansible_winrm_server_cert_validation: ignore ansible_user: administrator ansible_password: 123qweASD
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рдореВрд▓ рд╕рдореВрд╣ рд╕рднреА рдФрд░ рджреЛ рдЙрдкрд╕рдореВрд╣реЛрдВ, webserves рдФрд░ dbservers рд╣реИред рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╕рд╣рдЬ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреНрд╕рд┐рдмрд▓ рд▓рд┐рдирдХреНрд╕ рдХреЛ рд╣рд░ рдЬрдЧрд╣ рдорд╛рдирддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ winrm рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рдкреНрд▓реЗрдмреБрдХ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣рд╛рдВ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдкрд╛рд╕рд╡рд░реНрдб рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Ansible-Vault рдореЗрдВред рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП TeamCity рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рдкрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдЖрдЧ рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИред
рдореЙрдбреНрдпреВрд▓
рдПрдВрд╕рд┐рдмрд▓ рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдореЙрдбреНрдпреВрд▓ рдХреА рдорджрдж рд╕реЗ рдХрд░рддрд╛ рд╣реИред рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдкрд╛рдЗрдерди рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдкреЙрд╡рд░рд╢реЗрд▓ рдореЗрдВред рдФрд░ рдЖрд▓рд╕реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реНрд░рджреНрдзрд╛: рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрд╢рд╛ рдПрдХ json рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореЗрдЬрдмрд╛рди рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдП рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред
рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдкреНрд░рдкрддреНрд░реЛрдВ рдХреА ansible рд╣реЛрд╕реНрдЯ рд╕рдореВрд╣ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдлрд╝рд╛рдЗрд▓ рд╕реВрдЪреА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЪрд▓рд╛рдПрдВрдЧреЗ:

Pleybuki
рдПрдХ рдирд╛рдЯрдХрдкреБрд╕реНрддрд┐рдХрд╛ рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ рдХрд┐ рд╣рдо рдХреИрд╕реЗ рдФрд░ рдХрд╣рд╛рдБ рдЕрдВрд╕рд┐рдмрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗред
- name: Install AWS CLI hosts: all vars: aws_cli_download_dir: c:\downloads aws_cli_msi_url: https://s3.amazonaws.com/aws-cli/AWSCLI32PY3.msi tasks: - name: Ensure target directory exists win_file: path: "{{ aws_cli_download_dir }}" state: directory - name: Download installer win_get_url: url: "{{ aws_cli_msi_url }}" dest: "{{ aws_cli_download_dir }}\\awscli.msi" force: no - name: Install AWS CLI win_package: path: "{{ aws_cli_download_dir }}\\awscli.msi" state: present
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рдХрд╛рд░реНрдп рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЙрд▓ рд╣реИред рдЗрд╕ рдкреНрд▓реЗрдмреБрдХ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдореМрдЬреВрдж рд╣реИ), рдлрд┐рд░ рд╡рд╣рд╛рдВ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рд╕реАрдПрд▓рдЖрдИ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ win_packge рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред
рдЗрд╕ playbook рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред

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

рдпрд╣ рд╡рд╣ рдореВрд░реНрдЦрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдкрд╛рд╡рд░рд╢реЗрд▓ рдХреЗ рд╕рд╛рде рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдЕрднреНрдпрд╛рд╕
рдпрд╣ рдереЛрдбрд╝рд╛ рд╕рд░рд▓реАрдХреГрдд рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдо рд╣рд░ рджрд┐рди рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо IIS рдХреЗ рддрд╣рдд рдПрдХ Windows рд╕реЗрд╡рд╛ рдФрд░ рдПрдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░реЗрдВрдЧреЗред
- name: Setup App hosts: webservers tasks: - name: Install IIS win_feature: name: - Web-Server - Web-Common-Http include_sub_features: True include_management_tools: True state: present register: win_feature - name: reboot if installing Web-Server feature requires it win_reboot: when: win_feature.reboot_required
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдпрд╣ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣реЛрд╕реНрдЯ рдкрд░ рдХреЛрдИ IIS рд╣реИ рдпрд╛ рдирд╣реАрдВ рдФрд░ рдЗрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ рдпрд╛ рдирд╣реАрдВред рдФрд░ рдкреНрд░рдмрдВрдзрди рдЙрдкрдХрд░рдг рдФрд░ рд╕рднреА рдЖрд╢реНрд░рд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рддреБрд░рдВрдд рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдореЗрдЬрдмрд╛рди рдХреЛ рд░рд┐рдмреВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп win_feature рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдкрд╣рд▓реА рдмрд╛рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрдЗрдЯрдо рдореЗрдВ, рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдЕрдВрд╕рд┐рдмрд▓ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ, рдореИрдВрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдХрд╛рд░реНрдп рд╣рдореЗрд╢рд╛ рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ? рдЕрдм рд╕реНрдерд╛рдкрд┐рдд IIS рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, win_feature рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрддреНрдкрд╛рджрди win_feature рдЪрд░ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ (рдореБрдЭреЗ рдорд╛рдлрд╝ рдХрд░реЗрдВред
рдЕрдЧрд▓реЗ рдХрд╛рд░реНрдп рдореЗрдВ, рд╣рдо win_reboot рдореЙрдбреНрдпреВрд▓ рдХрд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╣рд░ рдмрд╛рд░ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рдЗрд╕реЗ рддрднреА рдкреБрдирдГ рд▓реЛрдб рдХрд░реЗрдВрдЧреЗ рдЬрдм win_feature рдореЙрдбреНрдпреВрд▓ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдПрдЧрд╛ред
рдЕрдЧрд▓рд╛ рдХрджрдо SQL рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдорд┐рд▓рд┐рдпрди рддрд░реАрдХреЗ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдпрд╣рд╛рдБ win_chineryy рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рд╣реИред рд╣рд╛рдВ, рдареАрдХ рдпрд╣реА рд╣рдо рд▓рд┐рдирдХреНрд╕ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореЙрдбреНрдпреВрд▓ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ, рдФрд░ рдЕрдм рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдирдореЗрдВ рд╕реЗ рдЫрд╣ рд╣рдЬрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВред рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЖрдкрдХреЛ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
- name: SQL Server hosts: dbservers tasks: - name: Install MS SQL Server 2014 win_chocolatey: name: mssqlserver2014express state: present
рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдЬрдмрд╛рди рддреИрдпрд╛рд░ рдХрд┐рдпрд╛, рдЪрд▓реЛ рдЗрд╕реЗ рддреИрдирд╛рдд рдХрд░реЗрдВ!
- name: Deploy binaries hosts: webservers vars: myapp_artifacts: files/MyAppService.zip myapp_workdir: C:\myapp tasks: - name: Remove Service if exists win_service: name: MyAppService state: absent path: "{{ myapp_workdir }}\\MyAppService.exe"
рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╣рд▓реА рдмрд╛рдд рд╣рдо рдореМрдЬреВрджрд╛ рд╕реЗрд╡рд╛ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВред
- name: Delete old files win_file: path: "{{ myapp_workdir }}\\" state: absent - name: Copy artifacts to remote machine win_copy: src: "{{ myapp_artifacts }}" dest: "{{ myapp_workdir }}\\" - name: Unzip build artifacts win_unzip: src: "{{ myapp_workdir }}\\MyAppService.zip" dest: "{{ myapp_workdir }}"
рдЕрдЧрд▓рд╛ рдХрджрдо рдореЗрдЬрдмрд╛рди рдХреЛ рдирдИ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рдкреНрд▓реЗрдмреБрдХ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рд╕рднреА рдЕрднрд┐рд▓реЗрдЦ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИрдВ, рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЪрд░ рдХреЗ рд╕рд╛рде рдкрде рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж (win_copy), рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ unpacked (win_unzip) рд╣реЛрддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рд╕рд┐рд░реНрдл рд╕реЗрд╡рд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдмреБрдЭрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- name: Register and start the service win_service: name: ReporterService start_mode: auto state: started path: "{{ myapp_workdir }}\\MyAppService.exe"
рд╣реЛ рдЧрдпрд╛?
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдп рдФрд░ рд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ "рд▓реЗрдХрд┐рди" рд╣реИ - рд╣рдордиреЗ рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╣рдо рд╣рдореЗрд╢рд╛ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдирдП рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВред
рдФрд░ рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрджрд┐ рд╣рдордиреЗ рдкреБрд░рд╛рдиреА рдЖрдЙрдЯ-рдСрдл-рд╕рд░реНрд╡рд┐рд╕ рд╕реЗрд╡рд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдФрд░ рдкреНрд▓реЗрдмреБрдХ рдиреЗ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдЯреВрдЯреА рд╣реБрдИ рд╣реЛрд╕реНрдЯ рдорд┐рд▓ рдЬрд╛рдПрдЧреАред рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рднреА рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рд╣рдорд╛рд░реА рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЗ рдЪреЗрдХрд╕рдо рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- name: Get arifacts checksum stat: path: "{{ myapp_artifacts }}" delegate_to: localhost register: myapp_artifacts_stat - name: Get remote artifacts checksum win_stat: path: "{{ myapp_workdir }}\\MyAppService.zip" register: myapp_remote_artifacts_stat
рд╣рдо рд╕реНрдЯреЗрдЯ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЪреЗрдХрд╕рдо рд╕рд╣рд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, рдкрд░рд┐рдЪрд┐рдд рдирд┐рд░реНрджреЗрд╢ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рджрд┐рд▓рдЪрд╕реНрдк рд╕реЗ: рдкреНрд░рддрд┐рдирд┐рдзрд┐_рдУ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рдкреНрд▓реЗрдмреБрдХ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- name: Stop play if checksums match meta: end_play when: - myapp_artifacts_stat.stat.checksum is defined - myapp_remote_artifacts_stat.stat.checksum is defined - myapp_artifacts_stat.stat.checksum == myapp_remote_artifacts_stat.stat.checksum
рдФрд░ рдореЗрдЯрд╛ рдореЙрдбреНрдпреВрд▓ рдХреА рдорджрдж рд╕реЗ, рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдкреНрд▓реЗрдмреБрдХ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЕрдЧрд░ рд╕реНрдерд╛рдиреАрдп рдФрд░ рджреВрд░рд╕реНрде рдорд╢реАрдиреЛрдВ рдкрд░ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЗ рдЪреЗрдХрд╕рдо рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рд╣рдордиреЗ рдЖрд▓рд╕реНрдп рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рджреЗрдЦрд╛ред
- name: Ensure that the WebApp application exists win_iis_webapplication: name: WebApp physical_path: c:\webapp site: Default Web Site state: present
рдЕрдм рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рджреЗрдЦреЗрдВред рд╣рдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рд╕реАрдзреЗ рдмрд┐рдВрджреБ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рдиреЗ рдкреНрд░рдХрд╛рд╢рдХ рдХреЛ рдмрдирд╛рдпрд╛, рдореЗрдЬрдмрд╛рди рдХреЛ рд╕рднреА рдвреАрд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ рдФрд░ IIS рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╡рд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдЪрд▓рд╛рдПрдЧрд╛ред
рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдерд╛: рдХрдВрдкрдиреА рдореЗрдВ рдХрд┐рд╕реА рднреА рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рддреИрдирд╛рддреА рд╢реБрд░реВ рдХрд░рдирд╛ред рд╡рд╣ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЕрдкрдиреА рдкреНрд▓реЗрдмреБрдХ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрддреНрдкрд╛рдж рдХреЛ рдРрд╕реЗ рдФрд░ рдРрд╕реЗ рд╣реЛрд╕реНрдЯ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рд▓рд┐рдП, Ansible рдХреЗ рдкрд╛рд╕ рд░реЛрд▓реНрд╕ рд╣реИрдВред рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╕рдореНрдореЗрд▓рди рд╣реИред рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ / рднреВрдорд┐рдХрд╛ / рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдЕрдкрдиреА рднреВрдорд┐рдХрд╛рдПрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рднреВрдорд┐рдХрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ: рд╣рдорд╛рд░реЗ рдЙрдкрдХрд░рдгреЛрдВ, рдЪрд░, рд╕реЗрд╡рд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ, рдЖрджрд┐ рдХрд╛ рд╡рд┐рд╡рд░рдгред рдЖрдорддреМрд░ рдкрд░ рдХреБрдЫ рдЕрд▓рдЧ-рдерд▓рдЧ рдЗрдХрд╛рдИ рдПрдХ рднреВрдорд┐рдХрд╛ рдмрдирд╛рддреА рд╣реИред IIS рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдПрдХ рдорд╣рд╛рди рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЕрдЧрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рди рдХреЗрд╡рд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪреЗрдВред рд╣рдо рдПрдХ рдЕрд▓рдЧ рднреВрдорд┐рдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рднреВрдорд┐рдХрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ IIS рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдкреНрд▓реЗрдмреБрдХ рдХреЛ рдЕрд▓рдЧ рдХрд░ рджреЗрддреЗ рд╣реИрдВред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ рд╢рд╛рдорд┐рд▓_рд░реЛрд▓реЗ% role_name% рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдХрд╣рддреЗ рд╣реИрдВред
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдордиреЗ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреВрдорд┐рдХрд╛рдПрдВ рдмрдирд╛рдИрдВ, рдЬрд┐рд╕рд╕реЗ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛ред
- name: Run App hosts: webservers tasks: - name: "Install IIS" include_role: name: IIS - name: Run My App include_role: name: MyAppService vars: myapp_artifacts: ./buld.zip
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд░рди рдорд╛рдИ рдРрдк рднреВрдорд┐рдХрд╛ рдХреБрдЫ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦрддреА рд╣реИред
рдпрд╣рд╛рдБ рдЖрдкрдХреЛ Ansible Galaxy рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╢рдмреНрдж рд░рдЦрдирд╛ рд╣реИ - рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдЙрдкрд▓рдмреНрдз рдорд╛рдирдХ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рднрдВрдбрд╛рд░ред рдПрдХ рд╕рднреНрдп рд╕рдорд╛рдЬ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рдХрдИ рдореБрджреНрджреЗ рд╣рд▓ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВред рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЕрдм рд╣рдо рдкрд╣рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдордЬрдмреВрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗ, рддреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реВрдЪреА рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдлрд┐рд░ Ansible Galaxy рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд▓реЗрдмреБрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рдФрд░ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИред рд╕рднреА рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╣реИрдВред
рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХреЛрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореЙрдбреНрдпреВрд▓ рдпрд╛ рдЧреИрд▓реЗрдХреНрд╕реА рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рд╣реИ? рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рдпрд╛ рддреЛ рд╣рдо рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдиреВрдард╛ рдХрд╛рд░реНрдп рд╣реИред
рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╣рдореЗрд╢рд╛ рдЕрдкрдирд╛ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЖрдкрдХреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдерд╛, Ansible рдиреЗ 10 рдорд┐рдирдЯ рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЬрдм рдЖрдк рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рд╕реНрддреГрдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рд╢реНрди рд╣реЛрддреЗ рд╣реИрдВред
рд╕реАрдЖрдИ
рд╣рдорд╛рд░реЗ рд╡рд┐рднрд╛рдЧ рдореЗрдВ, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ TeamCity рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреА рдкрд╕рдВрдж рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп CI рд╕рд░реНрд╡рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╣рдореЗрд╢рд╛ рдЕрдкрдиреА рдкреНрд▓реЗрдмреБрдХ рдХреА рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдмрдХрд┐ YAML рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐ рдорд╛рдирддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред
CI рд╕рд░реНрд╡рд░ рдкрд░ рднреА рд╣рдо ansible-lint рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдпрд╣ ansible configs рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣реИ, рдЬреЛ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рд╡рд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрдЧрд╣ рд╣реИ, рдФрд░ рдПрдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд╛рдо рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдПрдХ рд╣реА рдкреНрд▓реЗрдмреБрдХ рдореЗрдВ рдХрдИ рдмрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдмреЗрд╢рдХ, рдЖрдк рдЕрднреА рднреА рдкреНрд▓реЗрдмреБрдХ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рддреИрдирд╛рдд рд╣реЛрдВрдЧреЗ рдФрд░ рдХреБрдЫ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдареЗрд╕ рдХреЗ рд▓рд┐рдП рддреИрдирд╛рдд рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдЬрд╛рдВрдЪрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред Ansible рдХрд╛ рд▓рд╛рдн рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдкреНрд▓реЗрдмреБрдХ, рдмрд▓реНрдХрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореЙрдбреНрдпреВрд▓ рдХрд╛ рднреА рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкрд░ рдЕрд╡рд╢реНрдп рдзреНрдпрд╛рди рджреЗрдВред
рдФрд░ CI рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг playbooks рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рдореИрдЬрд┐рдХ рдмрдЯрди "рдбреВ рд╡реЗрд▓" рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдЯреАрдорд╕рд┐рдЯреА рджреЗрддрд╛ рд╣реИред рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд░рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ: ansible-playbook рд░рд┐рдкреЛрд░реНрдЯрд░_vm.yml -i рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА .yml -vvv рдФрд░ рдбрд┐рдкреНрд▓реЙрдп рдмрдЯрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдмреЛрдирд╕ рдХреА рд╕реБрд╡рд┐рдзрд╛: рдЖрдк рдмрд┐рд▓реНрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрд┐рд▓реНрдб рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ рд╣реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рд╕рдореЗрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, TeamCity рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдХреЗрд╡рд▓ рд▓реЙрдЧ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдХреБрдЫ рдЕрдЪрд╛рдирдХ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░
- рднреНрд░рдорд┐рдд рдФрд░ рдЕрд▓рдЧ PowerShell рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рд╣рдордиреЗ YAML-configs рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ред
- рд╣рдордиреЗ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЛ рдЖрдо рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд┐рдирдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдЬрд╣рд╛рдВ рднреВрдорд┐рдХрд╛рдПрдВ рдЭреВрда рдмреЛрд▓рддреА рд╣реИрдВред рдпрджрд┐ рднреВрдорд┐рдХрд╛ рдЖрдкрдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЛ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рд┐рд░реНрдл рдкреВрд▓ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЖрдкрдХреЛ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИ =)
- рдЕрдм рдЖрдк рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреА рд╕рдлрд▓рддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рд▓реЙрдЧ рдХреЛ рдХрд╣рд╛рдБ рджреЗрдЦрдирд╛ рд╣реИред
- рд╕рдВрдЪрд╛рд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рднреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рднрдВрдбрд╛рд░ рдФрд░ рдЯреАрдорд╕рд┐рдЯреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рднреА рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд▓реЗрдмреБрдХ рдХрд╣рд╛рдБ рд╣реИрдВ рдФрд░ рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдкреБрдирд╢реНрдЪ рд▓реЗрдЦ рд╕реЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг github рдкрд░ рд▓рд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред