рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг

рдХреНрдпрд╛ рдЖрдк рдЕрднреА рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдлрд┐рд░ рд╣рдо рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬрд╛рддреЗ рд╣реИрдВ


рдХрдЯрд▓рд╛рдЗрди рдХреЗ рддрд╣рдд, .NET рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП CI рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
  1. рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рджреИрдирд┐рдХ рдмрдирд╛рддрд╛ рд╣реИ
  2. рд╕рдорд╕реНрдпрд╛ рд╕реВрдЪрдирд╛рдПрдБ
  3. рдмрдЧ рдЯреНрд░реИрдХрд░ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг
  4. рдЙрддреНрдкрд╛рдж рд╕рдВрд╕реНрдХрд░рдг
  5. рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд╕реНрдХрд░рдг
  6. рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрдгрдирд╛ рдФрд░ рдмреИрдХрдЕрдк


рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг" рдХреНрдпрд╛ рд╣реИ?
рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг (Engред рд╕рддрдд рдПрдХреАрдХрд░рдг) - рдпрд╣ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдХреА рдкреНрд░рдерд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХреАрдХрд░рдг рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдкрд╣рдЪрд╛рдирдиреЗ рдФрд░ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рдЧрд╛рддрд╛рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдордп рдЖрдкрдХреЗ рдкрд╛рд╕ "рдЙрддреНрдкрд╛рдж рдХрд╛ рд▓рд╛рдЗрд╡, рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:
  1. рддрд╛рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрдо рд╕реЗ рдХрдо рд╣рд░ рджрд┐рди рд╡реАрд╕реАрдПрд╕ рдореЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдпреЛрдЧрджрд╛рди рджреЗрдВ
  2. рдЙрддреНрдкрд╛рдж рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣реБрдИ
  3. рдЙрддреНрдкрд╛рдж рдкреНрд░рджрд░реНрд╢рди (рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рд╕рд╣рд┐рдд) рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣реБрдЖ
  4. рдЙрддреНрдкрд╛рдж рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдерд╛ (рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛)

рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдлреБрд░реНрддреАрд▓реА рдкреНрд░рдерд╛рдУрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдЬрд╛рдЗрд▓ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╛рд╕, рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЙрддреНрдкрд╛рдж рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЪрдХреНрд░ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдпрдорд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рди рдХрдИ рдирд┐рдпрдорд┐рдд рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рдмрдЪрддрд╛ рд╣реИред

VCS рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЖрд╡реЗрджрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдЪрдХреНрд░ рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИ, рдФрд░ рд╡рд┐рдХрд╛рд╕ рддреЗрдЬ рд╣реИ, рддреЛ рдпрд╣ рджреЗрд╡ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рднреА рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред VCS рд╕рдВрд░рдЪрдирд╛ рдЖрдкрдХреЗ рдкрд░рд┐рд╡реЗрд╢ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░реЗрдЧреАред
рд╕рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореБрдЦреНрдп рд╡рд┐рдХрд╛рд╕ рд╢рд╛рдЦрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рддрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╢рд╛рдЦрд╛ рдореЗрдВ рд╡рд┐рд▓рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдг рд╢рд╛рдЦрд╛ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рдПрдХ рдЧрдгрдирд╛ рд╣реЛрддреА рд╣реИред рдХреБрдВрд╡рд╛рд░реА рдореЗрдВ рдкрд░реАрдХреНрд╖рдг, рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдорд░реНрдЬ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд░рд┐рд▓реАрдЬрд╝ рд╢рд╛рдЦрд╛ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдБ рд╕реЗ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЙрддреНрдкрд╛рджрди рдкрд░ рдЧрд▓рддрд┐рдпрд╛рдБ рд╣реИрдВ (рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ), рд╣рдо рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрди рд╢рд╛рдЦрд╛ рд╕реЗ рдЖрдкрд╛рддрдХрд╛рд▓реАрди рдореЛрдб рдореЗрдВ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╣рдо рдЗрд╕реЗ рдбреАрдИрд╡реА рд╢рд╛рдЦрд╛ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред

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

рдЙрддреНрдкрд╛рджрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд▓рдХреНрд╖реНрдп рдХреЗ рдХрд░реАрдм рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдорддреМрд░ рдкрд░, рдореБрдЦреНрдп рдХрдард┐рдирд╛рдИ рддреГрддреАрдп-рдкрдХреНрд╖ рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдпрд╛ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рддреНрддреАрдп рд▓реЗрдирджреЗрди рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рдВрдЪрд╛рд▓рди рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИред

рд╡рд┐рдиреНрдпрд╛рд╕

рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╣рдо рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рд╕рдорд╛рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдВрдЧреА: рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЦрд╛рддреЗ, рдЯреЛрдХрди, рдЖрдИрдбреА, рдмрд╛рд╣рд░реА рд╡реЗрдм рд╕реЗрд╡рд╛рдПрдВ рдФрд░ рдмрд╣реБрдд рдХреБрдЫред .NET рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрдк-рдЯреВ-рдбреЗрдЯ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрдиред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, рд╡реЗ рдХреЗрд╡рд▓ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд░реВрдкрд╛рдВрддрд░рдг рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" /> <Target Name="AfterCompile" Condition="Exists('App.$(Configuration).config')"> <!--Generate transformed app config in the intermediate directory--> <TransformXml Source="App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="App.$(Configuration).config" /> <!--Force build process to use the transformed configuration file from now on.--> <ItemGroup> <AppConfigWithTargetPath Remove="App.config" /> <AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config"> <TargetPath>$(TargetFileName).config</TargetPath> </AppConfigWithTargetPath> </ItemGroup> </Target> 

рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдХреНрд╕рд░ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрдиреЛрдВ рдкрд░ рд╡реЗрдм.рдХреЙрдиреНрдлрд╝рд┐рдЧ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдЕрдХрдбрд╝ рдореЗрдВ рдкрдбрд╝ рдЬрд╛рддреЗ рд╣реИрдВ: App.config рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡реЗ рдЖрд╡реЗрджрди рд╕реНрддрд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдмрд┐рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди рд╕реНрдерд╛рдиреАрдп рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рджреМрд░рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╕рдордп рд░реВрдкрд╛рдВрддрд░рдг рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк Web.template.config рдлрд╝рд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ PostBuild рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛рд░реНрдп рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛, рдЕрдиреНрдпрдерд╛ рдкрд░рд┐рд╡рд░реНрддрди рджреЛ рдмрд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрджрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЕрдиреНрдп рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрджрд░реНрдн рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдореБрдЦреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд░рдЦрдирд╛ рдЕрднреА рднреА рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╣реА рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ред

рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВ


  <PropertyGroup> <CopyAllFilesToSingleFolderForPackageDependsOn> CustomCollectFiles; $(CopyAllFilesToSingleFolderForPackageDependsOn); </CopyAllFilesToSingleFolderForPackageDependsOn> </PropertyGroup> <Target Name="CustomCollectFiles"> <!-- Copy JavaScript files --> <ItemGroup> <CompressedScripts Include="Sources\**\*.js" /> <FilesForPackagingFromProject Include="%(CompressedScripts.Identity)"> <DestinationRelativePath>Sources\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> </FilesForPackagingFromProject> </ItemGroup> <!-- Copy stylesheets --> <ItemGroup> <CompressedScripts Include="Sources\**\*.css" /> <FilesForPackagingFromProject Include="%(CompressedScripts.Identity)"> <DestinationRelativePath>Sources\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> </FilesForPackagingFromProject> </ItemGroup> </Target> 


рдЙрддреНрдкрд╛рдж рд╕рдВрд╕реНрдХрд░рдг

.NET рдЕрд╕реЗрдВрдмрд▓рд┐рдВрдЧ рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП 2 рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
[рдЕрд╕реЗрдВрдмрд▓реА: рдЕрд╕реЗрдВрдмрд▓реА рд╡рд░реНрдЬрди ("1.0.0.0")]
[рдЕрд╕реЗрдВрдмрд▓реА: рдЕрд╕реЗрдореНрдмрд▓реАрдлрд╛рдЗрд▓рд╡рд░реНрдЬрди ("1.0.0.0")]
рдкрд╣рд▓реЗ рджреЛ рдЕрдВрдХ рдкреНрд░рдореБрдЦ рдФрд░ рдорд╛рдореВрд▓реА рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рд╣реИрдВред рдпреЗ рд╕рдВрдЦреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╡реГрджреНрдзрд┐ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреА рд╣реИред рддреАрд╕рд░рд╛ рдЕрдВрдХ рддрдерд╛рдХрдерд┐рдд рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕рдВрдЦреНрдпрд╛ рд╣реИред рд╣рд░ рджрд┐рди, рдЬрдмрдХрд┐ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╣реИ, рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдмрдврд╝рддрд╛ рд╣реИред рдФрд░ рдЖрдЦрд┐рд░реА рдирдВрдмрд░ рд░рд┐рд╡реАрдЬрди рдирдВрдмрд░ рд╣реИред рдЬрдм рдЖрдк рджрд┐рди рдореЗрдВ рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред .NET рд╕рдВрд╕реНрдХрд░рдг рдиреАрддрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рд╡рд░рдг рд░рд┐рдХреНрдЯрд░ CLR рдореЗрдВ C # рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдпрд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ: stackoverflow.com/questions/1126880/how-can-i-auto-increment-the-c-sharp-assembly-version-via-our-ci-platform-hudso ред

рдореБрдЦреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг

  1. рдкреНрд░рдкрддреНрд░ 1.0 рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред *ред * (рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)
  2. рдЗрд╕ рд╕реНрдерд╛рди рд╕реЗ рд╕рднреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ SharedAssemblyInfo рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ рдФрд░ "рд▓рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ" рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ
  3. рдЕрд╕реЗрдВрдмрд▓реАрдЗрдВрдлреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрдЬрд╛рдп msbuild рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
  4. TFS рдХреЗ рд▓рд┐рдП, рдЖрдк WWF- рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ msbuild рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдФрд░ CI рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓реНрдп рдХреЛ рдиреАрдЪреЗ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ:
 <Major>1</Major> <Minor>0</Minor> <Build>$(BUILD_NUMBER)</Build> 

рд╕рднреА рдЖрдзреБрдирд┐рдХ CI рд╕рдорд╛рдзрд╛рди рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЪрд░ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВред рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ msbuildtasks.tigris.org рд╕реЗ рдЖрдпрд╛рдд msbuild рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')" /> <Target Name="BeforeBuild" Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')"> <Message Text="Version: $(Major).$(Minor).$(Build).$(Revision)" /> <AssemblyInfo CodeLanguage="CS" OutputFile="AssemblyFileInfo.cs" AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)" AssemblyConfiguration="$(Configuration)" Condition="$(Revision) != '' " /> </Target> 


рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд╕реНрдХрд░рдг

рдореБрдЭреЗ рдПрдХ рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореБрдЭреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ред .NET рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

SSDT рдкреНрд░реЛрдЬреЗрдХреНрдЯ msdn.microsoft.com/en-us/data/tools.aspx

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

ECM7 рдорд╛рдЗрдЧреНрд░реЗрдЯрд░ рдХреЛрдб. google.com/p/ecm7migrator

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

рдЗрдХрд╛рдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx

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


рдореИрдВ рд╕рднреА 3 рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдпрджрд┐ рдЖрдк EF рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рдХрд▓реНрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ EF рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╣реИ, рдХреЗ рд▓рд┐рдПред NHibernate рдЖрдк ECM7 рдорд╛рдЗрдЧреНрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрд╕рдПрд╕рдбреАрдЯреА-рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдФрд░ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рдкреНрд░реЗрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдХрд╛рд╢рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ

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




рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, WebDeploy рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдЪреЗрдХрдорд╛рд░реНрдХ рдХреЗ рд╕рд╛рде EF рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд╢рди рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдЯреНрд░реЙрдп рд╣рдВрдЯ рдиреЗ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ: www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity.html ред рдЕрдм рд╣рдо рдЙрд╕рдХреЗ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдкрд╛рдВрдЪрд╡реЗрдВ рдЪрд░рдг рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдХрд╛рд╢рди: www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity_26.html ред рдореИрдВ рдЯреАрдорд╕рд┐рдЯреА рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВ, рддреЛ рдЖрдЗрдП рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╕реАрдЖрдИ рдХреЛ рджреЗрдЦреЗрдВред

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд Windows рд╕реЗрд╡рд╛ рдкреНрд░рдХрд╛рд╢рди

рд╡рд┐рдВрдбреЛрдЬрд╝ рдХрдорд╛рдВрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ sc рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:
 sc [<ServerName>] create|stop|start <ServiceName> binpath= <BinPath> start= demand 

рдПрдХрдорд╛рддреНрд░ рд╕реВрдХреНрд╖реНрдо рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЛ <BinPath> рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдБрдЪрд╛рдпрд╛ рдЬрд╛рдПред рдЖрдк рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: FTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ, PowerShell рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд╕рд░реНрд╡рд░ рдкрд░ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ xcopy / robocopy рдпрд╛ rsync рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЪреБрдирд╛рд╡ рдЖрдкрдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

TeamCity

рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХрд╛ рд╕рдордп рдмрдЪреЗрдЧрд╛ред рдЪрд▓реЛ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред TeamCity рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ: www.jetbrains.com/teamcity рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдЪрд▓рд╛рдПрдВ, рд╣рд░ рдЬрдЧрд╣ рдУрдХреЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
TeamCity рдХреА рджреЛ рдореБрдЦреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ "рдкреНрд░реЛрдЬреЗрдХреНрдЯ" рдФрд░ "рдмрд┐рд▓реНрдб" рд╣реИрдВред "рдкреНрд░реЛрдЬреЗрдХреНрдЯ" рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ рдмрд┐рд▓реНрдб рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рд╕рд╛рд░реНрдердХ рд╕реЗрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ: рдЪрд╛рд╣реЗ рд╡рд╣ рдХреЛрдбрд╛рдВрддрд░рдг рд╣реЛ, рдкрд░реАрдХреНрд╖рдг рдЪрд▓ рд░рд╣рд╛ рд╣реЛ, рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛, рдмреИрдХрдЕрдк рдмрдирд╛рдирд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд▓реЗрдЖрдЙрдЯ

рдкрд╣рд▓рд╛ рдЪрд░рдг рдЙрд╕ рд╡рд┐рд╖рдп рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдирд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИред
рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде msbuild рдХрджрдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдПрдХ рдирдИ рдмрд┐рд▓реНрдб рдкрд░рд┐рднрд╛рд╖рд╛ рдмрдирд╛рдПрдВ рдФрд░ рдкрд╣рд▓реЗ Msbuild рдХрджрдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рдкрд╛рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
 /P:Configuration=%env.Configuration% /P:DeployOnBuild=True /P:DeployTarget=MSDeployPublish /P:MsDeployServiceUrl=https://%env.TargetServer%/MsDeploy.axd /P:AllowUntrustedCertificate=True /P:MSDeployPublishMethod=WMSvc /P:CreatePackageOnPublish=True /P:UserName=AutoDeploy\Administrator /P:Password=Passw0rd 

рдпреЗ рд╡рд┐рдХрд▓реНрдк рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЖрдк рдХрд╣рд╛рдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрджрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 SET AssemblyName=MyMvc4App SET StartUpDirectory=MyMvc4App\bin\ SET ConnectionString=Server=tcp:XXXX.database.windows.net,1433;Database=XXXX;User ID=XXXX;Password=XXXX;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True SET ConnectionStringProvider=System.Data.SqlClient SET ConfigFilePath=%CD%\MyMvc4App\web.config SET MigrateExe=packages\EntityFramework.5.0.0\tools\migrate.exe %MigrateExe% %AssemblyName%.dll /startUpDirectory:%StartUpDirectory% /startUpConfigurationFile:"%ConfigFilePath%" /connectionProviderName:"%ConnectionStringProvider%" /connectionString:"%ConnectionString%" /verbose 

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

рд░реЛрд▓рд┐рдВрдЧ рдмрдирд╛рддрд╛ рд╣реИ

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

рдХреИрд╕реЗ рдирд╣реАрдВ рддреЛрдбрд╝рд╛ рдЬрд╛рдП рдирд┐рд░реНрдорд╛рдг

рдЖрдк рдЬреЛ рднреА рдЕрднреНрдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рдЬреЛ рднреА рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ 100% рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ VCS рдореЗрдВ рдХреЛрдб рдХрд╛ рдпреЛрдЧрджрд╛рди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХрд┐ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рдЙрдкрд╛рдпреЛрдВ рдХреА рдорджрдж рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдпрд╣ рдЬрд╛рдВрдЪ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдЫреЛрдбрд╝рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдиреЗ рднреА рдЗрд╕реЗ рддреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред рдПрдХ рдХрдВрдкрдиреА рдореЗрдВ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛, рдПрдХ рдЯреВрдЯреА рд╣реБрдИ рдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдХреНрд╕рд░ рдирд┐рдпрдо рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдмрд┐рд▓реНрдб рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ - рдПрдХ рдХреЗрдХ рд▓рд╛рдУред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╣рд░ рджрд┐рди рдХреЗрдХ рдЦрд╛рдпрд╛, рдлрд┐рд░ рд╡реЗ рдмрдВрдж рд╣реЛ рдЧрдПред

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ

рдЗрд╕ рдЪрд░рдг рдХреЛ 2 рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдПрдХреАрдХрд░рдг рдФрд░ рд╕реНрд╡реАрдХреГрддрд┐ рдкрд░реАрдХреНрд╖рдгред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХрд┐рд╕реА рднреА рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рднреА рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдирдХрд▓реА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдЪрд▓ рд░рд╣рд╛ рд╣реИ

рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдк "рдиреВрдирд┐рдЯ" рдпрд╛ "рдПрдордПрд╕рдЯреЗрд╕реНрдЯ" рдЪреБрдиреЗрдВ, рдкреИрдЯрд░реНрди ** рджрд░реНрдЬ рдХрд░реЗрдВред рдкрд░реАрдХреНрд╖рдг * .dll, TeamCity рдЖрдкрдХреЗ рд▓рд┐рдП рдмрд╛рдХреА рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдмрд╢рд░реНрддреЗ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдирд╛рдо рдкрд░ .Tests рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдПрдХреАрдХрд░рдг рдФрд░ рд╕реНрд╡реАрдХреГрддрд┐ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ

рдпреЗ рдкрд░реАрдХреНрд╖рдг рдХрдИ рдХрд╛рд░рдХреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдореЗрдВ рд░реЛрд▓рд┐рдВрдЧ рдмреИрдХрдЕрдк рдпрд╛ рдЖрд░рдВрднреАрдХрд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓реЙрдиреНрдЪ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рди рдХрд░реЗрдВ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрдорд╛рдг рдмрдирд╛рдПрдВред TeamCity рдЖрдкрдХреЛ рдмрд┐рд▓реНрдб рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕реНрд╡реАрдХреГрддрд┐ / рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдб рдХреЗ рдмрд┐рд▓реНрдб рдЯреНрд░рд┐рдЧрд░реНрд╕ рдореЗрдВ, рдЖрдк рдПрдХ рдЯреНрд░рд┐рдЧрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рддрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдб рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕реНрд╡реАрдХреГрддрд┐ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд┐рд╖рдп рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИ: habrahabr.ru/post/182032 ред

рдмреИрдХрдЕрдк

рдЧрдгрдирд╛ рдХреЗ рджреМрд░рд╛рди рдмреИрдХрдЕрдк рдмрдирд╛рдирд╛ рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдмреИрдХрдЕрдк рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ nnbackup рд╕реЗ рдмреЗрд╣рддрд░ рдХреБрдЫ рдирд╣реАрдВ рдорд┐рд▓рд╛: www.nncron.ru/index_ru.shtml ред
 nnbackup -n 10 verz -i <Src> -o <Destination> -s -e тАУv 

рдХрдорд╛рдВрдб рдЬрд╝рд┐рдк рдореЗрдВ рд╕реНрд░реЛрдд рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЧрдВрддрд╡реНрдп рдкрд░ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИред рд▓рдХреНрд╖реНрдп рдорд╢реАрдиреЛрдВ рдкрд░ nnbackup рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдпрд╛ рдХрд┐рд╕реА рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ: рдЖрдкрдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рдкреНрд░рд╢реНрди, рд╕рд░реНрд╡рд░ рд╕реНрдерд╛рди, рдиреЗрдЯрд╡рд░реНрдХ рдУрд╡рд░рд╣реЗрдб рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред

рдЖрдк рдЯреА-рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡рд░ рдХрд╛ рдмреИрдХрдЕрдк рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ
 BACKUP DATABASE AdventureWorks2012 TO DISK='X:\SQLServerBackups\AdventureWorks1.bak', DISK='Y:\SQLServerBackups\AdventureWorks2.bak', DISK='Z:\SQLServerBackups\AdventureWorks3.bak' WITH FORMAT, MEDIANAME = 'AdventureWorksStripedSet0', MEDIADESCRIPTION = 'Striped media set for AdventureWorks2012 database; GO RESTORE DATABASE AdventureWorks FROM DISK='$(Backup)' 

рдпрд╛рдиреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдмреИрдХрдЕрдк рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЪрд░рдг рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╛ рдЖрдк рдПрдХ рд╣реА рд╕рдореБрджрд╛рдп рдкреИрдХреЗрдЬ рд╕реЗ msbuild рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ nnbackup рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ msbuild рдХрд╛рд░реНрдп рд▓рд┐рдЦреЗрдВред
рдпрджрд┐ рд╕реНрд╡реАрдХреГрддрд┐ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЖрдк рдмреИрдХрдЕрдк рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реЛрд▓рдмреИрдХ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд┐рд▓реНрдбреНрд╕ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реЛрдЧреА: рд▓реЗрдЖрдЙрдЯ ┬╗рд╕реНрд╡реАрдХреГрддрд┐ рдкрд░реАрдХреНрд╖рдг┬╗ рдмреИрдХрдЕрдк рд╕реЗ рд░реЛрд▓рдмреИрдХред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдФрд░ рдмрдЧ рдЯреНрд░реИрдХрд░ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг

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

рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг

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

рдПрдХ рд╡рд┐рд░реВрдкрдг рд╕рд╛рдХреНрд╖реНрдп рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рдгрд╛рдо рд╣реИред рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП, рдЖрдк my-рдЗрдВрд╕реНрдЯреЙрд▓рд░ред Exe рдпрд╛ my-package.zip рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд┐рд▓реНрдб рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрдЦреМрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ TeamCity рдЙрдиреНрд╣реЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЯреИрдм рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред
рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдЯреНрд░реИрдХрд░ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдЙрдкрдпреЛрдЧреА рд╣реИред рдкрд░реАрдХреНрд╖рдХ рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рдмрдВрдж рдХрд╛рд░реНрдп рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд┐рд▓реНрдб рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рд╕реЗ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рдВрд╕реНрдХрд░рдг рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред

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

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


All Articles