рдпрд╛ рдЖрд╕рд╛рди рдХреЛрдбрд┐рдВрдЧ рдХреА рдПрдХ рд╢рд╛рдо рдореЗрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реБрдВрджрд░ рдмреИрдЬ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рд╢рд╛рдпрдж, рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкрд╛рд▓рддреВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЙрд╕рдХреЗ рдкрд╛рд╕ рд╕реНрдерд┐рддрд┐, рдХреЛрдб рдХрд╡рд░реЗрдЬ, рдирдЧреЗрдЯ рдореЗрдВ рдкреИрдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕реБрдВрджрд░ рдмреИрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЦреБрдЬрд▓реА рд╣реИ ... рдФрд░ рдЗрд╕ рдЦреБрдЬрд▓реА рдиреЗ рдореБрдЭреЗ рдпрд╣ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рддреИрдпрд╛рд░реА рдореЗрдВ, рдореБрдЭреЗ рдпрд╣ рд╕реБрдВрджрд░рддрд╛ рдореЗрд░реА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдорд┐рд▓реА:
рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ GitLab рдореЗрдВ .Net Core рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдФрд░ рд╡рд┐рддрд░рдг рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рд╕реЗрдЯрдЕрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдЧрд╛, GitLab рдкреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛, рдФрд░ Azure DevOps рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдПрдХ рдирд┐рдЬреА рдлрд╝реАрдб рдореЗрдВ рдзрдХреЗрд▓рдирд╛ред
рд╡реАрдПрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп
рд╕реАрдбреА - рдХреНрдпрд╛ рдпрд╣ рддрдм рд╣реИ рдЬрдм рдЖрдкрдиреЗ рд╕рд┐рд░реНрдл рдзрдХреНрдХрд╛ рджрд┐рдпрд╛, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдкрд░ рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╣реА рдЧрд┐рд░ рдЪреБрдХрд╛ рд╣реИ?
CI / CD рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ - рдЖрдк рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ google рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред GitLab рдореЗрдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
- рдбреЗрд╡рд▓рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдПрдХ рдХрдорд┐рдЯ рднреЗрдЬрддрд╛ рд╣реИ, рд╕рд╛рдЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛ рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ,
- рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╢рд░реНрддреЗрдВ рдЙрдиреНрд╣реЗрдВ рджрд┐рдП рдЧрдП рд╕рдВрджрд░реНрдн рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ,
- рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрдирдХреЗ рдЪрд░рдгреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ,
- рдЪрд░рдгреЛрдВ рдХреЛ рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЕрд░реНрдерд╛рдд рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдЗрд╕ рдЪрд░рдг рдХреЗ рд╕рднреА рдХрд╛рд░реНрдп рдкреВрд░реЗ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВ,
- рдпрджрд┐ рдЪрд░рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд, рдЪрд░рдг рдХрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдХрд╛рд░реНрдп рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ), рддреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИ (рдЬреНрдпрд╛рджрд╛рддрд░ рд╣рдореЗрд╢рд╛),
- рдпрджрд┐ рд╕рднреА рдЪрд░рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реЗ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд╕рдлрд▓ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ:
- рдкрд╛рдЗрдкрд▓рд╛рдЗрди - рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкреИрдХреЗрдЬ рдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдмрд┐рд▓реНрдб рдХреЛ рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред
- рдЕрд╡рд╕реНрдерд╛ (рдордВрдЪ) тАФ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕рдВрдЧрдарди рдЗрдХрд╛рдИ, рдЬрд┐рд╕рдореЗрдВ 1+ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИ,
- рдХрд╛рдо (рдХрд╛рдо) рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдХрд╛рдо рдХреА рдПрдХ рдЗрдХрд╛рдИ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдЕрдирд┐рд╡рд╛рд░реНрдп), рд▓реЙрдиреНрдЪ рдХреА рд╢рд░реНрддреЗрдВ, рдкреНрд░рдХрд╛рд╢рди/рдХреИрд╢рд┐рдВрдЧ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рддрджрдиреБрд╕рд╛рд░, рд╕реАрдЖрдИ / рд╕реАрдбреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдХрд╛рд░реНрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХреЛрдб рдФрд░ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг, рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ: рдХреНрдпреЛрдВ?
- рдЧрд┐рдЯрд▓реИрдм рдХреНрдпреЛрдВ?
рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдкрд╛рд▓рддреВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдпрд╛, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЧрд┐рдЯрд╣рдм рдкрд░ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ рдореИрдВ рд▓рд╛рд▓рдЪреА рдерд╛ред рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореБрдХреНрдд рд╣реЛ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЧрд┐рдЯрд╣рдм рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред
- Azure DevOps рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреНрдпреЛрдВ рдирд╣реАрдВ?
рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдВ рд╕реЗрдЯрд┐рдВрдЧ рдкреНрд░рд╛рдердорд┐рдХ рд╣реИ - рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдЬреНрдЮрд╛рди рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмрд╛рд╣рд░реА рдЧрд┐рдЯ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг - рдХреБрдЫ рдХреНрд▓рд┐рдХреЛрдВ рдореЗрдВ, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХрдорд┐рдЯ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП SSH рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЖрдпрд╛рдд - рднреА, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЬрд╛рддреА рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рднреА рдирд╣реАрдВред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐: рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЖрдк рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рд╣рдорд╛рд░реЗ рдкрд╛рд╕:
- GitLab рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реАред
рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
- рдкреНрд░рддреНрдпреЗрдХ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рдкрд░реАрдХреНрд╖рдг,
- рдкреНрд░рддреНрдпреЗрдХ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдмрдирд╛рдирд╛ рдФрд░ рдорд╛рд╕реНрдЯрд░ рдХреЛ рдзрдХреНрдХрд╛ рджреЗрдирд╛, рдмрд╢рд░реНрддреЗ рдкреНрд░рддрд┐рдмрджреНрдз рд╕рдВрджреЗрд╢ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░реЗрдЦрд╛ рд╣реЛ,
- Azure DevOps рдореЗрдВ рдирд┐рдЬреА рдлрд╝реАрдб рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдкреИрдХреЗрдЬ рднреЗрдЬрдирд╛,
- GitLab рдкреЗрдЬреЛрдВ рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдкреНрд░рдХрд╛рд╢рди рдХреА рдЕрд╕реЗрдВрдмрд▓реА,
- рдмреИрдЬ!11
рд╡рд░реНрдгрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЙрдбрд▓ рдкрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░реВрдк рд╕реЗ рдЖрддреА рд╣реИрдВ:
- рд╕реНрдЯреЗрдЬ 1 - рдЕрд╕реЗрдВрдмрд▓реА
- рд╣рдо рдХреЛрдб рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
- рд╕реНрдЯреЗрдЬ 2 - рдкрд░реАрдХреНрд╖рдг
- рд╣рдо рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдЬ рд╕реЗ рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдХреЛрдб рдХрд╡рд░реЗрдЬ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ
- рд╕реНрдЯреЗрдЬ 3 - рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ
- рдЯрд╛рд╕реНрдХ 1 - рдирдЧреЗрдЯ рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ Azure DevOps рдХреЛ рднреЗрдЬреЗрдВ
- рдЯрд╛рд╕реНрдХ 2 - рд╣рдо рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ xmldoc рд╕реЗ рд╕рд╛рдЗрдЯ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ GitLab рдкреЗрдЬреЛрдВ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
рдЖрдПрдБ рд╢реБрд░реВ рдХрд░реЗрдВ!
рд╡рд┐рдиреНрдпрд╛рд╕ рдПрдХрддреНрд░рд┐рдд рдХрд░рдирд╛
рдЦрд╛рддреЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛
-
рдореЗрдВ рдЕрдХрд╛рдЙрдВрдЯ рдмрдирд╛рдПрдВ
рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдиреАрд▓рд╛ -
рдХреЗ рд▓рд┐рдП рдЬрд╛рдУ
Azure DevOps -
рд╣рдо рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ
- рдирд╛рдо - рдХреЛрдИ рднреА
- рджреГрд╢реНрдпрддрд╛ - рдХреЛрдИ рднреА
-
рдЬрдм рдЖрдк рдХреНрд░рд┐рдПрдЯ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрди рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрдк рдЗрд╕рдХреЗ рдкреЗрдЬ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕ рдкреГрд╖реНрда рдкрд░, рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (рдмрд╛рдИрдВ рдУрд░ рд╕реВрдЪреА рдореЗрдВ рдирд┐рдЪрд▓рд╛ рд▓рд┐рдВрдХ -> рдЕрд╡рд▓реЛрдХрди -> Azure DevOps Services рдмреНрд▓реЙрдХ) рдкрд░ рдЬрд╛рдХрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
-
Atrifacts рдкрд░ рдЬрд╛рдПрдВ, рдлрд╝реАрдб рдмрдирд╛рдПрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
- рд╕реНрд░реЛрдд рдХрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ
- рджреГрд╢реНрдпрддрд╛ рдЪреБрдиреЗрдВ
- рд╕рд╣реА рдХрд╛ рдирд┐рд╢рд╛рди рд╣рдЯрд╛рдПрдБ рдЖрдо рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдкреИрдХреЗрдЬ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рд╕реНрд░реЛрдд рдбрдВрдк рдирдЧреЗрдЯ рдХреНрд▓реЛрди рдореЗрдВ рди рдмрджрд▓ рдЬрд╛рдП
-
рдХрдиреЗрдХреНрдЯ рдЯреВ рдлреАрдб рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдорд╢реАрди рд╕реЗрдЯрдЕрдк рдмреНрд▓реЙрдХ рд╕реЗ рд╕реНрд░реЛрдд рдХреЙрдкреА рдХрд░реЗрдВ
-
рдЕрдХрд╛рдЙрдВрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдЬрд╛рдПрдВ, рдкрд░реНрд╕рдирд▓ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдЪреБрдиреЗрдВ
-
рдПрдХ рдирдпрд╛ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдмрдирд╛рдПрдВ
- рдирд╛рдо - рдордирдорд╛рдирд╛
- рд╕рдВрдЧрдарди - рд╡рд░реНрддрдорд╛рди
- рдЕрдзрд┐рдХрддрдо 1 рд╡рд░реНрд╖ рдХреЗ рд▓рд┐рдП рд╡реИрдз
- рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ - рдкреИрдХреЗрдЬрд┐рдВрдЧ/рдкрдврд╝реЗрдВ рдФрд░ рд▓рд┐рдЦреЗрдВ
-
рдмрдирд╛рдП рдЧрдП рдЯреЛрдХрди рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ - рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдорд╛рди рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛
-
GitLab рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдЬрд╛рдПрдВ, CI / CD рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЪреБрдиреЗрдВ
-
рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдмреНрд▓реЙрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ, рдПрдХ рдирдпрд╛ рдЬреЛрдбрд╝реЗрдВ
- рдирд╛рдо - рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рдмрд┐рдирд╛ рдХреЛрдИ рднреА (рдХрдорд╛рдВрдб рд╢реЗрд▓ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛)
- рдорд╛рди - рдкреИрд░рд╛рдЧреНрд░рд╛рдл 9 рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди
- рдорд╛рд╕реНрдХ рдЪрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
рдпрд╣ рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рддреИрдпрд╛рд░ рдХрд░рдирд╛
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, GitLab рдореЗрдВ CI / CD рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ .gitlab-ci.yml
рднрдВрдбрд╛рд░ рдХреА рдЬрдбрд╝ рд╕реЗред рдЖрдк рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдордирдорд╛рдирд╛ рдкрде рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ YAML
. рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╡рд┐рд╡рд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдиреЗрд╕реНрдЯреЗрдб рд╕реНрддрд░ рдкрд░ рдХреМрди рд╕реА рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╕рдорд╛рд╣рд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЙрдХрд░ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░реНрдп рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ
image: mcr.microsoft.com/dotnet/core/sdk:3.1
рдЕрдм, рдЬрдм Microsoft рдЫрд╡рд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЫрд╡рд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рд╕рднреА рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рдЕрдЧрд▓рд╛ рдХрджрдо рдЬреЛрдбрд╝рдирд╛ рд╣реИ рдордВрдЪ'рдПрд╕ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, GitLab 5 рдЪрд░рдгреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ:
.pre
- рд╕рднреА рдЪрд░рдгреЛрдВ рддрдХ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛,.post
- рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЗ рдмрд╛рдж рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛,build
- рдкрд╣рд▓реЗ рдХреЗ рдмрд╛рдж.pre
рдЕрд╡рд╕реНрдерд╛,test
- рджреВрд╕рд░рд╛ рдЪрд░рдг,deploy
- рддреАрд╕рд░рд╛ рдЪрд░рдгред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдЪрд░рдгреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рдЙрд╕ рдХреНрд░рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
stages:
- build
- test
- deploy
рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдЙрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ before_script
:
before_script:
- $PSVersionTable.PSVersion
- dotnet --version
- nuget help | select-string Version
рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝рдирд╛ рдмрд╛рдХреА рд╣реИ рддрд╛рдХрд┐ рдЬрдм рдХрдорд┐рдЯ рднреЗрдЬрд╛ рдЬрд╛рдП рддреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПред рдЕрднреА рдХреЗ рд▓рд┐рдП, рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рд▓реА рдХрд╛рд░реНрдп рдЬреЛрдбрд╝реЗрдВ:
dummy job:
script:
- echo ok
рд╣рдо рд╕рддреНрдпрд╛рдкрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рд╣рдо рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИрдВ, рд╣рдо рдзрдХреНрдХрд╛ рджреЗрддреЗ рд╣реИрдВ, рд╣рдо рд╕рд╛рдЗрдЯ рдкрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрддреЗ рд╣реИрдВ ... рдФрд░ рд╣рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ - bash: .PSVersion: command not found
. рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл?
рд╕рдм рдХреБрдЫ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдзрд╛рд╡рдХ (рдХрд╛рд░реНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдФрд░ GitLab рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛) рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ bash
рдЖрджреЗрд╢реЛрдВ рдХреЛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЖрдк рдХрд╛рд░реНрдп рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд░рдирд░ рдореЗрдВ рдХреМрди рд╕реЗ рдЯреИрдЧ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП:
dummy job on windows:
script:
- echo ok
tags:
- windows
рдорд╣рд╛рди! рдЕрднреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд▓ рд░рд╣реА рд╣реИред
рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ, рд╕рдВрдХреЗрддрд┐рдд рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реБрдП, рдзреНрдпрд╛рди рджреЗрдЧрд╛ рдХрд┐ рдХрд╛рд░реНрдп рдЪрд░рдг рдореЗрдВ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рдерд╛ test
, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдордиреЗ рдЪрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЬреИрд╕рд╛ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ test
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрджрдо рд╣реИред
рдЖрдЗрдП рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрдВрдХрд╛рд▓ рдмрдирд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ:
build job:
script:
- echo "building..."
tags:
- windows
stage: build
test and cover job:
script:
- echo "running tests and coverage analysis..."
tags:
- windows
stage: test
pack and deploy job:
script:
- echo "packing and pushing to nuget..."
tags:
- windows
stage: deploy
pages:
script:
- echo "creating docs..."
tags:
- windows
stage: deploy
рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╕рд╣реА рдкрд╛рдЗрдкрд▓рд╛рдЗрдиред
рдЯреНрд░рд┐рдЧрд░реНрд╕ рдХреА рд╕реНрдерд╛рдкрдирд╛
рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЯреНрд░рд┐рдЧрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╣реЛрдЧрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд░ рдмрд╛рд░ рдПрдХ рдХрдорд┐рдЯ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдзрдХреЗрд▓рдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗрдЯ рдЕрдк рдХрд░реЗрдВрдЧреЗред
рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рджреЛ рд╕реНрд╡рд░реВрдкреЛрдВ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: only/except
рдЖрдкрдХреЛ рдЯреНрд░рд┐рдЧрд░ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (merge_request
, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - рд╣рд░ рдмрд╛рд░ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдХрд╛рд░реНрдп рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рд░ рдмрд╛рд░ рдХрдорд┐рдЯ рдЙрд╕ рд╢рд╛рдЦрд╛ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╕реНрд░реЛрдд рд╣реИ) рдФрд░ рд╢рд╛рдЦрд╛ рдХреЗ рдирд╛рдо (рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕рд╣рд┐рдд); rules
рдЖрдкрдХреЛ рд╢рд░реНрддреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░, рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдлрд▓рддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ (when
рдЧрд┐рдЯрд▓реИрдм рд╕реАрдЖрдИ/рд╕реАрдбреА рдореЗрдВ
рдЖрдЗрдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ - рдХреЗрд╡рд▓ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рдкрд░реАрдХреНрд╖рдг, Azure DevOps рдХреЛ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдФрд░ рднреЗрдЬрдирд╛ - рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдФрд░ рдорд╛рд╕реНрдЯрд░ рдХреЛ рдкреБрд╢ рдХрд░рдирд╛, рдкреНрд░рд▓реЗрдЦрди рдмрдирд╛рдирд╛ - рдорд╛рд╕реНрдЯрд░ рдХреЛ рдкреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдирд┐рдпрдо рдЬреЛрдбрд╝рдХрд░ рдХреЛрдб рдмрд┐рд▓реНрдб рдЯрд╛рд╕реНрдХ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдкрд░ рд╕рдХреНрд░рд┐рдп рд╣реЛрддрд╛ рд╣реИ:
build job:
# snip
only:
- merge_request
рдЕрдм рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХрд╛рд░реНрдп рдХреЛ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдкрд░ рдЖрдЧ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдорд╛рд╕реНрдЯрд░ рдХреЛ рдХрдорд┐рдЯ рдЬреЛрдбрд╝реЗрдВ:
pack and deploy job:
# snip
only:
- merge_request
- master
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реАрдзрд╛ рд╣реИред
рдЖрдк рдХрд╛рд░реНрдп рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рдХреНрд╖реНрдп рдпрд╛ рд╕реНрд░реЛрдд рд╢рд╛рдЦрд╛ рдХреЗ рд╕рд╛рде рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛ:
rules:
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"
рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд, рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ rules
рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд only/except
.
рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рд╕реЗрд╡рд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛
рдПрдХ рдЯрд╛рд╕реНрдХ рдХреЗ рджреМрд░рд╛рди build job
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕реА рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдБ рд╣реЛрдВрдЧреА рдЬрд┐рдирдХрд╛ рдмрд╛рдж рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрд╛рд░реНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрде рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡реЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдХреБрдВрдЬреА рдореЗрдВ artifacts
build job:
# snip
artifacts:
paths:
- path/to/build/artifacts
- another/path
- MyCoolLib.*/bin/Release/*
рдкрде рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдХреЛрдИ рдХрд╛рд░реНрдп рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХрд╛ рдХрд╛рд░реНрдп рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ - рд╡реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд░реВрдЯ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЙрдиреНрд╣реАрдВ рд░рд╛рд╕реНрддреЛрдВ рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреЗ рдЬреЛ рдореВрд▓ рдХрд╛рд░реНрдп рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдереЗред рд╕рд╛рдЗрдЯ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдБ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рдЕрдм рдЬрдмрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рддреИрдпрд╛рд░ рд╣реИ (рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
рд╢рд╛рдпрдж, рдПрдХ рдмрд╛рд░ рдПрдХ рдЖрдХрд╛рд╢рдЧрдВрдЧрд╛ рдореЗрдВ, рдмрд╣реБрдд рджреВрд░, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ (рдиреЗрдЯ рдкрд░ рдЙрди рд╕рд╣рд┐рдд) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдПрдХ рджрд░реНрдж рдерд╛ред рдЕрдм рдЖрдк 3 рдЯреАрдореЛрдВ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
dotnet build
dotnet test
dotnet pack
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╣рдо рдХреБрдЫ рд╣рдж рддрдХ рдЖрдЬреНрдЮрд╛рдУрдВ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛ рджреЗрдВрдЧреЗред
- рд╣рдо рд░рд┐рд▓реАрдЬ рдмрд┐рд▓реНрдб рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдбрд┐рдмрдЧ рдмрд┐рд▓реНрдб рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
-c Release
- рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдХреЛрдб рдХрд╡рд░реЗрдЬ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдПрдХ рдХрд╡рд░реЗрдЬ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдкреИрдХреЗрдЬ рдХреЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
coverlet.msbuild
:dotnet add package coverlet.msbuild
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ - рдЯреЗрд╕реНрдЯ рд░рди рдХрдорд╛рдВрдб рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
/p:CollectCoverage=true
- рдХрд╡рд░реЗрдЬ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗрдВ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)
- рдкреИрдХреЗрдЬ рдХреЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
- рдХреЛрдб рдХреЛ рдирдЧреЗрдЯ рдкреИрдХреЗрдЬ рдореЗрдВ рдкреИрдХ рдХрд░рддреЗ рд╕рдордп, рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╕реЗрдЯ рдХрд░реЗрдВ:
-o .
рдХреЛрдб рдХрд╡рд░реЗрдЬ рдбреЗрдЯрд╛ рдПрдХрддреНрд░рд┐рдд рдХрд░рдирд╛
рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдХрд╡рд░рд▓реЗрдЯ рдкреНрд░рд┐рдВрдЯ рдХрдВрд╕реЛрд▓ рдкрд░ рдЖрдВрдХрдбрд╝реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ:
Calculating coverage result...
Generating report 'C:Usersxxxsourcereposmy-projectmyProject.testscoverage.json'
+-------------+--------+--------+--------+
| Module | Line | Branch | Method |
+-------------+--------+--------+--------+
| project 1 | 83,24% | 66,66% | 92,1% |
+-------------+--------+--------+--------+
| project 2 | 87,5% | 50% | 100% |
+-------------+--------+--------+--------+
| project 3 | 100% | 83,33% | 100% |
+-------------+--------+--------+--------+
+---------+--------+--------+--------+
| | Line | Branch | Method |
+---------+--------+--------+--------+
| Total | 84,27% | 65,76% | 92,94% |
+---------+--------+--------+--------+
| Average | 90,24% | 66,66% | 97,36% |
+---------+--------+--------+--------+
GitLab рдЖрдкрдХреЛ рдЖрдБрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рддрдм рдмреИрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ coverage
; рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдПрдХ рдХреИрдкреНрдЪрд░ рд╕рдореВрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХрд╛ рдорд╛рди рдмреИрдЬ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
test and cover job:
# snip
coverage: /|s*Totals*|s*(d+[,.]d+%)/
рдпрд╣рд╛рдВ рд╣рдо рдХреБрд▓ рд▓рд╛рдЗрди рдХрд╡рд░реЗрдЬ рд╡рд╛рд▓реА рдПрдХ рд▓рд╛рдЗрди рд╕реЗ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдкреИрдХреЗрдЬ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ
рджреЛрдиреЛрдВ рдХреНрд░рд┐рдпрд╛рдПрдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдЕрдВрддрд┐рдо рдЪрд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИрдВ - рдЪреВрдВрдХрд┐ рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВ, рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд╣рд▓реЗ, рдкреИрдХреЗрдЬ рд╕реНрд░реЛрдд рдкрд░ рдкреНрд░рдХрд╛рд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
-
рдпрджрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдирдЧреЗрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ (
nuget.config
), рдПрдХ рдирдпрд╛ рдмрдирд╛рдПрдБ:dotnet new nugetconfig
рдХрд┐рд╕рд▓рд┐рдП: рдЫрд╡рд┐ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдорд╢реАрди) рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддрдХ рд▓рд┐рдЦрдиреЗ рдХреА рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рди рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдирдпрд╛ рд╕реНрдерд╛рдиреАрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
- рдЖрдЗрдП рд╕реНрдерд╛рдиреАрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЬ рд╕реНрд░реЛрдд рдЬреЛрдбрд╝реЗрдВ:
nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
name
- рд╕реНрдерд╛рдиреАрдп рд╕реНрд░реЛрдд рдХрд╛ рдирд╛рдо, рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВurl
- "рдЦрд╛рддрд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛" рдЪрд░рдг рд╕реЗ рд╕реНрд░реЛрдд рдХрд╛ URL, рдкреГрд╖реНрда 6organization
- Azure DevOps рдореЗрдВ рд╕рдВрдЧрдарди рдХрд╛ рдирд╛рдоgitlab variable
- рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдирд╛рдо GitLab ("рдЦрд╛рддрд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛", рдкреГрд╖реНрда 11) рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдкреНрд░рд╛рд░реВрдк рдореЗрдВ$variableName
-StorePasswordInClearText
- рдкрд╣реБрдБрдЪ рдЕрд╕реНрд╡реАрдХреГрдд рддреНрд░реБрдЯрд┐ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдХ (рдореИрдВ рдЗрд╕ рд░реЗрдХ рдкрд░ рдХрджрдо рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рдирд╣реАрдВ рд╣реВрдВ )- рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬреЛрдбрд╝рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
-verbosity detailed
- рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрд░реЛрдд рдкрд░ рднреЗрдЬрдирд╛:
nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
- рд╣рдо рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╕рднреА рдкреИрдХреЗрдЬ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП
*.nupkg
. name
- рдКрдкрд░ рдХреЗ рдЪрд░рдг рд╕реЗредkey
- рдХреЛрдИ рд░реЗрдЦрд╛ред Azure DevOps рдореЗрдВ, рдлрд╝реАрдб рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рд╣рдореЗрд╢рд╛ рд░реЗрдЦрд╛ рд╣реЛрддрд╛ рд╣реИaz
.-skipduplicate
- рдЗрд╕ рдХреБрдВрдЬреА рдХреЗ рдмрд┐рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдкреИрдХреЗрдЬ рднреЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рд╕реНрд░реЛрдд рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдПрдЧрд╛409 Conflict
; рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде, рднреЗрдЬрдирд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рд╣рдо рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╕рднреА рдкреИрдХреЗрдЬ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП
рдЕрдм рдЪрд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ:
- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ, рдорд╛рд╕реНрдЯрд░ рдмреНрд░рд╛рдВрдЪ рдореЗрдВ, рд╣рдо docfx рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░реВрдЯ рд╕реЗ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ
docfx init
рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рдореБрдЦ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВред рдиреНрдпреВрдирддрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрдЕрдк рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдгрдпрд╣рд╛рдВ .- рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╕рдордп, рдЖрдЙрдЯрдкреБрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ
..public
- GitLab рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдлрд╝реЛрд▓реНрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд░реВрдЯ рдореЗрдВ рдкреЗрдЬ рдХреЗ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛ - рдкрде рдореЗрдВ рдКрдкрд░ рдХреЗ рд╕реНрддрд░ рдкрд░ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдЬреЛрдбрд╝реЗрдВред
- рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╕рдордп, рдЖрдЙрдЯрдкреБрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ
- рдЖрдЗрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ GitLab рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред
- рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХреЛрдИ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝реЗрдВ
pages
(GitLab рдкреЗрдЬреЛрдВ рдореЗрдВ рд╕рд╛рдЗрдЯ рдкреНрд░рдХрд╛рд╢рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╢рдмреНрдж):- рд▓рд┐рдЦреА рд╣реБрдИ рдХрд╣рд╛рдиреА:
nuget install docfx.console -version 2.51.0
- рдбреЙрдХрдПрдлрдПрдХреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ; рд╕рдВрд╕реНрдХрд░рдг рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрдирд╛ рдкрде рд╕рд╣реА рд╣реИрдВред.docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json
- рджрд╕реНрддрд╛рд╡реЗрдЬ рдПрдХрддреНрд░рд┐рдд рдХрд░рдирд╛
- рдиреЛрдб рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдБ:
- рд▓рд┐рдЦреА рд╣реБрдИ рдХрд╣рд╛рдиреА:
pages:
# snip
artifacts:
paths:
- public
Docfx рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░
рдкрд╣рд▓реЗ, рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рддреЗ рд╕рдордп, рдореИрдВрдиреЗ рд╕рдорд╛рдзрд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╕реНрд░реЛрдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рднреА рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдорд╛рди рдХреЛ рдиреЛрдб рдкрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ metadata.src
:
{
"metadata": [
{
"src": [
{
"src": "../",
"files": [
"**/*.csproj"
],
"exclude":[
"*.tests*/**"
]
}
],
// --- snip ---
},
// --- snip ---
],
// --- snip ---
}
metadata.src.src: "../"
- рд╣рдо рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдПрдХ рд╕реНрддрд░ рдКрдкрд░ рдЬрд╛рддреЗ рд╣реИрдВdocfx.json
, рдХреНрдпреЛрдВрдХрд┐ рдкреИрдЯрд░реНрди рдореЗрдВ, рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдЯреНрд░реА рдХреЛ рдЦреЛрдЬрдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИредmetadata.src.files: ["**/*.csproj"]
- рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдкреИрдЯрд░реНрди, рд╣рдо рд╕рднреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рд╕реЗ рд╕рднреА C # рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВредmetadata.src.exclude: ["*.tests*/**"]
- рд╡реИрд╢реНрд╡рд┐рдХ рдкреИрдЯрд░реНрди, рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╕рдм рдХреБрдЫ рдмрд╛рд╣рд░ рдХрд░реЗрдВ.tests
рдирд╛рдо рдореЗрдВ
рдЙрдк-рдпреЛрдЧ
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреЗрд╡рд▓ рдЖрдзреЗ рдШрдВрдЯреЗ рдФрд░ рдХреБрдЫ рдХрдк рдХреЙрдлреА рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдХрд┐ рдХреЛрдб рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЧрдП рд╣реИрдВ, рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдВ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЖрдВрдЦреЛрдВ рдХреЛ рд╕реБрдВрджрд░ рдмрдирд╛рдПрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд▓рдп рдЕрдиреБрд░реЛрдз рдФрд░ рдорд╛рд╕реНрдЯрд░ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд░реАрдбрдореЗ рдореЗрдВ рдмреИрдЬред
рдЕрдВрддрд┐рдо .gitlab-ci.yml
image: mcr.microsoft.com/dotnet/core/sdk:3.1
before_script:
- $PSVersionTable.PSVersion
- dotnet --version
- nuget help | select-string Version
stages:
- build
- test
- deploy
build job:
stage: build
script:
- dotnet build -c Release
tags:
- windows
only:
- merge_requests
- master
artifacts:
paths:
- your/path/to/binaries
test and cover job:
stage: test
tags:
- windows
script:
- dotnet test -c Release /p:CollectCoverage=true
coverage: /|s*Totals*|s*(d+[,.]d+%)/
only:
- merge_requests
- master
pack and deploy job:
stage: deploy
tags:
- windows
script:
- dotnet pack -c Release -o .
- dotnet new nugetconfig
- nuget sources add -name feedName -source https://pkgs.dev.azure.com/your-organization/_packaging/your-feed/nuget/v3/index.json -username your-organization -password $nugetFeedToken -configfile nuget.config -StorePasswordInClearText
- nuget push -source feedName -skipduplicate -apikey az *.nupkg
only:
- master
pages:
tags:
- windows
stage: deploy
script:
- nuget install docfx.console -version 2.51.0
- $env:path = "$env:path;$($(get-location).Path)"
- .docfx.console.2.51.0toolsdocfx.exe .docfxdocfx.json
artifacts:
paths:
- public
only:
- master
рдмреИрдЬ рдХреА рдмрд╛рдд рд╣реЛ рд░рд╣реА рд╣реИ
рдЙрдиреНрд╣реАрдВ рдХреА рд╡рдЬрд╣ рд╕реЗ рдЖрдЦрд┐рд░ рд╕рдм рдХреБрдЫ рд╢реБрд░реВ рд╣реБрдЖ!
Gtntral рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмреНрд▓реЙрдХ рдореЗрдВ CI/CD рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ GitLab рдореЗрдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реНрдерд┐рддрд┐ рдФрд░ рдХреЛрдб рдХрд╡рд░реЗрдЬ рд╡рд╛рд▓реЗ рдмреИрдЬ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
рдореИрдВрдиреЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдмреИрдЬ рдмрдирд╛рдпрд╛ рд╣реИ
![╨Я╤А╨╕╨╝╨╡╤А ╤Б Shields.io](https://img.shields.io/badge/custom-badge-blue)
Azure DevOps рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдБ рдЖрдкрдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдмреИрдЬ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗрддреА рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Azure DevOps рд╕рд╛рдЗрдЯ рдкрд░ рд╕реНрд░реЛрдд рдореЗрдВ, рдЖрдкрдХреЛ рдЪрдпрдирд┐рдд рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдПрдЯ рдмреИрдЬ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
рд╕реБрдВрджрд░рддрд╛ рдЬреЛрдбрд╝рдирд╛
рд╕рд╛рдорд╛рдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдирд╛
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд┐рдЦрддреЗ рд╕рдордп рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ YAML рдХреА рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд┐рд▓реА - рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд╛рд░реНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрди рд╕рднреА рдХреЛ рдЯреИрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ windows
рдзрд╛рд╡рдХ рдкрд░, рдФрд░ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдорд╛рд╕реНрдЯрд░/рдирд┐рд░реНрдорд┐рдд (рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдЫреЛрдбрд╝рдХрд░) рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рдЙрд╕ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
.common_tags: &common_tags
tags:
- windows
.common_only: &common_only
only:
- merge_requests
- master
рдФрд░ рдЕрдм рд╣рдо рдХрд╛рд░реНрдп рд╡рд┐рд╡рд░рдг рдореЗрдВ рдкрд╣рд▓реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рдЯреБрдХрдбрд╝реЗ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
build job:
<<: *common_tags
<<: *common_only
рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ рдХреЗ рдирд╛рдо рдбреЙрдЯ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЗрд╕реЗ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рди рд╕рдордЭрд╛ рдЬрд╛рдПред
рдкреИрдХреЗрдЬ рд╡рд░реНрдЬрдирд┐рдВрдЧ
рдкреИрдХреЗрдЬ рдмрдирд╛рддреЗ рд╕рдордп, рдХрдВрдкрд╛рдЗрд▓рд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реНрд╡рд┐рдЪ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ; рдЬрдм рдЗрд╕реЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдиреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрдирд╛рдП рдЬрд╛ рд░рд╣реЗ рдкреИрдХреЗрдЬ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдЗрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдЗрд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЖрдЗрдП рдПрдХ рдФрд░ рд╡рд┐рд╢рд▓рд┐рд╕реНрдЯ рдЬреЛрдбрд╝реЗрдВ - рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдорд╛рдЗрдирд░ рджреЛ рдирдВрдмрд░реЛрдВ рдХреЛ рд╡рд░реНрд╖ рдФрд░ рдкреИрдХреЗрдЬ рдХреА рдирд┐рд░реНрдорд╛рдг рддрд┐рдерд┐ рд╣реЛрдиреЗ рджреЗрдВ, рдФрд░ рдкреВрд░реНрд╡-рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝реЗрдВред рдмреЗрд╢рдХ, рдЖрдк рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рдмрдорд┐рд╢рди рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдВрджрд░реНрдн рд╕реЗ рдкреИрдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЗрдП рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдЕрдЧрд░ рдкреНрд░рддрд┐рдмрджреНрдз рд╕рдВрджреЗрд╢ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ release (v./ver./version) <version number> (rev./revision <revision>)?
, рдлрд┐рд░ рд╣рдо рдЗрд╕ рд▓рд╛рдЗрди рд╕реЗ рдкреИрдХреЗрдЬ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓реЗрдВрдЧреЗ, рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рддрд┐рдерд┐ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдХрдорд╛рдВрдб рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗ dotnet pack
. рд▓рд╛рдЗрди рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ, рд╣рдо рдмрд╕ рдкреИрдХреЗрдЬ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдирд┐рдореНрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИ:
# ╤А╨╡╨│╤Г╨╗╤П╤А╨╜╨╛╨╡ ╨▓╤Л╤А╨░╨╢╨╡╨╜╨╕╨╡ ╨┤╨╗╤П ╨┐╨╛╨╕╤Б╨║╨░ ╤Б╤В╤А╨╛╨║╨╕ ╤Б ╨▓╨╡╤А╤Б╨╕╨╡╨╣
$rx = "releases+(v.?|ver.?|version)s*(?<maj>d+)(?<min>.d+)?(?<rel>.d+)?s*((rev.?|revision)?s+(?<rev>[a-zA-Z0-9-_]+))?"
# ╨╕╤Й╨╡╨╝ ╤Б╤В╤А╨╛╨║╤Г ╨▓ ╤Б╨╛╨╛╨▒╤Й╨╡╨╜╨╕╨╕ ╨║╨╛╨╝╨╝╨╕╤В╨░, ╨┐╨╡╤А╨╡╨┤╨░╨▓╨░╨╡╨╝╨╛╨╝ ╨▓ ╨╛╨┤╨╜╨╛╨╣ ╨╕╨╖ ╨┐╤А╨╡╨┤╨╛╨┐╤А╨╡╨┤╨╡╨╗╤П╨╡╨╝╤Л╤Е GitLab'╨╛╨╝ ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╤Л╤Е
$found = $env:CI_COMMIT_MESSAGE -match $rx
# ╤Б╨╛╨▓╨┐╨░╨┤╨╡╨╜╨╕╨╣ ╨╜╨╡╤В - ╨▓╤Л╤Е╨╛╨┤╨╕╨╝
if (!$found) { Write-Output "no release info found, aborting"; exit }
# ╨╕╨╖╨▓╨╗╨╡╨║╨░╨╡╨╝ ╨╝╨░╨╢╨╛╤А╨╜╤Г╤О ╨╕ ╨╝╨╕╨╜╨╛╤А╨╜╤Г╤О ╨▓╨╡╤А╤Б╨╕╨╕
$maj = $matches['maj']
$min = $matches['min']
# ╨╡╤Б╨╗╨╕ ╤Б╤В╤А╨╛╨║╨░ ╤Б╨╛╨┤╨╡╤А╨╢╨╕╤В ╨╜╨╛╨╝╨╡╤А ╤А╨╡╨╗╨╕╨╖╨░ - ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╨╝ ╨╡╨│╨╛, ╨╕╨╜╨░╤З╨╡ - ╤В╨╡╨║╤Г╤Й╨╕╨╣ ╨│╨╛╨┤
if ($matches.ContainsKey('rel')) { $rel = $matches['rel'] } else { $rel = ".$(get-date -format "yyyy")" }
# ╨▓ ╨║╨░╤З╨╡╤Б╤В╨▓╨╡ ╨╜╨╛╨╝╨╡╤А╨░ ╤Б╨▒╨╛╤А╨║╨╕ - ╤В╨╡╨║╤Г╤Й╨╕╨╡ ╨╝╨╡╤Б╤П╤Ж ╨╕ ╨┤╨╡╨╜╤М
$bld = $(get-date -format "MMdd")
# ╨╡╤Б╨╗╨╕ ╨╡╤Б╤В╤М ╨┤╨░╨╜╨╜╤Л╨╡ ╨┐╨╛ ╨┐╤А╨╡╤А╨╡╨╗╨╕╨╖╨╜╨╛╨╣ ╨▓╨╡╤А╤Б╨╕╨╕ - ╨▓╨║╨╗╤О╤З╨░╨╡╨╝ ╨╕╤Е ╨▓ ╨▓╨╡╤А╤Б╨╕╤О
if ($matches.ContainsKey('rev')) { $rev = "-$($matches['rev'])" } else { $rev = '' }
# ╤Б╨╛╨▒╨╕╤А╨░╨╡╨╝ ╨╡╨┤╨╕╨╜╤Г╤О ╤Б╤В╤А╨╛╨║╤Г ╨▓╨╡╤А╤Б╨╕╨╕
$version = "$maj$min$rel.$bld$rev"
# ╤Б╨╛╨▒╨╕╤А╨░╨╡╨╝ ╨┐╨░╨║╨╡╤В╤Л
dotnet pack -c Release -o . /p:Version=$version
рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝рдирд╛ pack and deploy job
рдФрд░ рдкреНрд░рддрд┐рдмрджреНрдз рд╕рдВрджреЗрд╢ рдореЗрдВ рджрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреИрдХреЗрдЬреЛрдВ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рд╕рдЦреНрддреА рд╕реЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВред
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ рдЖрдзрд╛ рдШрдВрдЯрд╛ рдпрд╛ рдПрдХ рдШрдВрдЯрд╛ рдмрд┐рддрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╕реНрдерд╛рдиреАрдп рдкреЙрд╡рд░рд╢реЗрд▓ рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░, рд╕рдВрднрд╡рддрдГ, рдХреБрдЫ рдЕрд╕рдлрд▓ рд▓реЙрдиреНрдЪ, рд╣рдореЗрдВ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд┐рд▓рд╛ред
рдмреЗрд╢рдХ, GitLab CI / CD рдЗрд╕ рдЧрд╛рдЗрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЬрд┐рддрдирд╛ рд▓рдЧрддрд╛ рд╣реИ рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рдФрд░ рдмрд╣реБрдореБрдЦреА рд╣реИ -
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдмрдирд╛рддрд╛ рд╣реИ, рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИ, рддреИрдирд╛рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ
рдЕрдм рдпреЛрдЬрдирд╛ рдПрдЬрд╝реНрдпреЛрд░ рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреБрд▓реБрдореА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рдХреНрд╖реНрдп рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕реНрд░реЛрдд: www.habr.com