рд╡рд╛ рдЖрд░рд╛рдо рдХреЛрдбрд┐рдЩрдХреЛ рдПрдХ рд╕рд╛рдБрдЭрдорд╛ рддрдкрд╛рдИрдВрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╕реБрдиреНрджрд░ рдмреНрдпрд╛рдЬрд╣рд░реВ рдХрд╕рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ
рд╕рд╛рдпрдж, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╕рдБрдЧ рдХрдореНрддрд┐рдорд╛ рдПрдЙрдЯрд╛ рдкрд╛рд▓реНрддреБ рдЬрдирд╛рд╡рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рднрдПрдХреЛ рдХреБрдиреИ рди рдХреБрдиреИ рдмреЗрд▓рд╛ рд╕реНрдерд┐рддрд┐, рдХреЛрдб рдХрднрд░реЗрдЬ, рдкреНрдпрд╛рдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рдиреНрдпреБрдЧреЗрдЯрдорд╛ рднрдПрдХрд╛ рд╕реБрдиреНрджрд░ рдмреНрдпрд╛рдЬрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдЦреБрдЬрд▓реА рдЫ... рд░ рдпрд╣реА рдЦреБрдЬрд▓реАрд▓реЗ рдорд▓рд╛рдИ рдпреЛ рд▓реЗрдЦ рд▓реЗрдЦреНрди рдкреНрд░реЗрд░рд┐рдд рдЧрд░реНтАНрдпреЛред рдпрд╕рд▓рд╛рдИ рд▓реЗрдЦреНрдиреЗ рддрдпрд╛рд░реАрдХреЛ рдХреНрд░рдордорд╛, рдореИрд▓реЗ рдореЗрд░реЛ рдПрдЙрдЯрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдпреЛ рд╕реБрдиреНрджрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реЗрдВ:
рдпрд╕ рд▓реЗрдЦрд▓реЗ GitLab рдорд╛ .Net Core рдХрдХреНрд╖рд╛рдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рд░рдиреНрддрд░ рдПрдХреАрдХрд░рдг рд░ рдбреЗрд▓рд┐рднрд░реАрдХреЛ рдЖрдзрд╛рд░рднреВрдд рд╕реЗрдЯрдЕрдк, GitLab рдкреГрд╖реНрдард╣рд░реВрдорд╛ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рдкреНрд░рдХрд╛рд╢рди рдЧрд░реНрдиреЗ рд░ Azure DevOps рдорд╛ рдирд┐рдЬреА рдлрд┐рдбрдорд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░рд┐рдПрдХрд╛ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рдкрдард╛рдЙрдиреЗ рдЖрдзрд╛рд░рднреВрдд рд╕реЗрдЯрдЕрдкрд▓рд╛рдИ рд╕рдореЗрдЯреНрдиреЗрдЫред
рд╡рд┐рд╕реНрддрд╛рд░рдХреЛ рд╕рд╛рде VS рдХреЛрдб рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдгрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ
рдЫреЛрдЯреЛ рдкрд░рд┐рдЪрдп
рд╕реАрдбреА рд╣реЛ рдЬрдм рддрдкрд╛рдЗрдБ рднрд░реНрдЦрд░реИ рдзрдХреЗрд▓реНрдиреБ рднрдпреЛ, рддрд░ рдЧреНрд░рд╛рд╣рдХ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕рдмреИ рдЧреБрдорд╛рдЗрд╕рдХреЗрдХреЛ рдЫ?
CI/CD рднрдиреЗрдХреЛ рдХреЗ рд╣реЛ рд░ рдпреЛ рдХрд┐рди рдЪрд╛рд╣рд┐рдиреНрдЫ? рддрдкрд╛рдИ рд╕рдЬрд┐рд▓реИ рдЧреБрдЧрд▓ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред GitLab рдорд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд╣рд░реВ рд╕реЗрдЯрдЕрдкрдорд╛ рдкреВрд░рд╛ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБрд╣реЛрд╕реН
- рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд▓реЗ рднрдгреНрдбрд╛рд░рдорд╛ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдкрдард╛рдЙрдБрджрдЫ, рд╡реЗрдмрд╕рд╛рдЗрдЯ рдорд╛рд░реНрдлрдд рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ, рд╡рд╛ рдХреБрдиреИ рдЕрдиреНрдп рддрд░рд┐рдХрд╛рдорд╛ рд╕реНрдкрд╖реНрдЯ рд╡рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реБрд░реВ рдЧрд░реНрджрдЫ,
- рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдмрд╛рдЯ, рд╕рдмреИ рдХрд╛рд░реНрдпрд╣рд░реВ рдЪрдпрди рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН рдЬрд╕рдХрд╛ рд╕рд░реНрддрд╣рд░реВрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рджрд┐рдЗрдПрдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛ рд╕реБрд░реВ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ,
- рдХрд╛рд░реНрдпрд╣рд░реВ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЪрд░рдгрд╣рд░реВ рдЕрдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реБрдиреНрдЫрдиреН,
- рдЪрд░рдгрд╣рд░реВ рдмрд╛рд░реАрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреНрдЫ - рдЕрд░реНрдерд╛рддреН рд╕рдорд╛рдирд╛рдиреНрддрд░ рдпрд╕ рдЪрд░рдгрдХрд╛ рд╕рдмреИ рдХрд╛рд░реНрдпрд╣рд░реВ рдкреВрд░рд╛ рднрдПрдХрд╛ рдЫрдиреН,
- рдпрджрд┐ рдПрдХ рдЪрд░рдг рдЕрд╕рдлрд▓ рднрдпреЛ (рдЕрд░реНрдерд╛рддреН рдЪрд░рдгрдХреЛ рдХрдореНрддрд┐рдорд╛ рдПрдЙрдЯрд╛ рдХрд╛рд░реНрдп рдЕрд╕рдлрд▓ рднрдпреЛ) - рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд░реЛрдХрд┐рдиреНрдЫ (рдкреНрд░рд╛рдпрдЬрд╕реЛ рд╕рдзреИрдВ),
- рдпрджрд┐ рд╕рдмреИ рдЪрд░рдгрд╣рд░реВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рднрдПрдорд╛, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕рдлрд▓ рдорд╛рдирд┐рдиреНрдЫред
рдпрд╕рд░реА рд╣рд╛рдореАрд╕рдБрдЧ рдЫ:
- рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд░рдгрд╣рд░реВрдорд╛ рд╕рдВрдЧрдард┐рдд рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рдПрдХ рд╕реЗрдЯ рд╣реЛ рдЬрд╕рдорд╛ рддрдкрд╛рдЗрдБ рдЬрдореНрдорд╛ рдЧрд░реНрди, рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди, рдкреНрдпрд╛рдХреЗрдЬ рдХреЛрдб, рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛рдорд╛ рд╕рдорд╛рдкреНрдд рднрдПрдХреЛ рдПрд╕реЗрдореНрдмрд▓реА рдбрд┐рдкреНрд▓реЛрдп рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЖрджрд┐ред
- рдЪрд░рдг (рдЪрд░рдг) тАФ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕рдВрдЧрдардирдХреЛ рдПрдХрд╛рдЗ, 1+ рдХрд╛рд░реНрдп рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ,
- рдХрд╛рд░реНрдп (рдХрд╛рдо) рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ рдПрдХрд╛рдЗ рд╣реЛред рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдЖрд╡рд╢реНрдпрдХ), рд╕реБрд░реБрд╡рд╛рдд рд╕рд░реНрддрд╣рд░реВ, рдкреНрд░рдХрд╛рд╢рди/рдХреНрдпрд╛рд╕рд┐рдЩ рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд░ рдЕрдзрд┐рдХ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред
рддрджрдиреБрд╕рд╛рд░, CI/CD рд╕реЗрдЯрдЕрдк рдЧрд░реНрджрд╛ рдХрд╛рд░реНрдпрд╣рд░реВ рд╕рдВрдпреЛрдЬрди, рдкрд░реАрдХреНрд╖рдг рд░ рдкреНрд░рдХрд╛рд╢рди рдХреЛрдб рд░ рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕реЗрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рддрд▓ рдЖрдЙрдБрдЫред
рд╣рд╛рдореАрд▓реЗ рд╕реБрд░реБ рдЧрд░реНрдиреБ рдЕрдШрд┐: рдХрд┐рди?
- рдХрд┐рди GitLab?
рдХрд┐рдирднрдиреЗ рдЬрдм рдШрд░рдкрд╛рд▓реБрд╡рд╛ рдЬрдирд╛рд╡рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рдЬреА рднрдгреНрдбрд╛рд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рднрдпреЛ, рддрд┐рдиреАрд╣рд░реВ GitHub рдорд╛ рднреБрдХреНрддрд╛рдиреА рдЧрд░рд┐рдпреЛ, рд░ рдо рд▓реЛрднреА рдерд┐рдПрдБред рднрдгреНрдбрд╛рд░рд╣рд░реВ рдирд┐: рд╢реБрд▓реНрдХ рднрдПрдХрд╛ рдЫрдиреН, рддрд░ рдЕрд╣рд┐рд▓реЗрдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рдореЗрд░реЛ рд▓рд╛рдЧрд┐ GitHub рдорд╛ рдЬрд╛рдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рд░рдг рд╣реЛрдЗрдиред
- рдХрд┐рди Azure DevOps рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд╣рд░реВ рдЫреИрдирдиреН?
рдХрд┐рдирднрдиреЗ рд╕реЗрдЯрдЕрдк рд╕рд░рд▓ рдЫ - рддрдкрд╛рдИрд▓рд╛рдИ рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрди рдЬреНрдЮрд╛рди рдкрдирд┐ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрдиред рдмрд╛рд╣реНрдп git рдкреНрд░рджрд╛рдпрдХрд╣рд░реВрд╕рдБрдЧ рдПрдХреАрдХрд░рдг - рдХреЗрд╣рд┐ рдХреНрд▓рд┐рдХрд╣рд░реВрдорд╛, рднрдгреНрдбрд╛рд░рдорд╛ рдХрдорд┐рдЯрд╣рд░реВ рдкрдард╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ SSH рдХреБрдЮреНрдЬреАрд╣рд░реВрдХреЛ рдЖрдпрд╛рдд - рдкрдирд┐, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрд┐рдирд╛ рдкрдирд┐ рд╕рдЬрд┐рд▓реИ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫред
рд╕реБрд░реВрд╡рд╛рдд рд╕реНрдерд┐рддрд┐: рддрдкрд╛рдИрд╕рдБрдЧ рдХреЗ рдЫ рд░ рддрдкрд╛рдИ рдХреЗ рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ
рд╣рд╛рдореА рд╕рдВрдЧ рдЫ:
- GitLab рдорд╛ рднрдгреНрдбрд╛рд░ред
рд╣рд╛рдореА рдЪрд╛рд╣рдиреНрдЫреМрдВ:
- рдкреНрд░рддреНрдпреЗрдХ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдзрдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрд╕реЗрдВрдмрд▓реА рд░ рдкрд░реАрдХреНрд╖рдг,
- рдкреНрд░рддреНрдпреЗрдХ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдзрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ рд░ рдорд╛рд╕реНрдЯрд░рдорд╛ рдкреБрд╢ рдЧрд░реНрджреИ, рдХрдорд┐рдЯ рд╕рдиреНрджреЗрд╢рдорд╛ рдирд┐рд╢реНрдЪрд┐рдд рд▓рд╛рдЗрди рднрдПрдорд╛,
- Azure DevOps рдорд╛ рдирд┐рдЬреА рдлрд┐рдбрдорд╛ рд╕рдЩреНрдХрд▓рди рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рдкрдард╛рдЙрдБрджреИ,
- GitLab рдкреГрд╖реНрдард╣рд░реВрдорд╛ рдХрд╛рдЧрдЬрд╛рдд рд░ рдкреНрд░рдХрд╛рд╢рдирдХреЛ рд╕рдВрдпреЛрдЬрди,
- рдмреНрдпрд╛рдЬрд╣рд░реВ! 11
рд╡рд░реНрдгрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рдирд┐рдореНрди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЛрдбреЗрд▓рдорд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдкрдорд╛ рдлрд┐рдЯ рд╣реБрдиреНрдЫрдиреН:
- рдЪрд░рдг 1 - рд╡рд┐рдзрд╛рдирд╕рднрд╛
- рд╣рд╛рдореА рдХреЛрдб рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдЫреМрдВ, рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓рд╣рд░реВ рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдЫреМрдВ
- рдЪрд░рдг 2 - рдкрд░реАрдХреНрд╖рдг
- рд╣рд╛рдореА рдирд┐рд░реНрдорд╛рдг рдЪрд░рдгрдмрд╛рдЯ рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВ, рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрдЫреМрдВ, рдХреЛрдб рдХрднрд░реЗрдЬ рдбреЗрдЯрд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдЫреМрдВ
- рдЪрд░рдг 3 - рдкрдард╛рдЙрдБрджреИ
- рдЯрд╛рд╕реНрдХ рез - рдиреБрдЧреЗрдЯ рдкреНрдпрд╛рдХреЗрдЬ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ Azure DevOps рдорд╛ рдкрдард╛рдЙрдиреБрд╣реЛрд╕реН
- рдХрд╛рд░реНрдп реи - рд╣рд╛рдореА рд╕реНрд░реЛрдд рдХреЛрдбрдорд╛ xmldoc рдмрд╛рдЯ рд╕рд╛рдЗрдЯрд▓рд╛рдИ рдЬрдореНрдорд╛ рдЧрд░реНрдЫреМрдВ рд░ GitLab рдкреГрд╖реНрдард╣рд░реВрдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдЫреМрдВред
рд╕реБрд░реБ рдЧрд░реМрдВ!
рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдПрд╕реЗрдореНрдмрд▓ рдЧрд░реНрджреИ
рдЦрд╛рддрд╛рд╣рд░реВ рддрдпрд╛рд░ рдЧрд░реНрджреИ
-
рдорд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН
рдорд╛рдЗрдХреНрд░реЛрд╕рдлреНрдЯ рдЯреНрдпрд╛рдмрдиреЗрддреГрддреНрд╡ -
рдЬрд╛рдК рддреНрдпрд╣рд╛рдБ
Azure DevOps -
рдирдпрд╛рдБ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН
- рдирд╛рдо - рдХреБрдиреИ рдкрдирд┐
- рджреГрд╢реНрдпрддрд╛ - рдХреБрдиреИ рдкрдирд┐
-
рдЬрдм рддрдкрд╛рдЗрдБ рд╕рд┐рд░реНрдЬрдирд╛ рдмрдЯрдирдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рд╣реБрдиреЗрдЫ рд░ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдпрд╕рдХреЛ рдкреГрд╖реНрдардорд╛ рд▓рдЧрд┐рдиреЗрдЫред рдпрд╕ рдкреГрд╖реНрдардорд╛ рддрдкрд╛рдЗрдБ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рдЧрдПрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ (рдмрд╛рдпрд╛рдБрдорд╛ рд╕реВрдЪреАрдорд╛ рддрд▓реНрд▓реЛ рд▓рд┐рдЩреНрдХ -> рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди -> Azure DevOps рд╕реЗрд╡рд╛ рдмреНрд▓рдХ)
-
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
ред WTF?
рд╕рдмреИ рдХреБрд░рд╛ рддрд╛рд░реНрдХрд┐рдХ рдЫ - рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рдзрд╛рд╡рдХрд╣рд░реВ (рдХрд╛рд░реНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд░ 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
GitLab CI/CD рдорд╛
рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВрдХреЛ рд╕реЗрдЯ рдпрд╛рдж рдЧрд░реМрдВ - рдорд░реНрдЬ рдЕрдиреБрд░реЛрдзрд╣рд░реВ, рдкреНрдпрд╛рдХреЗрдЬрд┐рдЩ рд░ 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/*
рдкрдерд╣рд░реВрд▓реЗ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдбрд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ, рдЬрд╕рд▓реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрдорд╛ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╕реЗрдЯ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдБрджрдЫред
рдпрджрд┐ рдХрд╛рд░реНрдпрд▓реЗ рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрдЫрд┐рдХреЛ рдХрд╛рд░реНрдпрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреЗрдЫ - рддрд┐рдиреАрд╣рд░реВ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд░реВрдЯрдХреЛ рд╕рд╛рдкреЗрдХреНрд╖ рдЙрд╣реА рдорд╛рд░реНрдЧрд╣рд░реВрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рд╣реБрдиреЗрдЫрдиреН рдЬрд╕рдорд╛ рддрд┐рдиреАрд╣рд░реВ рдореВрд▓ рдХрд╛рд░реНрдпрдмрд╛рдЯ рд╕рдЩреНрдХрд▓рди рдЧрд░рд┐рдПрдХрд╛ рдерд┐рдПред рдХрд▓рд╛рдХреГрддрд┐рд╣рд░реВ рд╡реЗрдмрд╕рд╛рдЗрдЯрдорд╛ рдбрд╛рдЙрдирд▓реЛрдбрдХреЛ рд▓рд╛рдЧрд┐ рдкрдирд┐ рдЙрдкрд▓рдмреНрдз рдЫрдиреНред
рдЕрдм рдЬрдм рд╣рд╛рдореАрд╕рдБрдЧ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлреНрд░реЗрдорд╡рд░реНрдХ рддрдпрд╛рд░ рдЫ (рд░ рдкреНрд░рдорд╛рдгрд┐рдд), рд╣рд╛рдореА рд╡рд╛рд╕реНрддрд╡рдорд╛ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рд▓реЗрдЦреНрди рдЬрд╛рди рд╕рдХреНрдЫреМрдВред
рд╣рд╛рдореА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЗрдЦреНрдЫреМрдВ
рд╕рд╛рдпрдж, рдПрдХ рдкрдЯрдХ, рдПрдХ рдЧреНрдпрд╛рд▓реЗрдХреНрд╕реАрдорд╛ рдЯрд╛рдврд╛, рдЯрд╛рдврд╛, рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрдирдмрд╛рдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ (.net рд╕рд╣рд┐рдд) рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреБ рдкреАрдбрд╛ рдерд┐рдпреЛред рдЕрдм рддрдкрд╛рдЗрдБ 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 рдорд╛ рдердкрд┐рдПрдХреЛ рдкрд╣реБрдБрдЪ рдЯреЛрдХрдирдХреЛ рд╕рд╛рде рдЪрд▓рдХреЛ рдирд╛рдо (тАЬрдЦрд╛рддрд╛рд╣рд░реВ рддрдпрд╛рд░ рдЧрд░реНрджреИтАЭ, p. 11)ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдкрдорд╛, рдврд╛рдБрдЪрд╛рдорд╛$variableName
-StorePasswordInClearText
- рдкрд╣реБрдБрдЪ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рддреНрд░реБрдЯрд┐рд▓рд╛рдИ рдмрд╛рдЗрдкрд╛рд╕ рдЧрд░реНрди рд╣реНрдпрд╛рдХ (рдо рдпреЛ рд░реЗрдХрдорд╛ рдкрд╛рдЗрд▓рд╛ рдЯреЗрдХреНрдиреЗ рдкрд╣рд┐рд▓реЛ рд╣реЛрдЗрди )- рддреНрд░реБрдЯрд┐рд╣рд░реВрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдпреЛ рдердкреНрди рдЙрдкрдпреЛрдЧреА рд╣реБрди рд╕рдХреНрдЫ
-verbosity detailed
- рд╣рд╛рдореА рд╕реНрд░реЛрддрдорд╛ рдкреНрдпрд╛рдХреЗрдЬ рдкрдард╛рдЙрдБрдЫреМрдВ:
nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
- рд╣рд╛рдореА рд╣рд╛рд▓рдХреЛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдмрд╛рдЯ рд╕рдмреИ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рдкрдард╛рдЙрдБрдЫреМрдВ, рддреНрдпрд╕реИрд▓реЗ
*.nupkg
. name
- рдорд╛рдерд┐рдХреЛ рдЪрд░рдгрдмрд╛рдЯредkey
- рдХреБрдиреИ рдкрдирд┐ рд░реЗрдЦрд╛ред Azure DevOps рдорд╛, Connect to feed рд╡рд┐рдиреНрдбреЛрдорд╛, рдЙрджрд╛рд╣рд░рдг рд░реЗрдЦрд╛ рд╕рдзреИрдВ рд╣реБрдиреНрдЫaz
.-skipduplicate
рдпрджрд┐ рддрдкрд╛рдЗрдБ рдпреЛ рдХреБрдЮреНрдЬреА рдмрд┐рдирд╛ рдкрд╣рд┐рд▓реЗ рдиреИ рдЕрд╡рд╕реНрдерд┐рдд рдкреНрдпрд╛рдХреЗрдЬ рдкрдард╛рдЙрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рд╕реНрд░реЛрддрд▓реЗ рддреНрд░реБрдЯрд┐ рдлрд░реНрдХрд╛рдЙрдиреЗрдЫ409 Conflict
; рдХреБрдЮреНрдЬреАрдХреЛ рд╕рд╛рде, рдкрдард╛рдЙрдиреЗ рдХрд╛рд░реНрдп рдЫреЛрдбрд┐рдиреЗрдЫред
- рд╣рд╛рдореА рд╣рд╛рд▓рдХреЛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдмрд╛рдЯ рд╕рдмреИ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рдкрдард╛рдЙрдБрдЫреМрдВ, рддреНрдпрд╕реИрд▓реЗ
рдЕрдм рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЛ рдирд┐рд░реНрдорд╛рдг рд╕реЗрдЯ рдЕрдк рдЧрд░реМрдВ:
- рд╕реБрд░реБ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рднрдгреНрдбрд╛рд░рдорд╛, рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛рдорд╛, рд╣рд╛рдореА docfx рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реБрд░реБ рдЧрд░реНрдЫреМрдВред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рд░реВрдЯрдмрд╛рдЯ рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫ
docfx init
рд░ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдкрдорд╛ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рдЬрдореНрдорд╛ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдореБрдЦреНрдп рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдиреНрдпреВрдирддрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрдЕрдкрдХреЛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдгрдпрд╣рд╛рдБ .- рд╕реЗрдЯрдЕрдк рдЧрд░реНрджрд╛, рдЖрдЙрдЯрдкреБрдЯ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ
..public
- рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ GitLab рд▓реЗ рдкреГрд╖реНрдард╣рд░реВрдХреЛ рд╕реНрд░реЛрддрдХреЛ рд░реВрдкрдорд╛ рднрдгреНрдбрд╛рд░рдХреЛ рдореВрд▓рдорд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдлреЛрд▓реНрдбрд░рдХреЛ рд╕рд╛рдордЧреНрд░реА рд▓рд┐рдиреНрдЫред рдХрд┐рдирднрдиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рднрдгреНрдбрд╛рд░рдорд╛ рдиреЗрд╕реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдлреЛрд▓реНрдбрд░рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рд╣реБрдиреЗрдЫ - рдорд╛рд░реНрдЧрдорд╛ рдЕрд░реНрдХреЛ рд╕реНрддрд░рдорд╛ рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрдиреБрд╣реЛрд╕реНред
- рд╕реЗрдЯрдЕрдк рдЧрд░реНрджрд╛, рдЖрдЙрдЯрдкреБрдЯ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ
- GitLab рдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдкреБрд╢ рдЧрд░реМрдВред
- рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рдХрд╛рд░реНрдп рдердкреНрдиреБрд╣реЛрд╕реН
pages
(GitLab рдкреГрд╖реНрдард╣рд░реВрдорд╛ рд╕рд╛рдЗрдЯ рдкреНрд░рдХрд╛рд╢рди рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЖрд░рдХреНрд╖рд┐рдд рд╢рдмреНрдж):- рд▓рд┐рдкрд┐:
nuget install docfx.console -version 2.51.0
- docfx рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН; рдкреНрдпрд╛рдХреЗрдЬ рд╕реНрдерд╛рдкрдирд╛ рдорд╛рд░реНрдЧрд╣рд░реВ рд╕рд╣реА рдЫрдиреН рднрдиреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫред.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
рд╢реАрд░реНрд╖рдХ рдорд╛
рдЙрдк рдХреВрд▓
рдпреЛ рд╕рд╛рдзрд╛рд░рдг рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдкрдорд╛ рдЖрдзрд╛ рдШрдгреНрдЯрд╛ рд░ рдХрдлреАрдХреЛ рдХрдкрдХреЛ рдПрдХ рдЬреЛрдбреАрдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкреНрд░рддреНрдпреЗрдХ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдзрдХреЛ рд╕рд╛рде рдЬрд╛рдБрдЪ рдЧрд░реНрди рд░ рдХреЛрдб рдХрдореНрдкрд╛рдЗрд▓ рднрдЗрд░рд╣реЗрдХреЛ рдЫ рд░ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЙрддреНрддреАрд░реНрдг рднрдЗрд░рд╣реЗрдХреЛ рдЫ рднрдиреЗрд░ рдорд╛рд╕реНрдЯрд░рд▓рд╛рдИ рдкрдард╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫред рдкреНрдпрд╛рдХреЗрдЬ, рдХрд╛рдЧрдЬрд╛рдд рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрджреИ рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ README рдорд╛ рд╕реБрдиреНрджрд░ рдмреНрдпрд╛рдЬрд╣рд░реВ рд╕рдВрдЧ рдЖрдБрдЦрд╛ рдЦреБрд╕реАред
рдЕрдиреНрддрд┐рдо .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
рдмреНрдпрд╛рдЬрдХреЛ рдХреБрд░рд╛ рдЧрд░реНрджреИ
рдЙрдиреАрд╣рд░реБрдХреИ рд▓рд╛рдЧрд┐ рд╕рдмреИ рд╕реБрд░реБ рднрдПрдХреЛ рд╣реЛ !
рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реНрдерд┐рддрд┐ рд░ рдХреЛрдб рдХрднрд░реЗрдЬ рднрдПрдХрд╛ рдмреНрдпрд╛рдЬрд╣рд░реВ GitLab рдорд╛ Gtntral рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмреНрд▓рдХрдорд╛ CI/CD рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рдЙрдкрд▓рдмреНрдз рдЫрдиреН:
рдореИрд▓реЗ рдкреНрд▓реЗрдЯрдлрд░реНрдордорд╛ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВрдХреЛ рд▓рд┐рдЩреНрдХрдХреЛ рд╕рд╛рде рдмреНрдпрд╛рдЬ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдВ
![╨Я╤А╨╕╨╝╨╡╤А ╤Б Shields.io](https://img.shields.io/badge/custom-badge-blue)
Azure DevOps Artifacts рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдХреЗрдд рдЧрд░реНрдиреЗ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдмреНрдпрд╛рдЬрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, 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 рдзреЗрд░реИ рдлрд░рд╛рдХрд┐рд▓реЛ рд░ рдмрд╣реБрдореБрдЦреА рдЫ рдЬреБрди рдпреЛ рдЧрд╛рдЗрдб рдкрдвреЗ рдкрдЫрд┐ рд▓рд╛рдЧреНрди рд╕рдХреНрдЫ -
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреБрд╣реЛрд╕реН, рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдбрд┐рдкреНрд▓реЛрдЗ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд░ рддрдкрд╛рдЗрдБрдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдЕрдм рдпреЛрдЬрдирд╛рд╣рд░реВ Azure рдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, Pulumi рдкреНрд░рдпреЛрдЧ рдЧрд░реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рд▓рдХреНрд╖рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреЗ рдЫрдиреН, рдЬреБрди рдЕрд░реНрдХреЛ рд▓реЗрдЦрдорд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░рд┐рдиреЗрдЫред
рд╕реНрд░реЛрдд: www.habr.com