Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° CI/CD Π²ΠΎ GitLab Π·Π° (рСчиси) апсолутСн ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊ

Или ΠΊΠ°ΠΊΠΎ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ прСкрасни Π·Π½Π°Ρ‡ΠΊΠΈ Π·Π° Π²Π°ΡˆΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π²ΠΎ Π΅Π΄Π½Π° Π²Π΅Ρ‡Π΅Ρ€ Π½Π° лСсно ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ΅

Π’Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ, сСкој Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ кој ΠΈΠΌΠ° Π±Π°Ρ€Π΅ΠΌ Π΅Π΄Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π·Π° ΠΌΠΈΠ»Π΅Π½ΠΈΡ‡ΠΈΡšΠ° Π²ΠΎ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠΌΠ° Ρ‡Π΅ΡˆΠ°ΡšΠ΅ Π·Π° ΡƒΠ±Π°Π²ΠΈ Π·Π½Π°Ρ‡ΠΊΠΈ со статуси, покриСност Π½Π° ΠΊΠΎΠ΄, Π²Π΅Ρ€Π·ΠΈΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π²ΠΎ nuget... И ΠΎΠ²Π° Ρ‡Π΅ΡˆΠ°ΡšΠ΅ ΠΌΠ΅ Π½Π°Π²Π΅Π΄Π΅ Π΄Π° ја напишам ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°. ΠŸΠΎΠ΄Π³ΠΎΡ‚Π²ΡƒΠ²Π°Ρ˜ΡœΠΈ сС Π΄Π° Π³ΠΎ напишам, ја Π΄ΠΎΠ±ΠΈΠ² ΠΎΠ²Π°Π° ΡƒΠ±Π°Π²ΠΈΡ†Π° Π²ΠΎ Π΅Π΄Π΅Π½ ΠΎΠ΄ ΠΌΠΎΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ:

Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° CI/CD Π²ΠΎ GitLab Π·Π° (рСчиси) апсолутСн ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊ

Оваа ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ќС Π²Π΅ Π²ΠΎΠ΄ΠΈ Π½ΠΈΠ· основното ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚ΠΈΠ½ΡƒΠΈΡ€Π°Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π° ΠΈ испорака Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π·Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΠ΄ класа .Net Core Π²ΠΎ GitLab, ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° страницитС Π½Π° GitLab ΠΈ Ρ‚ΡƒΡ€ΠΊΠ°ΡšΠ΅ Π½Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π΄ΠΎ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π΅Π½ ΠΈΠ·Π²ΠΎΡ€ Π²ΠΎ Azure DevOps.

VS Code бСшС користСн ΠΊΠ°ΠΊΠΎ Ρ€Π°Π·Π²ΠΎΡ˜Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π° со наставката Π Π°Π±ΠΎΡ‚Π΅Π½ Ρ‚Π΅ΠΊ Π½Π° GitLab (Π·Π° ΠΏΠΎΡ‚Π²Ρ€Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° со поставки Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ΄ Ρ€Π°Π·Π²ΠΎΡ˜Π½Π°Ρ‚Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°).

ΠšΡ€Π°Ρ‚ΠΎΠΊ Π²ΠΎΠ²Π΅Π΄

Π¦Π” - Π΄Π°Π»ΠΈ Π΅ ΠΊΠΎΠ³Π° само стС Ρ‚ΡƒΡ€Π½Π°Π»Π΅, Π° вСќС сС ΠΏΠ°Π΄Π½Π°Π»ΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚?

Π¨Ρ‚ΠΎ Π΅ CI / CD ΠΈ Π·ΠΎΡˆΡ‚ΠΎ Π²ΠΈ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ - ΠΌΠΎΠΆΠ΅Ρ‚Π΅ лСсно Π΄Π° Π³ΠΎ Π³ΡƒΠ³Π»Π°Ρ‚Π΅. ΠΠ°Ρ˜Π΄Π΅Ρ‚Π΅ цСлосна Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ†Π΅Π²ΠΊΠΎΠ²ΠΎΠ΄ΠΈ Π²ΠΎ GitLab исто Ρ‚Π°ΠΊΠ° лСсно. ОвдС Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΈ, Π°ΠΊΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ, Π±Π΅Π· нСдостатоци ќС Π³ΠΎ опишам процСсот Π½Π° систСмот ΠΎΠ΄ ΠΏΡ‚ΠΈΡ‡Ρ˜Π° пСрспСктива:

  • Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ΠΎΡ‚ ΠΈΡΠΏΡ€Π°ΡœΠ° Π·Π°Π»ΠΎΠ³ Π΄ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ, создава Π±Π°Ρ€Π°ΡšΠ΅ Π·Π° ΡΠΏΠΎΡ˜ΡƒΠ²Π°ΡšΠ΅ ΠΏΡ€Π΅ΠΊΡƒ страницата, ΠΈΠ»ΠΈ Π½Π° нСкој Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½ Сксплицитно ΠΈΠ»ΠΈ ΠΈΠΌΠΏΠ»ΠΈΡ†ΠΈΡ‚Π½ΠΎ Π³ΠΎ стартува гасоводот,
  • ситС Π·Π°Π΄Π°Ρ‡ΠΈ сС ΠΈΠ·Π±Ρ€Π°Π½ΠΈ ΠΎΠ΄ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°, Ρ‡ΠΈΠΈ услови Π΄ΠΎΠ·Π²ΠΎΠ»ΡƒΠ²Π°Π°Ρ‚ Π΄Π° сС стартуваат Π²ΠΎ Π΄Π°Π΄Π΅Π½ΠΈΠΎΡ‚ контСкст,
  • Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ сС ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ спорСд Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ Ρ„Π°Π·ΠΈ,
  • Ρ„Π°Π·ΠΈΡ‚Π΅ сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°Π°Ρ‚ Π·Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ - Ρ‚.Π΅. ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ситС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠ΄ ΠΎΠ²Π°Π° Ρ„Π°Π·Π° сС Π·Π°Π²Ρ€ΡˆΠ΅Π½ΠΈ,
  • Π°ΠΊΠΎ сцСната Π½Π΅ успСС (Ρ‚.Π΅., Π±Π°Ρ€Π΅ΠΌ Π΅Π΄Π½Π° ΠΎΠ΄ Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ Π½Π° сцСната Π½Π΅ успСС), гасоводот Π·Π°ΠΏΠΈΡ€Π° (рСчиси сСкогаш),
  • Π°ΠΊΠΎ ситС Ρ„Π°Π·ΠΈ сС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Ρ€ΡˆΠ΅Π½ΠΈ, гасоводот сС смСта Π·Π° ΡƒΡΠΏΠ΅ΡˆΠ΅Π½.

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

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

Π‘ΠΎΠΎΠ΄Π²Π΅Ρ‚Π½ΠΎ Π½Π° Ρ‚ΠΎΠ°, Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° ΠΏΡ€ΠΈ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° CI / CD сС свСдува Π½Π° создавањС Π·Π±ΠΈΡ€ Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ ΡˆΡ‚ΠΎ Π³ΠΈ спровСдуваат ситС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π΄Π΅Ρ˜ΡΡ‚Π²Π° Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅, Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ ΠΈ ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅ ΠΊΠΎΠ΄ ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ.

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

  • Π—ΠΎΡˆΡ‚ΠΎ Gitlab?

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

  • Π—ΠΎΡˆΡ‚ΠΎ Π½Π΅ Azure DevOps Pipelines?

Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ Ρ‚Π°ΠΌΡƒ поставката Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½Π° - Π΄ΡƒΡ€ΠΈ ΠΈ Π½Π΅ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ познавањС Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° линија. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π° со Π½Π°Π΄Π²ΠΎΡ€Π΅ΡˆΠ½ΠΈ ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€ΠΈ Π½Π° git - со Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ кликања, ΡƒΠ²ΠΎΠ· Π½Π° SSH ΠΊΠ»ΡƒΡ‡Π΅Π²ΠΈ Π·Π° ΠΈΡΠΏΡ€Π°ΡœΠ°ΡšΠ΅ Π½Π° обврски Π΄ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ - исто Ρ‚Π°ΠΊΠ°, Π½Π°Ρ„Ρ‚ΠΎΠ²ΠΎΠ΄ΠΎΡ‚ лСсно сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° Π΄ΡƒΡ€ΠΈ ΠΈ Π½Π΅ ΠΎΠ΄ шаблон.

ΠŸΠΎΡ‡Π΅Ρ‚Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡ˜Π°: ΡˆΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ ΠΈ ΡˆΡ‚ΠΎ сакатС

НиС имамС:

  • ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ Π²ΠΎ GitLab.

НиС сакамС:

  • автоматско ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π·Π° сСкоС Π±Π°Ρ€Π°ΡšΠ΅ Π·Π° ΡΠΏΠΎΡ˜ΡƒΠ²Π°ΡšΠ΅,
  • Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° сСкоС Π±Π°Ρ€Π°ΡšΠ΅ Π·Π° ΡΠΏΠΎΡ˜ΡƒΠ²Π°ΡšΠ΅ ΠΈ ΠΏΡ€ΠΈΡ‚ΠΈΡΠΊΠ°ΡšΠ΅ Π΄ΠΎ Π³Π»Π°Π²Π½ΠΈΠΎΡ‚, ΠΏΠΎΠ΄ услов Π΄Π° ΠΈΠΌΠ° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° линија Π²ΠΎ ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π° Π·Π° commit,
  • ΠΈΡΠΏΡ€Π°ΡœΠ°ΡšΠ΅ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π΄ΠΎ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π΅Π½ ΠΈΠ·Π²ΠΎΡ€ Π²ΠΎ Azure DevOps,
  • ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠΈ ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ GitLab Pages,
  • бСџови!11

ΠžΠΏΠΈΡˆΠ°Π½ΠΈΡ‚Π΅ Π±Π°Ρ€Π°ΡšΠ° органски ΠΏΠ°Ρ“Π°Π°Ρ‚ Π½Π° слСдниов ΠΌΠΎΠ΄Π΅Π» Π½Π° Ρ†Π΅Π²ΠΊΠΎΠ²ΠΎΠ΄:

  • Π€Π°Π·Π° 1 - ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅
    • Π“ΠΎ собирамС ΠΊΠΎΠ΄ΠΎΡ‚, Π³ΠΈ ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΠΌΠ΅ ΠΈΠ·Π»Π΅Π·Π½ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠ°ΠΊΠΎ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ
  • Π€Π°Π·Π° 2 - Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅
    • Π”ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ ΠΎΠ΄ Ρ„Π°Π·Π°Ρ‚Π° Π½Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°, ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΠΌΠ΅ тСстови, собирамС ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° ΠΏΠΎΠΊΡ€ΠΈΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚
  • Π€Π°Π·Π° 3 - ПоднСси
    • Π—Π°Π΄Π°Ρ‡Π° 1 - ΠΈΠ·Π³Ρ€Π°Π΄Π΅Ρ‚Π΅ Π³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ nuget ΠΈ испратСтС Π³ΠΎ Π΄ΠΎ Azure DevOps
    • Π—Π°Π΄Π°Ρ‡Π° 2 - ја собирамС страницата ΠΎΠ΄ xmldoc Π²ΠΎ ΠΈΠ·Π²ΠΎΡ€Π½ΠΈΠΎΡ‚ ΠΊΠΎΠ΄ ΠΈ ја ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΠΌΠ΅ Π²ΠΎ GitLab Pages

АјдС Π΄Π° ΠΏΠΎΡ‡Π½Π΅ΠΌΠ΅!

Π‘ΠΎΠ±ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π° смСтки

  1. ΠšΡ€Π΅ΠΈΡ€Π°Ρ˜Ρ‚Π΅ смСтка Π²ΠΎ ΠœΠ°Ρ˜ΠΊΡ€ΠΎΡΠΎΡ„Ρ‚ Π‘ΠΈΠ½ΠΎ

  2. Оди до Azure DevOps

  3. Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π½ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

    1. ИмС - коС било
    2. Видливост - која Π±ΠΈΠ»ΠΎ
      Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° CI/CD Π²ΠΎ GitLab Π·Π° (рСчиси) апсолутСн ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊ

  4. Кога ќС ΠΊΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ Π½Π° ΠΊΠΎΠΏΡ‡Π΅Ρ‚ΠΎ ΠšΡ€Π΅ΠΈΡ€Π°Ρ˜, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ ќС сС ΠΊΡ€Π΅ΠΈΡ€Π° ΠΈ ќС Π±ΠΈΠ΄Π΅Ρ‚Π΅ прСнасочСни Π½Π° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° страница. На ΠΎΠ²Π°Π° страница, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠΈΡ‚Π΅ Π½Π΅ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ со одСњС Π΄ΠΎ поставкитС Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ (Π΄ΠΎΠ»Π½Π°Ρ‚Π° врска Π²ΠΎ списокот Π»Π΅Π²ΠΎ -> ΠŸΡ€Π΅Π³Π»Π΅Π΄ -> Π‘Π»ΠΎΠΊ Π½Π° услуги Π½Π° Azure DevOps)
    Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° CI/CD Π²ΠΎ GitLab Π·Π° (рСчиси) апсолутСн ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊ

  5. ΠžΠ΄Π΅Ρ‚Π΅ Π²ΠΎ Atrifacts, ΠΊΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ ΠšΡ€Π΅ΠΈΡ€Π°Ρ˜ ΠΈΠ·Π²ΠΎΡ€

    1. ВнСсСтС Π³ΠΎ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΈΠ·Π²ΠΎΡ€ΠΎΡ‚
    2. Π˜Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ видливост
    3. ΠžΡ‚ΡˆΡ‚ΠΈΠΊΠ»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π’ΠΊΠ»ΡƒΡ‡Π΅Ρ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΎΠ΄ Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠΈ јавни ΠΈΠ·Π²ΠΎΡ€ΠΈ, Π·Π° Π΄Π° Π½Π΅ сС ΠΏΡ€Π΅Ρ‚Π²ΠΎΡ€ΠΈ ΠΈΠ·Π²ΠΎΡ€ΠΎΡ‚ Π²ΠΎ ΠΊΠ»ΠΎΠ½ Π½Π° дСпонија
      Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° CI/CD Π²ΠΎ GitLab Π·Π° (рСчиси) апсолутСн ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊ

  6. ΠšΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ ΠŸΠΎΠ²Ρ€Π·ΠΈ сС Π·Π° Π΄ΠΎΠ²ΠΎΠ΄, ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Visual Studio, ΠΊΠΎΠΏΠΈΡ€Π°Ρ˜Ρ‚Π΅ Source ΠΎΠ΄ Π±Π»ΠΎΠΊΠΎΡ‚ Machine Setup
    Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° CI/CD Π²ΠΎ GitLab Π·Π° (рСчиси) апсолутСн ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊ

  7. ΠžΠ΄Π΅Ρ‚Π΅ Π΄ΠΎ поставкитС Π½Π° смСтката, ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½ Π·Π° Π»ΠΈΡ‡Π΅Π½ пристап
    Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° 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?

Π‘Γ¨ Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ - стандардно, Ρ‚Ρ€ΠΊΠ°Ρ‡ΠΈΡ‚Π΅ (ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π½ΠΈ Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ скрипти Π·Π° Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ ΠΎΠ΄ 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, Π²ΠΎ ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†ΠΎΡ‚ Connect to feed, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ Π΅ сСкогаш Π»ΠΈΠ½ΠΈΡ˜Π°Ρ‚Π° az.
    4. -skipduplicate - ΠΊΠΎΠ³Π° сС ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π°Ρ‚Π΅ Π΄Π° испратитС вСќС постоСчки ΠΏΠ°ΠΊΠ΅Ρ‚ Π±Π΅Π· овој ΠΊΠ»ΡƒΡ‡, ΠΈΠ·Π²ΠΎΡ€ΠΎΡ‚ ќС Π²Ρ€Π°Ρ‚ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ° 409 Conflict; со ΠΊΠ»ΡƒΡ‡ΠΎΡ‚, ΠΈΡΠΏΡ€Π°ΡœΠ°ΡšΠ΅Ρ‚ΠΎ ќС сС прСскокнС.

Π‘Π΅Π³Π° Π΄Π° Π³ΠΎ поставимС ΡΠΎΠ·Π΄Π°Π²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°:

  1. ΠŸΡ€Π²ΠΎ, Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ, Π²ΠΎ Π³Π»Π°Π²Π½Π°Ρ‚Π° Π³Ρ€Π°Π½ΠΊΠ°, Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ docfx. Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, ΠΈΠ·Π²Ρ€ΡˆΠ΅Ρ‚Π΅ ја ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΎΠ΄ ΠΊΠΎΡ€Π΅Π½ΠΎΡ‚ 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 Artifacts исто Ρ‚Π°ΠΊΠ° Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Π·Π½Π°Ρ‡ΠΊΠΈ Π·Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ со Π½Π°Ρ˜Π½ΠΎΠ²Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°. Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, Π²ΠΎ ΠΈΠ·Π²ΠΎΡ€ΠΎΡ‚ Π½Π° страницата Azure DevOps, Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΊΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ Π½Π° ΠšΡ€Π΅ΠΈΡ€Π°Ρ˜ Π·Π½Π°Ρ‡ΠΊΠ° Π·Π° ΠΈΠ·Π±Ρ€Π°Π½ΠΈΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ Π΄Π° ја ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ ΠΎΠ·Π½Π°ΠΊΠ°Ρ‚Π° Π·Π° ΠΎΠ·Π½Π°Ρ‡ΡƒΠ²Π°ΡšΠ΅:

Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° CI/CD Π²ΠΎ GitLab Π·Π° (рСчиси) апсолутСн ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊ

Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° CI/CD Π²ΠΎ GitLab Π·Π° (рСчиси) апсолутСн ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊ

Π”ΠΎΠ΄Π°Π²Π°ΡšΠ΅ ΡƒΠ±Π°Π²ΠΈΠ½Π°

Π˜ΡΡ‚Π°ΠΊΠ½ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π²ΠΎΠΎΠ±ΠΈΡ‡Π°Π΅Π½ΠΈ конфигурациски Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈ

Π”ΠΎΠ΄Π΅ΠΊΠ° ја ΠΏΠΈΡˆΡƒΠ²Π°Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΈ ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°Π² Π½ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°, Π½Π°ΠΈΠ΄ΠΎΠ² Π½Π° Π΅Π΄Π½Π° интСрСсна карактСристика Π½Π° YAML - ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈ.

Како ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΠ΄ поставкитС Π·Π° Π·Π°Π΄Π°Ρ‡ΠΈ, ситС Ρ‚ΠΈΠ΅ Π±Π°Ρ€Π°Π°Ρ‚ ΠΎΠ·Π½Π°ΠΊΠ° windows кај Ρ‚Ρ€ΠΊΠ°Ρ‡ΠΎΡ‚ ΠΈ сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π°Ρ‚ ΠΊΠΎΠ³Π° Π±Π°Ρ€Π°ΡšΠ΅Ρ‚ΠΎ Π·Π° ΡΠΏΠΎΡ˜ΡƒΠ²Π°ΡšΠ΅ Π΅ испратСно Π΄ΠΎ Π³Π»Π°Π²Π½ΠΈΠΎΡ‚/создадСн (освСн Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°). Π”Π° Π³ΠΎ Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΠΎΠ²Π° Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΡ‚ ΡˆΡ‚ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ќС Π³ΠΎ користимС:

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

И сСга ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΎ Π²ΠΌΠ΅Ρ‚Π½Π΅ΠΌΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΡ‚ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Π½ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ Π²ΠΎ описот Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π°:

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

Π˜ΠΌΠΈΡšΠ°Ρ‚Π° Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ ΠΌΠΎΡ€Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ‚ со Ρ‚ΠΎΡ‡ΠΊΠ°, Π·Π° Π΄Π° Π½Π΅ сС Ρ‚ΠΎΠ»ΠΊΡƒΠ²Π°Π°Ρ‚ ΠΊΠ°ΠΊΠΎ Π·Π°Π΄Π°Ρ‡Π°.

Π’Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ

Кога ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ΠΎΡ‚ Π³ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° ΠΏΡ€Π΅ΠΊΠΈΠ½ΡƒΠ²Π°Ρ‡ΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° линија, Π° Π²ΠΎ Π½ΠΈΠ²Π½ΠΎ отсуство, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ; ΠΊΠΎΠ³Π° ќС најдС јазол Π½Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π°, ја Π·Π΅ΠΌΠ° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° врСдност ΠΊΠ°ΠΊΠΎ Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ ΡˆΡ‚ΠΎ сС Π³Ρ€Π°Π΄ΠΈ. Π˜Π·Π»Π΅Π³ΡƒΠ²Π° Π΄Π΅ΠΊΠ° Π·Π° Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ со Π½ΠΎΠ²Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°, Ρ‚Ρ€Π΅Π±Π° ΠΈΠ»ΠΈ Π΄Π° Π³ΠΎ Π°ΠΆΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Π²ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΈΠ»ΠΈ Π΄Π° Π³ΠΎ прСнСсСтС ΠΊΠ°ΠΊΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° линија.

АјдС Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΡƒΡˆΡ‚Π΅ Π΅Π΄Π½Π° листа Π½Π° ΠΆΠ΅Π»Π±ΠΈ - ΠΌΠ°Π»ΠΈΡ‚Π΅ Π΄Π²Π° Π±Ρ€ΠΎΡ˜Π° Π²ΠΎ Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° Π½Π΅ΠΊΠ° Π±ΠΈΠ΄Π°Ρ‚ Π³ΠΎΠ΄ΠΈΠ½Π°Ρ‚Π° ΠΈ Π΄Π°Ρ‚ΡƒΠΌΠΎΡ‚ Π½Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ ΠΈ Π΄ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ Π²Π΅Ρ€Π·ΠΈΠΈ Π·Π° ΠΏΡ€Π΅Π΄ΠΈΠ·Π΄Π°Π²Π°ΡšΠ΅. Π‘Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π°Ρ‚Π΅ ΠΏΡ€Π΅Π΄ сСкоС ΠΏΠΎΠ΄Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ - Π½ΠΎ исто Ρ‚Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ° Π²ΠΎ Π½Π°Ρ„Ρ‚ΠΎΠ²ΠΎΠ΄ΠΎΡ‚, ΡΠΎΠ±ΠΈΡ€Π°Ρ˜ΡœΠΈ ја Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ ΠΎΠ΄ контСкстот ΠΈ ΠΏΡ€Π΅Π½Π΅ΡΡƒΠ²Π°Ρ˜ΡœΠΈ ја Π½ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΡ‚ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° линија.

Π”Π° сС ​​согласимС Π΄Π΅ΠΊΠ° Π°ΠΊΠΎ ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π° Π·Π° commit содрТи линија ΠΊΠ°ΠΊΠΎ 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 ΠΈ Π½Π°Π±Ρ™ΡƒΠ΄ΡƒΠ²Π°Ρ˜Ρ‚Π΅ Π³ΠΎ ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ строго Π²ΠΎ присуство Π½Π° Π΄Π°Π΄Π΅Π½ стринг Π²ΠΎ ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π° Π·Π° commit.

Π’ΠΎ Π²ΠΊΡƒΠΏΠ΅Π½

ΠžΡ‚ΠΊΠ°ΠΊΠΎ ΠΏΠΎΠΌΠΈΠ½Π°Π²ΠΌΠ΅ ΠΎΠΊΠΎΠ»Ρƒ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° час ΠΈΠ»ΠΈ Π΅Π΄Π΅Π½ час Π·Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°, Π΄Π΅Π±Π°Π³ΠΈΡ€Π°ΡšΠ΅ Π²ΠΎ Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° моќна школка ΠΈ, ΠΌΠΎΠΆΠ΅Π±ΠΈ, Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ Π»Π°Π½ΡΠΈΡ€Π°ΡšΠ°, Π΄ΠΎΠ±ΠΈΠ²ΠΌΠ΅ Сдноставна ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° рутинскитС Π·Π°Π΄Π°Ρ‡ΠΈ.

Π‘Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°, GitLab CI / CD Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠΎΠ±Π΅ΠΌΠ½ΠΎ ΠΈ повСќСслојно ΠΎΡ‚ΠΊΠΎΠ»ΠΊΡƒ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΎΡ‚ΠΊΠ°ΠΊΠΎ ќС Π³ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅ овој Π²ΠΎΠ΄ΠΈΡ‡ - Ρ‚ΠΎΠ° Π²ΠΎΠΎΠΏΡˆΡ‚ΠΎ Π½Π΅ Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ. Π”ΡƒΡ€ΠΈ ΠΈ Ρ‚Π°ΠΌΡƒ Автоматски DevOps Π΅Π΄ΠΎΠ·Π²ΠΎΠ»ΡƒΠ²Π°Ρ˜ΡœΠΈ

автоматско ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°ΡšΠ΅, Π³Ρ€Π°Π΄Π΅ΡšΠ΅, Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅, Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ ΠΈ слСдСњС Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ

Π‘Π΅Π³Π° ΠΏΠ»Π°Π½ΠΎΠ²ΠΈΡ‚Π΅ сС Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° Ρ†Π΅Π²ΠΊΠ° Π·Π° Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° Azure, ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Pulumi ΠΈ автоматско ΠΎΠ΄Ρ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Ρ†Π΅Π»Π½Π°Ρ‚Π° срСдина, ΡˆΡ‚ΠΎ ќС Π±ΠΈΠ΄Π΅ ΠΎΠΏΡ„Π°Ρ‚Π΅Π½ΠΎ Π²ΠΎ слСдната ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°.

Π˜Π·Π²ΠΎΡ€: www.habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π΄ΠΎΠ²Π΅Ρ€Π»ΠΈΠ² хостинг Π·Π° ΡΠ°Ρ˜Ρ‚ΠΎΠ²ΠΈ со DDoS Π·Π°ΡˆΡ‚ΠΈΡ‚Π°, VPS VDS сСрвСри πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ сигурСн Π²Π΅Π±-хостинг со DDoS Π·Π°ΡˆΡ‚ΠΈΡ‚Π°, VPS VDS сСрвСри | ProHoster