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

Или ΠΊΠ°ΠΊ Π΄Π° сС сдобиСм с красиви Π±Π΅ΠΉΠ΄ΠΆΠΎΠ²Π΅ Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° си Π·Π° Π΅Π΄ΠΈΠ½ Π²Π΅Ρ‡Π΅Π½ лСсСн ΠΊΠΎΠ΄ΠΈΠ½Π³.

ВСроятно всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ Π»ΠΈΡ‡Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ·ΠΏΠΈΡ‚Π²Π° ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ красиви Π±Π΅ΠΉΠ΄ΠΆΠΎΠ²Π΅ със статуси, ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π°, вСрсии Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ Π² NuGet... И ΠΌΠ΅Π½ Ρ‚ΠΎΠ²Π° ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΌΠ΅ Π½Π°ΠΊΠ°Ρ€Π° Π΄Π° напиша Ρ‚Π°Π·ΠΈ статия. По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°Ρ‚Π° Π·Π° написванСто ѝ Π°Π· сС сдобих с Ρ‚Π°ΠΊΠ°Π²Π° красота Π² Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅ си:

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

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

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

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

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

Какво Π΅ CI/CD ΠΈ Π·Π°Ρ‰ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ β€” ΠΌΠΎΠΆΠ΅ лСсно Π΄Π° сС Π½Π°ΠΌΠ΅Ρ€ΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚. ΠŸΡŠΠ»Π½Π°Ρ‚Π° докумСнтация относно настройката Π½Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΈ Π² GitLab ΡΡŠΡ‰ΠΎ Π½Π΅ Π΅ Ρ‚Ρ€ΡƒΠ΄Π½Π° Π·Π° Π½Π°ΠΌΠΈΡ€Π°Π½Π΅. Π’ΡƒΠΊ Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΈ ΠΏΠΎ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π±Π΅Π· Π³Ρ€Π΅ΡˆΠΊΠΈ Ρ‰Π΅ опиша процСса Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° систСмата ΠΎΡ‚ височината Π½Π° птичия ΠΏΠΎΠ»Π΅Ρ‚:Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΠΊΠΎΠΌΠΈΡ‚ Π² рСпозитория, създава merge request ΠΏΡ€Π΅Π· сайта,

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

ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ β€” Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π² Π΅Ρ‚Π°ΠΏΠΈ, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡΡŠΠ±ΠΈΡ€Π°, тСстира, ΠΎΠΏΠ°ΠΊΠΎΠ²Π° ΠΊΠΎΠ΄Π°, Π΄Π° сС Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π° Π³ΠΎΡ‚ΠΎΠ²Π°Ρ‚Π° сборка Π² ΠΎΠ±Π»Π°Ρ‡Π΅Π½ сСрвис ΠΈ Ρ‚.Π½.

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

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

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

  • Π—Π°Ρ‰ΠΎ GitLab?

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

  • Π—Π°Ρ‰ΠΎ Π½Π΅ Azure DevOps Pipelines?

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

Π˜Π·Ρ…ΠΎΠ΄Π½Π° позиция: ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ искамС

ИмамС:

  • рСпозитория Π² GitLab.

ИскамС:

  • Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Π° компилация ΠΈ тСстванС Π·Π° всяко merge request,
  • компилация Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° всяко merge request ΠΈ пуснати Π² мастСр ΠΏΡ€ΠΈ условиС Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π² ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΈΡ‚Π° Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° строка,
  • ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° ΡΡŠΠ±Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π² частСн Ρ„ΠΈΠΉΠ΄ Π² 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. ΠŸΡ€ΠΈ натисканС Π½Π° Π±ΡƒΡ‚ΠΎΠ½Π° Create ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Ρ‰Π΅ бъдС създадСн ΠΈ Ρ‰Π΅ Π½Π°ΡΡ‚ΡŠΠΏΠΈ ΠΏΡ€Π΅Ρ…ΠΎΠ΄ към Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° страница. На Ρ‚Π°Π·ΠΈ страница ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π°Ρ‚ Π½Π΅Π½ΡƒΠΆΠ½ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠ°Ρ‚ΠΎ сС ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ Π² настройкитС Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Π΄ΠΎΠ»Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ° Π² списъка отляво -> Overview -> Π±Π»ΠΎΠΊ Azure DevOps Services)
    Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ ΠΏΠΎ CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈ

  5. ΠŸΡ€Π΅Ρ…ΠΎΠ΄ към Atrifacts, натискамС Create feed

    1. Π’ΡŠΠ²Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΈΠΌΠ΅ Π½Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ°
    2. Π˜Π·Π±ΠΈΡ€Π°ΠΌΠ΅ видимост
    3. ΠžΡ‚ΠΌΡΡ‚Π°ΠΌΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°Ρ‚Π° Include packages from common public sources, Π·Π° Π΄Π° Π½Π΅ сС ΠΏΡ€Π΅Π²ΡŠΡ€Π½Π΅ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΡŠΡ‚ Π² смСтищС ΠΊΠ»ΠΎΠ½ΠΈΠ½Π³ Π½Π° nuget
      Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ ΠΏΠΎ CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈ

  6. НатискамС Connect to feed, ΠΈΠ·Π±ΠΈΡ€Π°ΠΌΠ΅ Visual Studio, ΠΎΡ‚ Π±Π»ΠΎΠΊΠ° Machine Setup ΠΊΠΎΠΏΠΈΡ€Π°ΠΌΠ΅ Source
    Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ ΠΏΠΎ CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈ

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

  8. БъздавамС Π½ΠΎΠ² Ρ‚ΠΎΠΊΠ΅Π½ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ

    1. ИмС β€” ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ
    2. ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ β€” Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π°
    3. Π‘Ρ€ΠΎΠΊ Π½Π° дСйствиС β€” максимум 1 Π³ΠΎΠ΄ΠΈΠ½Π°
    4. ΠžΠ±Π»Π°ΡΡ‚ Π½Π° дСйствиС (scope) β€” Packaging/Read & Write
      Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ ΠΏΠΎ CI/CD Π² GitLab Π·Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈ

  9. ΠšΠΎΠΏΠΈΡ€Π°Π½Π΅ Π½Π° създадСния Ρ‚ΠΎΠΊΠ΅Π½ β€” слСд затварянС Π½Π° модалния ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ† стойността Ρ‰Π΅ бъдС Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π°

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

  11. Π Π°Π·ΡˆΠΈΡ€ΡΠ²Π°ΠΌΠ΅ Π±Π»ΠΎΠΊΠ° Variables, добавямС Π½ΠΎΠ²Π°

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

На Ρ‚ΠΎΠ²Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° настройка ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π°.

ΠŸΠΎΠ΄Π³ΠΎΡ‚Π²ΡΠΌΠ΅ структурата Π½Π° конфигурацията

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

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

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

image: mcr.microsoft.com/dotnet/core/sdk:3.1

Π‘Π΅Π³Π°, ΠΏΡ€ΠΈ стартиранС Π½Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ Microsoft Ρ‰Π΅ бъдС ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ посочСният ΠΎΠ±Ρ€Π°Π·, Π² ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ всички Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΡ‚ конфигурацията.

Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° β€” добавянС Π½Π° stageΠ΅Ρ‚Π°ΠΏΠΈ. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ 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: ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π°. Какво ΠΏΠΎ дяволитС?

Всичко Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ β€” ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ runner-ΠΈΡ‚Π΅ (ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π½ΠΈ Π·Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° скриптовС Π·Π° Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ прСдоставяни ΠΎΡ‚ GitLab) ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ bash Π·Π° изпълнСниС Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. МоТС Π΄Π° ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, ΠΊΠ°Ρ‚ΠΎ явно посочитС Π² описаниСто Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π°, ΠΊΠ°ΠΊΠ²ΠΈ Ρ‚Π°Π³ΠΎΠ²Π΅ трябва Π΄Π° ΠΈΠΌΠ° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‰ΠΈΡΡ‚ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Ρ€Π°Π½Π΅Ρ€:

dummy job Π½Π° 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 ΠΈ rules. Накратко, only/except позволява настройка Π½Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ ΠΏΠΎ Ρ‚Ρ€ΠΈΠ³Π΅Ρ€ΠΈ (merge_request, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” настройва Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π΄Π° сС изпълнява ΠΏΡ€ΠΈ всяко създаванС Π½Π° заявка Π·Π° сливанС ΠΈ ΠΏΡ€ΠΈ всяко ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈ Π² ΠΊΠ»ΠΎΠ½Π°, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ Π² заявката Π·Π° сливанС) ΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ (Π² Ρ‚.Ρ‡. с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ); rules позволява Π΄Π° сС настройват Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ условия ΠΈ, ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅, Π΄Π° сС промСня условиСто Π·Π° изпълнСниС Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π² зависимост ΠΎΡ‚ успСха Π½Π° ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π°Ρ‰ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ (Π² Π² GitLab CI/CD).

НСка ΠΏΡ€ΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ Π½Π°Π±ΠΎΡ€Π° ΠΎΡ‚ изисквания β€” построяванС ΠΈ тСстванС само Π·Π° merge request, ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π² Azure DevOps β€” Π·Π° merge request ΠΈ ΠΏΡƒΡˆΠΎΠ²Π΅ Π² майсторския ΠΊΠ»ΠΎΠ½, Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° докумСнтация β€” Π·Π° ΠΏΡƒΡˆΠΎΠ²Π΅ Π² майсторския ΠΊΠ»ΠΎΠ½.

Π—Π° Π½Π°Ρ‡Π°Π»ΠΎ, Π½Π΅ΠΊΠ° настроим Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, ΠΊΠ°Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π·Π° задСйстванС само ΠΏΡ€ΠΈ merge request:

build job:
  # snip
  only:
    - merge_request

Π‘Π΅Π³Π° Ρ‰Π΅ настроим Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π·Π° ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π΄Π° сС задСйства ΠΏΡ€ΠΈ merge request ΠΈ добавянС Π½Π° ΠΊΠΎΠΌΠΈΡ‚ΠΈ Π² майсторския ΠΊΠ»ΠΎΠ½:

pack and deploy job:
  # snip
  only:
    - merge_request
    - master

ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅, всичко Π΅ просто ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΎ.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° настроитС Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ Π΄Π° сС изпълнява само Π°ΠΊΠΎ Π΅ създадСн merge request с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Ρ†Π΅Π»Π΅Π²Π° ΠΈΠ»ΠΈ основна ΠΊΠ»ΠΎΠ½ΠΊΠ°:

  ΠΏΡ€Π°Π²ΠΈΠ»Π°:
    - Π°ΠΊΠΎ: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"

Π’ условията ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈΡ‚Π΅ Ρ‚ΡƒΠΊ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ; ΠΏΡ€Π°Π²ΠΈΠ»Π° rules Π½Π΅ са ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ с ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° only/except.

Настройка Π½Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ

По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° build job Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ създадСни Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ ΠΎΡ‚ компилацията, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΏΡ€Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² слСдващитС Π·Π°Π΄Π°Ρ‡ΠΈ. Π—Π° Ρ†Π΅Π»Ρ‚Π° Π² конфигурацията Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° трябва Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΏΡŠΡ‚ΠΈΡ‰Π° ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° сС запазят ΠΈ ΠΏΡ€Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² слСдващитС Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΏΠΎΠ΄ ΠΊΠ»ΡŽΡ‡Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ:

build job:
  # snip
  Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ:
    ΠΏΡŠΡ‚ΠΈΡ‰Π°:
      - path/to/build/artifacts
      - another/path
      - MyCoolLib.*/bin/Release/*

ΠŸΡŠΡ‚ΠΈΡ‰Π°Ρ‚Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ wildcards, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ опростява Π·Π°Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ.

Ако Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° създава Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° всяка слСдваща Π·Π°Π΄Π°Ρ‡Π° Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ тях β€” Ρ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π½Π° ΡΡŠΡ‰ΠΈΡ‚Π΅ ΠΏΡŠΡ‚ΠΈΡ‰Π° относно ΠΊΠΎΡ€Π΅Π½Π° Π½Π° рСпозитория, ΠΏΠΎ ΠΊΠΎΠΈΡ‚ΠΎ са Π±ΠΈΠ»ΠΈ ΡΡŠΠ±Ρ€Π°Π½ΠΈ ΠΎΡ‚ ΠΈΠ·Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π°. ОсвСн Ρ‚ΠΎΠ²Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈΡ‚Π΅ са Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π·Π° изтСглянС Π½Π° сайта.

Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π³ΠΎΡ‚ΠΎΠ² (ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½) каркас Π½Π° конфигурацията, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към написванСто Π½Π° скриптовС Π·Π° Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅.

ПишСм скриптовС

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

Π˜Π·Ρ‡ΠΈΡΠ»ΡΠ²Π°Π½Π΅ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ...
  Π“Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΡ‚Ρ‡Π΅Ρ‚ 'C:Usersxxxsourcereposmy-projectmyProject.testscoverage.json'

+-------------+--------+--------+--------+
| ΠœΠΎΠ΄ΡƒΠ»      | Линия | Клон   | ΠœΠ΅Ρ‚ΠΎΠ΄  |
+-------------+--------+--------+--------+
| ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ 1   | 83,24% | 66,66% | 92,1%  |
+-------------+--------+--------+--------+
| ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ 2   | 87,5%  | 50%    | 100%   |
+-------------+--------+--------+--------+
| ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ 3   | 100%   | 83,33% | 100%   |
+-------------+--------+--------+--------+

+---------+--------+--------+--------+
|         | Линия | Клон   | ΠœΠ΅Ρ‚ΠΎΠ΄  |
+---------+--------+--------+--------+
| ΠžΠ±Ρ‰ΠΎ    | 84,27% | 65,76% | 92,94% |
+---------+--------+--------+--------+
| Π‘Ρ€Π΅Π΄Π½ΠΎ  | 90,24% | 66,66% | 97,36% |
+---------+--------+--------+--------+

GitLab позволява ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° статистика, която послС ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½Π° ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Π·Π½Π°Ρ‡ΠΊΠ°. РСгулярният ΠΈΠ·Ρ€Π°Π· сС ΡƒΠΊΠ°Π·Π²Π° Π² настройкитС Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° с ΠΊΠ»ΡŽΡ‡Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅; Π² ΠΈΠ·Ρ€Π°Π·Π° трябва Π΄Π° ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π° capture-Π³Ρ€ΡƒΠΏΠ°, чиято стойност Ρ‰Π΅ бъдС ΠΏΡ€Π΅Π΄Π°Π΄Π΅Π½Π° Π½Π° Π·Π½Π°Ρ‡ΠΊΠ°Ρ‚Π°:

Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ тСстовС ΠΈ ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅:
  # ΡΡŠΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅
  ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅: /|s*ΠžΠ±Ρ‰ΠΎΡΡƒΠΌΠ°Ρ€Π½ΠΈ*|s*(d+[,.]d+%)

Π’ΡƒΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ статистика ΠΎΡ‚ Ρ€Π΅Π΄Π° с ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ ΠΏΠΎ Π»ΠΈΠ½ΠΈΠΈ.

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

И Π΄Π²Π΅Ρ‚Π΅ дСйствия са насрочСни Π·Π° послСдния Π΅Ρ‚Π°ΠΏ Π½Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° β€” слСд ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΈ тСстовСтС ΠΌΠΈΠ½Π°Ρ…Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° сподСлим Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈΡ‚Π΅ си с свСта.

ΠŸΡ€Π΅Π΄ΠΈ всичко, Π½Π΅ΠΊΠ° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΠΊΠ°ΠΊ сС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° Π² ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ:

  1. Ако Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° няма Ρ„Π°ΠΉΠ» конфигурация nuget (nuget.config), Π½Π΅ΠΊΠ° създадСм Π½ΠΎΠ²: dotnet new nugetconfig

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

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

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

  1. ΠŸΡŠΡ€Π²ΠΎ, Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ΠΎ, Π² ΠΊΠ»ΠΎΠ½ master, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° docfx. Π—Π° Ρ‚ΠΎΠ²Π° ΠΎΡ‚ ΠΊΠΎΡ€Π΅Π½ΠΎΠ²Π°Ρ‚Π° дирСктория трябва Π΄Π° изпълним ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° docfx init ΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° докумСнтацията. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описаниС Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈΡ‚Π΅ настройки Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ‚ΡƒΠΊ.
    1. ΠŸΡ€ΠΈ настройката Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ ΠΈΠ·Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° дирСктория ..public β€” GitLab ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π²Π·ΠΈΠΌΠ° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° public Π² ΠΊΠΎΡ€Π΅Π½Π° Π½Π° рСпозитория ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π·Π° Pages. Въй ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Ρ‰Π΅ бъдС Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π² Π²Π»ΠΎΠΆΠ΅Π½Π° Π² рСпозитория ΠΏΠ°ΠΏΠΊΠ° β€” добавямС Π² ΠΏΡŠΡ‚Ρ ΠΈΠ·Ρ…ΠΎΠ΄ Π½Π° Π½ΠΈΠ²ΠΎ Π½Π°Π³ΠΎΡ€Π΅.
  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. Π’ΡŠΠ·Π΅Π» artifacts:

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 Π² ΠΈΠΌΠ΅Ρ‚ΠΎ

ΠŸΡ€ΠΎΠΌΠ΅ΠΆΠ΄ΡƒΡ‚ΡŠΡ‡Π΅Π½ ΠΈΠ·Π²ΠΎΠ΄

Π’Π°ΠΊΠ°Π²Π° проста конфигурация ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡΡŠΡΡ‚Π°Π²ΠΈ Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ Π·Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ час ΠΈ Π΄Π²Π΅ Ρ‡Π°ΡˆΠΈ ΠΊΠ°Ρ„Π΅, която Ρ‰Π΅ позволява ΠΏΡ€ΠΈ всяко исканС Π·Π° сливанС ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π² master Π΄Π° провСрявамС, Ρ‡Π΅ ΠΊΠΎΠ΄ΡŠΡ‚ сС ΡΡŠΠ±ΠΈΡ€Π° ΠΈ тСстовСтС ΠΌΠΈΠ½Π°Π²Π°Ρ‚, Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ Π½ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ‚, Π΄Π° обновявамС докумСнтацията ΠΈ Π΄Π° Ρ€Π°Π΄Π²Π° ΠΎΡ‡ΠΈΡ‚Π΅ с красиви Π·Π½Π°Ρ‡ΠΊΠΈ Π² 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 pipelines:

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

Π—Π½Π°Ρ‡ΠΊΠ° със Π»ΠΈΠ½ΠΊ към докумСнтацията ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ… Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Shields.io β€” Ρ‚Π°ΠΌ всичко Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ просто, моТСш Π΄Π° създадСш своя Π·Π½Π°Ρ‡ΠΊΠ° ΠΈ Π΄Π° я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡˆ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° заявка.

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

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

Azure DevOps Artifacts ΡΡŠΡ‰ΠΎ позволява Π΄Π° създаваш Π·Π½Π°Ρ‡ΠΊΠΈ Π·Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»Π½Π°Ρ‚Π° вСрсия. Π—Π° Ρ†Π΅Π»Ρ‚Π° Π² ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ° Π½Π° сайта Azure DevOps Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π½Π°Ρ‚ΠΈΡΠ½Π΅Ρˆ Π½Π° Create badge Π·Π° избрания ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρˆ markdown-Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ°Ρ‚Π°:

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

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

ДобавямС красота

ИзвСТдамС ΠΎΠ±Ρ‰ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ конфигурацията

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

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

.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) (rev. / 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 ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ опрСдСлянС Π½Π° Ρ†Π΅Π»Π΅Π²Π°Ρ‚Π° срСда, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ бъдС Ρ€Π°Π·Π³Π»Π΅Π΄Π°Π½ΠΎ Π² слСдващата статия.

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster