Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰

Или ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ красиви Π·Π½Π°Ρ‡ΠΊΠΈ Π·Π° вашия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π·Π° Π΅Π΄Π½Π° Π²Π΅Ρ‡Π΅Ρ€ Π½Π° лСсно ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅

ВСроятно всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ домашСн ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π² Π΄Π°Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ·ΠΏΠΈΡ‚Π²Π° ΡΡŠΡ€Π±Π΅ΠΆ ΠΏΠΎ красиви Π·Π½Π°Ρ‡ΠΊΠΈ със статуси, ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π°, вСрсии Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π² nuget ... И Ρ‚ΠΎΠ·ΠΈ ΡΡŠΡ€Π±Π΅ΠΆ ΠΌΠ΅ Π½Π°ΠΊΠ°Ρ€Π° Π΄Π° напиша Ρ‚Π°Π·ΠΈ статия. ΠŸΠΎΠ΄Π³ΠΎΡ‚Π²ΡΠΉΠΊΠΈ сС Π΄Π° Π³ΠΎ напиша, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ… Ρ‚Π°Π·ΠΈ красота Π² Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΌΠΎΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ:

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰

Π’Π°Π·ΠΈ статия Ρ‰Π΅ Π²ΠΈ ΠΏΡ€Π΅Π²Π΅Π΄Π΅ ΠΏΡ€Π΅Π· основната настройка Π½Π° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция ΠΈ доставка Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ‚ класовС .Net Core Π² GitLab, ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π½Π° докумСнтация Π² GitLab Pages ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ към частна Смисия Π² Azure DevOps.

VS Code бСшС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΊΠ°Ρ‚ΠΎ срСда Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° с Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π Π°Π±ΠΎΡ‚Π΅Π½ процСс Π½Π° GitLab (Π·Π° Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»Π° с настройки Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ срСдата Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°).

ΠšΡ€Π°Ρ‚ΠΊΠΎ въвСдСниС

CD - Ρ‚ΠΎΠ²Π° Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ просто Π±ΡƒΡ‚Π½Π΅Ρ‚Π΅ ΠΈ всичко Π²Π΅Ρ‡Π΅ Π΅ ΠΏΠ°Π΄Π½Π°Π»ΠΎ Π²ΡŠΡ€Ρ…Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°?

Какво Π΅ CI / CD ΠΈ Π·Π°Ρ‰ΠΎ Π²ΠΈ трябва - ΠΌΠΎΠΆΠ΅Ρ‚Π΅ лСсно Π΄Π° Π³ΠΎ ΠΏΠΎΡ‚ΡŠΡ€ΡΠΈΡ‚Π΅ Π² Google. НамСрСтС пълна докумСнтация Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΈ Π² GitLab ΡΡŠΡ‰ΠΎ лСсно. Π’ΡƒΠΊ Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΈ, Π°ΠΊΠΎ Π΅ възмоТно, Π±Π΅Π· Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ Ρ‰Π΅ опиша процСса Π½Π° систСмата ΠΎΡ‚ ΠΏΡ‚ΠΈΡ‡ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄:

  • Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ към Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, създава заявка Π·Π° сливанС ΠΏΡ€Π΅Π· сайта, ΠΈΠ»ΠΈ ΠΏΠΎ някакъв Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½, ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ ΠΈΠ»ΠΈ ΠΈΠΌΠΏΠ»ΠΈΡ†ΠΈΡ‚Π½ΠΎ стартира Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°,
  • всички Π·Π°Π΄Π°Ρ‡ΠΈ сС ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚ ΠΎΡ‚ конфигурацията, Ρ‡ΠΈΠΈΡ‚ΠΎ условия позволяват Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ стартирани Π² Π΄Π°Π΄Π΅Π½ контСкст,
  • Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ са ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ спорСд Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ Π΅Ρ‚Π°ΠΏΠΈ,
  • Π΅Ρ‚Π°ΠΏΠΈΡ‚Π΅ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π½Π° свой Ρ€Π΅Π΄ - Ρ‚.Π΅. ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ всички Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ са изпълнСни,
  • Π°ΠΊΠΎ Π΅Ρ‚Π°ΠΏΡŠΡ‚ сС ΠΏΡ€ΠΎΠ²Π°Π»ΠΈ (Ρ‚.Π΅. ΠΏΠΎΠ½Π΅ Π΅Π΄Π½Π° ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ Π½Π° Π΅Ρ‚Π°ΠΏΠ° сС ΠΏΡ€ΠΎΠ²Π°Π»ΠΈ), ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΡŠΡ‚ спира (ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ),
  • Π°ΠΊΠΎ всички Π΅Ρ‚Π°ΠΏΠΈ са Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ΡŠΡ‚ сС счита Π·Π° ΡƒΡΠΏΠ΅ΡˆΠ΅Π½.

Π’Π°ΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅:

  • Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ - Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π½Π° Π΅Ρ‚Π°ΠΏΠΈ, Π² ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Ρ‚Π΅, тСстватС, ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠΎΠ΄, внСдряватС Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½Π° компилация Π² ΠΎΠ±Π»Π°Ρ‡Π½Π° услуга ΠΈ Ρ‚.Π½.,
  • сцСна (Π΅Ρ‚Π°ΠΏ) β€” ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Π·Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° 1+ Π·Π°Π΄Π°Ρ‡Π°,
  • Π·Π°Π΄Π°Ρ‡Π° (Ρ€Π°Π±ΠΎΡ‚Π°) Π΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°. Π‘ΡŠΡΡ‚ΠΎΠΈ сС ΠΎΡ‚ скрипт (Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π΅Π½), условия Π·Π° стартиранС, настройки Π·Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅/ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅ Π½Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ.

Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° ΠΏΡ€ΠΈ настройка Π½Π° CI / CD сС свСТда Π΄ΠΎ създаванС Π½Π° Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ дСйствия Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, тСстванС ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ.

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅: Π·Π°Ρ‰ΠΎ?

  • Π—Π°Ρ‰ΠΎ Gitlab?

Π—Π°Ρ‰ΠΎΡ‚ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ стана Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΡΡŠΠ·Π΄Π°Π΄Π°Ρ‚ частни Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π·Π° домашни Π»ΡŽΠ±ΠΈΠΌΡ†ΠΈ, Ρ‚Π΅ бяха ΠΏΠ»Π°Ρ‚Π΅Π½ΠΈ Π² GitHub ΠΈ Π°Π· бях Π°Π»Ρ‡Π΅Π½. Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈΡ‚Π΅ станаха Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΈ, Π½ΠΎ засСга Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π΄Π° сС прСмСстя Π² GitHub.

  • Π—Π°Ρ‰ΠΎ Π½Π΅ Azure DevOps Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈ?

Π—Π°Ρ‰ΠΎΡ‚ΠΎ Ρ‚Π°ΠΌ настройката Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½Π° - Π΄ΠΎΡ€ΠΈ Π½Π΅ сС изисква ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ Π½Π° командния Ρ€Π΅Π΄. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с външни доставчици Π½Π° git - с няколко щраквания, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° SSH ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ΠΈ към Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ - ΡΡŠΡ‰ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΡŠΡ‚ сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° лСсно Π΄ΠΎΡ€ΠΈ Π½Π΅ ΠΎΡ‚ шаблон.

Начална позиция: Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ ΠΈ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ искатС

ИмамС:

  • Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π² GitLab.

НиС искамС:

  • Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ сглобяванС ΠΈ тСстванС Π·Π° всяка заявка Π·Π° сливанС,
  • ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° всяка заявка Π·Π° сливанС ΠΈ насочванС към главния, ΠΏΡ€ΠΈ условиС Ρ‡Π΅ ΠΈΠΌΠ° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ€Π΅Π΄ Π² ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° Π°Π½Π³Π°ΠΆΠΈΡ€Π°Π½Π΅,
  • ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ към частна Смисия Π² Azure DevOps,
  • ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° докумСнтация ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π² GitLab Pages,
  • Π·Π½Π°Ρ‡ΠΊΠΈ!11

ΠžΠΏΠΈΡΠ°Π½ΠΈΡ‚Π΅ изисквания ΠΎΡ€Π³Π°Π½ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ Π²ΡŠΡ€Ρ…Ρƒ слСдния ΠΌΠΎΠ΄Π΅Π» Π½Π° Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°:

  • Π•Ρ‚Π°ΠΏ 1 - БглобяванС
    • НиС ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠΎΠ΄Π°, ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΊΠ°Ρ‚ΠΎ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ
  • Π•Ρ‚Π°ΠΏ 2 - тСстванС
    • ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ ΠΎΡ‚ Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°ΠΌΠ΅ тСстовС, ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄Π°
  • Π•Ρ‚Π°ΠΏ 3 - Π˜Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅
    • Π—Π°Π΄Π°Ρ‡Π° 1 - ΠΈΠ·Π³Ρ€Π°Π΄Π΅Ρ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° nuget ΠΈ Π³ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Ρ‚Π΅ Π½Π° Azure DevOps
    • Π—Π°Π΄Π°Ρ‡Π° 2 - ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ сайта ΠΎΡ‚ xmldoc Π² изходния ΠΊΠΎΠ΄ ΠΈ Π³ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ Π² GitLab Pages

Π”Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ!

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° конфигурацията

Π˜Π·Π³ΠΎΡ‚Π²ΡΠ½Π΅ Π½Π° смСтки

  1. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π°ΠΊΠ°ΡƒΠ½Ρ‚ Π² Microsoft Azure

  2. ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° Azure DevOps

  3. БъздавамС Π½ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

    1. ИмС - всяко
    2. Видимост - всякаква
      Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰

  4. ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ‰Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ Π±ΡƒΡ‚ΠΎΠ½Π° БъздаванС, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Ρ‰Π΅ бъдС създадСн ΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π΅Ρ‚Π΅ прСнасочСни към Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° страница. На Ρ‚Π°Π·ΠΈ страница ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π² настройкитС Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Π΄ΠΎΠ»Π½Π°Ρ‚Π° Π²Ρ€ΡŠΠ·ΠΊΠ° Π² списъка вляво -> ΠžΠ±Ρ‰ ΠΏΡ€Π΅Π³Π»Π΅Π΄ -> Π‘Π»ΠΎΠΊ Π·Π° услуги Π½Π° Azure DevOps)
    Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰

  5. ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° Atrifacts, Ρ‰Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ БъздаванС Π½Π° Смисия

    1. Π’ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ°
    2. Π˜Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ видимост
    3. ΠŸΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°Ρ‚Π° Π’ΠΊΠ»ΡŽΡ‡Π΅Ρ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΎΡ‚ ΠΎΠ±Ρ‰ΠΈ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΡŠΡ‚ Π΄Π° Π½Π΅ сС ΠΏΡ€Π΅Π²ΡŠΡ€Π½Π΅ Π² dump nuget ΠΊΠ»ΠΎΠ½ΠΈΠ½Π³
      Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰

  6. Π©Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ Connect to feed, ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Visual Studio, ΠΊΠΎΠΏΠΈΡ€Π°ΠΉΡ‚Π΅ Source ΠΎΡ‚ Π±Π»ΠΎΠΊΠ° Machine Setup
    Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰

  7. ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π² настройкитС Π½Π° Π°ΠΊΠ°ΡƒΠ½Ρ‚Π°, ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Personal Access Token
    Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰

  8. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ² ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ

    1. ИмС - ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ
    2. ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ - Π’Π΅ΠΊΡƒΡ‰Π°
    3. Π’Π°Π»ΠΈΠ΄Π΅Π½ Π·Π° максимум 1 Π³ΠΎΠ΄ΠΈΠ½Π°
    4. ΠžΠ±Ρ…Π²Π°Ρ‚ - Опаковка/Π§Π΅Ρ‚Π΅Π½Π΅ ΠΈ писанС
      Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰

  9. ΠšΠΎΠΏΠΈΡ€Π°ΠΉΡ‚Π΅ създадСния Ρ‚ΠΎΠΊΠ΅Π½ - слСд затварянС Π½Π° модалния ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ† стойността няма Π΄Π° бъдС Π½Π°Π»ΠΈΡ‡Π½Π°

  10. ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π΄ΠΎ настройкитС Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π² GitLab, ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ настройкитС Π·Π° CI / CD
    Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰

  11. Π Π°Π·ΡˆΠΈΡ€Π΅Ρ‚Π΅ Π±Π»ΠΎΠΊΠ° ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Π½ΠΎΠ²

    1. ИмС - всяко Π±Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ (Ρ‰Π΅ бъдС Π½Π°Π»ΠΈΡ‡Π½ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°)
    2. Бтойност - ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΎΡ‚ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„ 9
    3. Π˜Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° маска
      Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰

Π’ΠΎΠ²Π° Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° конфигурация.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° Ρ€Π°ΠΌΠΊΠ°

По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ конфигурацията Π½Π° CI/CD Π² GitLab ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ„Π°ΠΉΠ»Π° .gitlab-ci.yml ΠΎΡ‚ ΠΊΠΎΡ€Π΅Π½Π° Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ ΠΏΡŠΡ‚ Π΄ΠΎ Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ» Π² настройкитС Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, Π½ΠΎ Π² Ρ‚ΠΎΠ·ΠΈ случай Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

ΠšΠ°ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΡ‚ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ„Π°ΠΉΠ»ΡŠΡ‚ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° конфигурация във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ YAML. ДокумСнтацията описва ΠΊΠΎΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ Π½Π° Π½Π°ΠΉ-високото Π½ΠΈΠ²ΠΎ Π½Π° конфигурацията ΠΈ Π½Π° всяко ΠΎΡ‚ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΡ‚Π΅ Π½ΠΈΠ²Π°.

ΠŸΡŠΡ€Π²ΠΎ, Π½Π΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π²Ρ€ΡŠΠ·ΠΊΠ° към Π΄ΠΎΠΊΠ΅Ρ€ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² конфигурационния Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅. Π—Π° Ρ‚ΠΎΠ²Π° Π½Π°ΠΌΠΈΡ€Π°ΠΌΠ΅ Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° с изобраТСния Π½Π° .Net Core Π² Docker Hub. Π’ GitHub ΠΈΠΌΠ° ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с .Net Core 3.1 Π΅ подходящо Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ сС ΠΊΠΎΠ»Π΅Π±Π°ΠΉΡ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΏΡŠΡ€Π²ΠΈΡ Ρ€Π΅Π΄ към конфигурацията

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?

Всичко Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ - ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ runners (ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π½ΠΈ Π·Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° скриптовС Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ прСдоставСни ΠΎΡ‚ 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

ЕстСствСно, ΠΈΠΌΠ° някои нюанси, ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ услоТним донякъдС ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅.

  1. ИскамС компилация Π·Π° освобоТдаванС, Π° Π½Π΅ компилация Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ добавямС към всяка ΠΊΠΎΠΌΠ°Π½Π΄Π° -c Release
  2. ΠšΠΎΠ³Π°Ρ‚ΠΎ тСствамС, искамС Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ трябва Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ Π² тСстовитС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ:
    1. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° към всички тСстови Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ coverlet.msbuild: dotnet add package coverlet.msbuild ΠΎΡ‚ ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°
    2. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ към ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π·Π° тСстово изпълнСниС /p:CollectCoverage=true
    3. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡ към конфигурацията Π½Π° тСстовата Π·Π°Π΄Π°Ρ‡Π°, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚ ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ (Π²ΠΈΠΆΡ‚Π΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ)
  3. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚Π΅ ΠΊΠΎΠ΄Π° Π² nuget ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, Π·Π°Π΄Π°ΠΉΡ‚Π΅ ΠΈΠ·Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° дирСктория Π·Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅: -o .

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄Π°

Π‘Π»Π΅Π΄ ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° тСстовСтС, Coverlet ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π° статистика Π·Π° изпълнСниС Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π°:

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+%)/

Π’ΡƒΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ статистика ΠΎΡ‚ линия с пълно ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ Π½Π° линията.

ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΉΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΈ докумСнтация

И Π΄Π²Π΅Ρ‚Π΅ дСйствия са ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΈ Π·Π° послСдния Π΅Ρ‚Π°ΠΏ ΠΎΡ‚ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° - Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΌΠΎΠ½Ρ‚Π°ΠΆΡŠΡ‚ ΠΈ тСстовСтС са ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»ΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° сподСлим Π½Π°ΡˆΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ със свСта.

ΠŸΡŠΡ€Π²ΠΎ, помислСтС Π·Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π² ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°:

  1. Ако ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ няма ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ» Π½Π° nuget (nuget.config), ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²: dotnet new nugetconfig

    Π—Π°Ρ‰ΠΎ: ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° няма Π΄ΠΎΡΡ‚ΡŠΠΏ Π·Π° запис Π΄ΠΎ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ (потрСбитСлски ΠΈ машинни) ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π—Π° Π΄Π° Π½Π΅ улавямС Π³Ρ€Π΅ΡˆΠΊΠΈ, Π½ΠΈΠ΅ просто създавамС Π½ΠΎΠ²Π° Π»ΠΎΠΊΠ°Π»Π½Π° конфигурация ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с нСя.

  2. НСка Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ² ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ към Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° конфигурация: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - ΠΈΠΌΠ΅ Π½Π° Π»ΠΎΠΊΠ°Π»Π΅Π½ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ, Π½Π΅ Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ
    2. url - URL Π½Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ° ΠΎΡ‚ Π΅Ρ‚Π°ΠΏ "Π˜Π·Π³ΠΎΡ‚Π²ΡΠ½Π΅ Π½Π° смСтки", стр. 6
    3. organization - ΠΈΠΌΠ΅ Π½Π° организация Π² Azure DevOps
    4. gitlab variable - ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° с ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ, Π΄ΠΎΠ±Π°Π²Π΅Π½ към GitLab ("ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π° Π°ΠΊΠ°ΡƒΠ½Ρ‚ΠΈ", стр. 11). ЕстСствСно във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ $variableName
    5. -StorePasswordInClearText - Ρ…Π°ΠΊ Π·Π° заобикалянС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° ΠΎΡ‚ΠΊΠ°Π·Π°Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ (НС съм ΠΏΡŠΡ€Π²ΠΈΡΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡ‚ΡŠΠΏΠ²Π° Π½Π° Ρ‚ΠΎΠ²Π° Π³Ρ€Π΅Π±Π»ΠΎ)
    6. Π’ случай Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ -verbosity detailed
  3. Π˜Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π΄ΠΎ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ°: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Π˜Π·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ всички ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° дирСктория, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ *.nupkg.
    2. name - ΠΎΡ‚ Π³ΠΎΡ€Π½Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ°.
    3. key - всяка линия. Π’ Azure DevOps, Π² ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†Π° Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ към ΠΊΠ°Π½Π°Π», ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΡŠΡ‚ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ Ρ€Π΅Π΄ΡŠΡ‚ az.
    4. -skipduplicate - ΠΏΡ€ΠΈ ΠΎΠΏΠΈΡ‚ Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ ΠΏΠ°ΠΊΠ΅Ρ‚ Π±Π΅Π· Ρ‚ΠΎΠ·ΠΈ ΠΊΠ»ΡŽΡ‡ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΡŠΡ‚ Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ Π³Ρ€Π΅ΡˆΠΊΠ° 409 Conflict; с ΠΊΠ»ΡŽΡ‡Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅Ρ‚ΠΎ Ρ‰Π΅ бъдС пропуснато.

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° настроим ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° докумСнтация:

  1. ΠŸΡŠΡ€Π²ΠΎ, Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, Π² главния ΠΊΠ»ΠΎΠ½, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° docfx. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΎΡ‚ root docfx init ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π·Π°Π΄Π°ΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° строитСлна докумСнтация. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описаниС Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°Ρ‚Π° настройка Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ‚ΡƒΠΊ.
    1. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅, Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° посочитС ΠΈΠ·Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° дирСктория ..public - GitLab ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π²Π·Π΅ΠΌΠ° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Π°Ρ‚Π° ΠΏΠ°ΠΏΠΊΠ° Π² ΠΊΠΎΡ€Π΅Π½Π° Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π·Π° страници. Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Ρ‰Π΅ бъдС Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π² ΠΏΠ°ΠΏΠΊΠ°, Π²Π»ΠΎΠΆΠ΅Π½Π° Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ - Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ ΠΈΠ·Ρ…ΠΎΠ΄ към Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π°Π³ΠΎΡ€Π΅ Π² ΠΏΡŠΡ‚Ρ.
  2. НСка ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² GitLab.
  3. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‡Π° към конфигурацията Π½Π° Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° pages (Π·Π°ΠΏΠ°Π·Π΅Π½Π° Π΄ΡƒΠΌΠ° Π·Π° Π·Π°Π΄Π°Ρ‡ΠΈ Π·Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π½Π° сайтовС Π² GitLab Pages):
    1. Π‘ΠΊΡ€ΠΈΠΏΡ‚:
      1. nuget install docfx.console -version 2.51.0 - инсталирайтС docfx; вСрсията Π΅ посочСна, Π·Π° Π΄Π° сС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ ΠΏΡŠΡ‚ΠΈΡ‰Π°Ρ‚Π° Π·Π° инсталиранС Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° са ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈ.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° докумСнтация
    2. АртСфакти Π½Π° възСл:

pages:
  # snip
  artifacts:
    paths:
      - public

Π›ΠΈΡ€ΠΈΡ‡Π½ΠΎ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ Π·Π° docfx

ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ настройвах ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, посочих ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ° Π½Π° ΠΊΠΎΠ΄ Π·Π° докумСнтацията ΠΊΠ°Ρ‚ΠΎ Ρ„Π°ΠΉΠ» с Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ΠžΡΠ½ΠΎΠ²Π½ΠΈΡΡ‚ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ Π΅, Ρ‡Π΅ сС създава докумСнтация ΠΈ Π·Π° тСстови ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ. Π’ случай, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ Ρ‚Π°Π·ΠΈ стойност Π½Π° възСла metadata.src:

{
  "metadata": [
    {
      "src": [
        {
          "src": "../",
          "files": [
            "**/*.csproj"
          ],
          "exclude":[
            "*.tests*/**"
          ]
        }
      ],
      // --- snip ---
    },
    // --- snip ---
  ],
  // --- snip ---
}

  1. metadata.src.src: "../" - ΠΎΡ‚ΠΈΠ²Π°ΠΌΠ΅ Π΅Π΄Π½ΠΎ Π½ΠΈΠ²ΠΎ Π½Π°Π³ΠΎΡ€Π΅ спрямо мСстополоТСниСто docfx.json, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π² шаблони Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π² Π΄ΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈΡ‚Π΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ.
  2. metadata.src.files: ["**/*.csproj"] - Π³Π»ΠΎΠ±Π°Π»Π΅Π½ ΠΌΠΎΠ΄Π΅Π», ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ всички C # ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΎΡ‚ всички Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ.
  3. 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 Π² настройкитС Π½Π° CI/CD Π² Π±Π»ΠΎΠΊΠ° Π·Π° Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈ Gtntral:

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰

Π‘ΡŠΠ·Π΄Π°Π΄ΠΎΡ… Π·Π½Π°Ρ‡ΠΊΠ° с Π²Ρ€ΡŠΠ·ΠΊΠ° към докумСнтацията Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Ρ‰ΠΈΡ‚ΠΎΠ²Π΅.io - Ρ‚Π°ΠΌ всичко Π΅ доста лСсно, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ своя собствСна Π·Π½Π°Ρ‡ΠΊΠ° ΠΈ Π΄Π° я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‡Ρ€Π΅Π· заявка.

![ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Shields.io](https://img.shields.io/badge/custom-badge-blue)

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰

АртСфактитС Π½Π° Azure DevOps ΡΡŠΡ‰ΠΎ Π²ΠΈ позволяват Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ Π·Π½Π°Ρ‡ΠΊΠΈ Π·Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ с Π½Π°ΠΉ-Π½ΠΎΠ²Π°Ρ‚Π° вСрсия. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, Π² ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ° Π½Π° сайта Π½Π° Azure DevOps трябва Π΄Π° Ρ‰Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ БъздаванС Π½Π° Π·Π½Π°Ρ‡ΠΊΠ° Π·Π° избрания ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ:

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰

ДобавянС Π½Π° красота

ΠžΡΠ²Π΅Ρ‚ΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ‰ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ конфигурация

Π”ΠΎΠΊΠ°Ρ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ… конфигурацията ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Ρ… Π² докумСнтацията, ΠΏΠΎΠΏΠ°Π΄Π½Π°Ρ… Π½Π° интСрСсна функция Π½Π° YAML - ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈ.

ΠšΠ°ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΡ‚ настройкитС Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π°, всички Ρ‚Π΅ изискват Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚Π° windows Π² runner ΠΈ сС задСйстват, ΠΊΠΎΠ³Π°Ρ‚ΠΎ заявка Π·Π° сливанС Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½Π° Π΄ΠΎ master/created (с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° докумСнтация). НСка Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π° към Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ:

.common_tags: &common_tags
  tags:
    - windows
.common_only: &common_only
  only:
    - merge_requests
    - master

И сСга ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° вмъкнСм Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°, Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Π½ ΠΏΠΎ-Ρ€Π°Π½ΠΎ Π² описаниСто Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π°:

build job:
  <<: *common_tags
  <<: *common_only

Π˜ΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ трябва Π΄Π° Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ с Ρ‚ΠΎΡ‡ΠΊΠ°, Π·Π° Π΄Π° Π½Π΅ сС Ρ‚ΡŠΠ»ΠΊΡƒΠ²Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π°.

ВСрсиранС Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ

ΠŸΡ€ΠΈ създаванС Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ провСрява ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° командния Ρ€Π΅Π΄, Π° ΠΏΡ€ΠΈ липсата ΠΈΠΌ - Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°; ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π°ΠΌΠ΅Ρ€ΠΈ възСл Version, Ρ‚ΠΎΠΉ ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° стойност ΠΊΠ°Ρ‚ΠΎ вСрсията Π½Π° изградСния ΠΏΠ°ΠΊΠ΅Ρ‚. Оказва сС, Ρ‡Π΅ Π·Π° Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ с Π½ΠΎΠ²Π° вСрсия, трябва ΠΈΠ»ΠΈ Π΄Π° Π³ΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ във Ρ„Π°ΠΉΠ»Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΈΠ»ΠΈ Π΄Π° Π³ΠΎ ΠΏΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠ°Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π° командния Ρ€Π΅Π΄.

НСка Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΡ‰Π΅ Π΅Π΄ΠΈΠ½ списък с ТСлания - Π½Π΅ΠΊΠ° второстСпСннитС Π΄Π²Π΅ числа във вСрсията Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π³ΠΎΠ΄ΠΈΠ½Π°Ρ‚Π° ΠΈ Π΄Π°Ρ‚Π°Ρ‚Π° Π½Π° компилация Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΈ вСрсии. Π Π°Π·Π±ΠΈΡ€Π° сС, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ към Ρ„Π°ΠΉΠ»Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π΄Π° провСряватС ΠΏΡ€Π΅Π΄ΠΈ всяко ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ - Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°, ΠΊΠ°Ρ‚ΠΎ ΡΡŠΠ±ΠΈΡ€Π°Ρ‚Π΅ вСрсията Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΎΡ‚ контСкста ΠΈ я ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚Π΅ ΠΏΡ€Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π° командния Ρ€Π΅Π΄.

НСка сС съгласим, Ρ‡Π΅ Π°ΠΊΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° Π°Π½Π³Π°ΠΆΠΈΡ€Π°Π½Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Ρ€Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ 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 ΠΈ Π½Π°Π±Π»ΡŽΠ΄Π°Π²Π°ΠΉΡ‚Π΅ сглобяванСто Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ стриктно Π² ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΄Π°Π΄Π΅Π½ Π½ΠΈΠ· Π² ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° Π°Π½Π³Π°ΠΆΠΈΡ€Π°Π½Π΅.

ΠžΠ±Ρ‰ΠΎ

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π΅ΠΊΠ°Ρ€Π°Ρ…ΠΌΠ΅ ΠΎΠΊΠΎΠ»ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ ΠΈΠ»ΠΈ Π΅Π΄ΠΈΠ½ час Π² писанС Π½Π° конфигурацията, отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² локалния PowerShell ΠΈ, вСроятно, няколко Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ стартирания, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ проста конфигурация Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€ΡƒΡ‚ΠΈΠ½Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ.

Π Π°Π·Π±ΠΈΡ€Π° сС, GitLab CI / CD Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΎΠ±ΡˆΠΈΡ€Π΅Π½ ΠΈ многостранСн, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° слСд ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ - Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ Π΅ вярно. Π”ΠΎΡ€ΠΈ Ρ‚Π°ΠΌ Auto DevOps Спозволявайки

Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°, ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°, тСства, внСдрява ΠΈ наблюдава Π²Π°ΡˆΠΈΡ‚Π΅ прилоТСния

Π‘Π΅Π³Π° ΠΏΠ»Π°Π½ΠΎΠ²Π΅Ρ‚Π΅ са Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° внСдряванС Π½Π° прилоТСния Π² Azure, ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Pulumi ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ опрСдСлянС Π½Π° Ρ†Π΅Π»Π΅Π²Π°Ρ‚Π° срСда, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ бъдС Ρ€Π°Π·Π³Π»Π΅Π΄Π°Π½ΠΎ Π² слСдващата статия.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€