Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° ЦИ/Π¦Π” Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ Π·Π° (скоро) апсолутнС ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊΠ΅

Или ΠΊΠ°ΠΊΠΎ Π΄Π° Π΄ΠΎΠ±ΠΈΡ˜Π΅Ρ‚Π΅ ΠΏΡ€Π΅Π»Π΅ΠΏΠ΅ Π·Π½Π°Ρ‡ΠΊΠ΅ Π·Π° свој ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚ Ρƒ јСдној Π²Π΅Ρ‡Π΅Ρ€ΠΈ ΠΎΠΏΡƒΡˆΡ‚Π΅Π½ΠΎΠ³ ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ°

Π’Π΅Ρ€ΠΎΠ²Π°Ρ‚Π½ΠΎ сваки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ који Ρƒ Π½Π΅ΠΊΠΎΠΌ Ρ‚Ρ€Π΅Π½ΡƒΡ‚ΠΊΡƒ ΠΈΠΌΠ° Π±Π°Ρ€ јСдан ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚ Π·Π° ΠΊΡƒΡ›Π½Π΅ Ρ™ΡƒΠ±ΠΈΠΌΡ†Π΅ ΠΈΠΌΠ° свраб Π·Π° Π»Π΅ΠΏΠΈΠΌ бСџСвима са статусима, ΠΏΠΎΠΊΡ€ΠΈΠ²Π΅Π½ΠΎΡˆΡ›Ρƒ ΠΊΠΎΠ΄Π°, Π²Π΅Ρ€Π·ΠΈΡ˜Π°ΠΌΠ° ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρƒ Π½ΡƒΠ³Π΅Ρ‚Ρƒ... И овај свраб ΠΌΠ΅ јС Π½Π°Π²Π΅ΠΎ Π΄Π° напишСм овај Ρ‡Π»Π°Π½Π°ΠΊ. Π£ процСсу ΠΏΡ€ΠΈΠΏΡ€Π΅ΠΌΠ΅ Π·Π° писањС, стСкао сам ΠΎΠ²Ρƒ Π»Π΅ΠΏΠΎΡ‚Ρƒ Ρƒ јСдном ΠΎΠ΄ ΡΠ²ΠΎΡ˜ΠΈΡ… ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚Π°:

Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° ЦИ/Π¦Π” Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ Π·Π° (скоро) апсолутнС ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊΠ΅

Овај Ρ‡Π»Π°Π½Π°ΠΊ Ρ›Π΅ ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈ основно подСшавањС ΠΊΠΎΠ½Ρ‚ΠΈΠ½ΡƒΠΈΡ€Π°Π½Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π΅ ΠΈ испорукС Π·Π° ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ класа .НСт Π¦ΠΎΡ€Π΅ Ρƒ Π“ΠΈΡ‚Π›Π°Π±-Ρƒ, ΠΎΠ±Ρ˜Π°Π²Ρ™ΠΈΠ²Π°ΡšΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ Π½Π° Π“ΠΈΡ‚Π›Π°Π± страницама ΠΈ слањС ΠΏΡ€ΠΈΠΊΡƒΠΏΡ™Π΅Π½ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρƒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΈ Ρ„ΠΈΠ΄ Ρƒ АзурС Π”Π΅Π²ΠžΠΏΡ.

Π’Π‘ Π¦ΠΎΠ΄Π΅ са Π΅ΠΊΡΡ‚Π΅Π½Π·ΠΈΡ˜ΠΎΠΌ јС ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅Π½ ΠΊΠ°ΠΎ Ρ€Π°Π·Π²ΠΎΡ˜Π½ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ΅ Π“ΠΈΡ‚Π›Π°Π± Π’ΠΎΡ€ΠΊΡ„Π»ΠΎΠ² (Π΄Π° бистС ΠΏΠΎΡ‚Π²Ρ€Π΄ΠΈΠ»ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ поставки Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΠ· Ρ€Π°Π·Π²ΠΎΡ˜Π½ΠΎΠ³ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ°).

ΠšΡ€Π°Ρ‚ΠΊΠΈ ΡƒΠ²ΠΎΠ΄

Π¦Π” јС ΠΊΠ°Π΄Π° стС само Π³ΡƒΡ€Π½ΡƒΠ»ΠΈ, Π° ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚ јС Π²Π΅Ρ› свС ΠΈΠ·Π³ΡƒΠ±ΠΈΠΎ?

Π¨Ρ‚Π° јС ЦИ/Π¦Π” ΠΈ Π·Π°ΡˆΡ‚ΠΎ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Π½? ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π³Π° Π»Π°ΠΊΠΎ ΠΏΡ€ΠΎΠ³ΡƒΠ³Π»Π°Ρ‚ΠΈ. ΠŸΡ€ΠΎΠ½Π°Ρ’ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚Π½Ρƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ ΠΎ ΠΏΠΎΠ΄Π΅ΡˆΠ°Π²Π°ΡšΡƒ Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄Π° Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ Ρ‚Π°ΠΊΠΎΡ’Π΅ Π»Π°ΠΊΠΎ. ОвдС Ρ›Ρƒ ΡƒΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΈ, Π°ΠΊΠΎ јС ΠΌΠΎΠ³ΡƒΡ›Π΅, Π±Π΅Π· нСдостатака, описати процСс систСма ΠΈΠ· ΠΏΡ‚ΠΈΡ‡Ρ˜Π΅ пСрспСктивС:

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

Π’Π°ΠΊΠΎ ΠΈΠΌΠ°ΠΌΠΎ:

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

Π‘Ρ…ΠΎΠ΄Π½ΠΎ Ρ‚ΠΎΠΌΠ΅, Π·Π°Π΄Π°Ρ‚Π°ΠΊ ΠΏΡ€ΠΈ ΠΏΠΎΡΡ‚Π°Π²Ρ™Π°ΡšΡƒ ЦИ/Π¦Π”-Π° сС своди Π½Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ скупа Π·Π°Π΄Π°Ρ‚Π°ΠΊΠ° који ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ˜Ρƒ свС Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½Π΅ Ρ€Π°Π΄ΡšΠ΅ Π·Π° склапањС, Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ ΠΈ ΠΎΠ±Ρ˜Π°Π²Ρ™ΠΈΠ²Π°ΡšΠ΅ ΠΊΠΎΠ΄Π° ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΠ°Ρ‚Π°.

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

  • Π—Π°ΡˆΡ‚ΠΎ Π“ΠΈΡ‚Π›Π°Π±?

ΠˆΠ΅Ρ€ ΠΊΠ°Π΄Π° сС појавила ΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ΠΌ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΈΡ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡ˜Π° Π·Π° ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π΅ ΠΊΡƒΡ›Π½ΠΈΡ… Ρ™ΡƒΠ±ΠΈΠΌΠ°Ρ†Π°, ΠΎΠ½ΠΈ су Π±ΠΈΠ»ΠΈ ΠΏΠ»Π°Ρ›Π΅Π½ΠΈ Π½Π° Π“ΠΈΡ‚Π₯ΡƒΠ±-Ρƒ, Π° ја сам Π±ΠΈΠΎ ΠΏΠΎΡ…Π»Π΅ΠΏΠ°Π½. Π‘ΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π° су постала бСсплатна, Π°Π»ΠΈ Π·Π° сада ΠΎΠ²ΠΎ нијС Π΄ΠΎΠ²ΠΎΡ™Π½ΠΎ Π΄ΠΎΠ±Π°Ρ€ Ρ€Π°Π·Π»ΠΎΠ³ Π΄Π° ΠΏΡ€Π΅Ρ’Π΅ΠΌ Π½Π° Π“ΠΈΡ‚Π₯ΡƒΠ±.

  • Π—Π°ΡˆΡ‚ΠΎ Π½Π΅ АзурС Π”Π΅Π²ΠžΠΏΡ ПипСлинСс?

ΠŸΠΎΡˆΡ‚ΠΎ јС подСшавањС Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ - нијС Π²Π°ΠΌ Π½ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ знањС ΠΊΠΎΠΌΠ°Π½Π΄Π½Π΅ линијС. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π° са спољним Π³ΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€ΠΈΠΌΠ° – Ρƒ ΠΏΠ°Ρ€ ΠΊΠ»ΠΈΠΊΠΎΠ²Π°, ΡƒΠ²ΠΎΠ· Π‘Π‘Π₯ ΠΊΡ™ΡƒΡ‡Π΅Π²Π° Π·Π° слањС ΡƒΡ€Π΅Π·ΠΈΠ²Π°ΡšΠ° Ρƒ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅ – Ρ‚Π°ΠΊΠΎΡ’Π΅, Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄ сС Π»Π°ΠΊΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠ΅ Ρ‡Π°ΠΊ ΠΈ Π±Π΅Π· шаблона.

ΠŸΠΎΡ‡Π΅Ρ‚Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡ˜Π°: ΡˆΡ‚Π° ΠΈΠΌΠ°Ρ‚Π΅ ΠΈ ΡˆΡ‚Π° ΠΆΠ΅Π»ΠΈΡ‚Π΅

Имамо:

  • ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅ Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ.

Π–Π΅Π»ΠΈΠΌΠΎ:

  • аутоматско склапањС ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π·Π° сваки Π·Π°Ρ…Ρ‚Π΅Π² Π·Π° спајањС,
  • ΠΏΡ€Π°Π²Ρ™Π΅ΡšΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π·Π° сваки Π·Π°Ρ…Ρ‚Π΅Π² Π·Π° спајањС ΠΈ Π³ΡƒΡ€Π°ΡšΠ΅ Π΄ΠΎ мастСра, ΠΏΠΎΠ΄ условом Π΄Π° ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½Π° линија Ρƒ ΠΏΠΎΡ€ΡƒΡ†ΠΈ ΡƒΡ€Π΅Π·ΠΈΠ²Π°ΡšΠ°,
  • слањС ΠΏΡ€ΠΈΠΊΡƒΠΏΡ™Π΅Π½ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρƒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΈ Ρ„ΠΈΠ΄ Ρƒ АзурС Π”Π΅Π²ΠžΠΏΡ-Ρƒ,
  • ΡΠ°ΡΡ‚Π°Π²Ρ™Π°ΡšΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ ΠΈ ΠΎΠ±Ρ˜Π°Π²Ρ™ΠΈΠ²Π°ΡšΠ΅ Ρƒ Π“ΠΈΡ‚Π›Π°Π± ПагСс,
  • Π·Π½Π°Ρ‡ΠΊΠ΅!11

Описани Π·Π°Ρ…Ρ‚Π΅Π²ΠΈ сС ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π½ΠΎ ΡƒΠΊΠ»Π°ΠΏΠ°Ρ˜Ρƒ Ρƒ слСдСћи ΠΌΠΎΠ΄Π΅Π» Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄Π°:

  • Π€Π°Π·Π° 1 - ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ°
    • Π‘Π°ΠΊΡƒΠΏΡ™Π°ΠΌΠΎ ΠΊΠΎΠ΄, ΠΎΠ±Ρ˜Π°Π²Ρ™ΡƒΡ˜Π΅ΠΌΠΎ ΠΈΠ·Π»Π°Π·Π½Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ ΠΊΠ°ΠΎ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π΅
  • Π€Π°Π·Π° 2 - Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅
    • ΠŸΡ€ΠΈΠΌΠ°ΠΌΠΎ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π΅ ΠΈΠ· Ρ„Π°Π·Π΅ ΠΈΠ·Ρ€Π°Π΄Π΅, ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ΠΌΠΎ тСстовС, ΠΏΡ€ΠΈΠΊΡƒΠΏΡ™Π°ΠΌΠΎ ΠΏΠΎΠ΄Π°Ρ‚ΠΊΠ΅ ΠΎ покривСности ΠΊΠΎΠ΄Π°
  • Π€Π°Π·Π° 3 - слањС
    • Π—Π°Π΄Π°Ρ‚Π°ΠΊ 1 - ΠΏΡ€ΠΈΠΊΡƒΠΏΠΈΡ‚Π΅ Π½ΡƒΠ³Π΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ ΠΏΠΎΡˆΠ°Ρ™ΠΈΡ‚Π΅ Π³Π° Ρƒ АзурС Π”Π΅Π²ΠžΠΏΡ
    • Π—Π°Π΄Π°Ρ‚Π°ΠΊ 2 - састављамо ΡΠ°Ρ˜Ρ‚ ΠΈΠ· ΠΊΠΌΠ»Π΄ΠΎΡ†-Π° Ρƒ ΠΈΠ·Π²ΠΎΡ€Π½ΠΈ ΠΊΠΎΠ΄ ΠΈ ΠΎΠ±Ρ˜Π°Π²Ρ™ΡƒΡ˜Π΅ΠΌΠΎ Π³Π° Ρƒ Π“ΠΈΡ‚Π›Π°Π± ПагСс

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

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

ΠŸΡ€ΠΈΠΏΡ€Π΅ΠΌΠ° Ρ€Π°Ρ‡ΡƒΠ½Π°

  1. НаправитС Π½Π°Π»ΠΎΠ³ Ρƒ ΠœΠΈΡ†Ρ€ΠΎΡΠΎΡ„Ρ‚ АзурС

  2. Иди Π½Π° АзурС Π”Π΅Π²ΠžΠΏΡ

  3. ΠšΡ€Π΅ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π½ΠΎΠ²ΠΈ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚

    1. ИмС - било којС
    2. Видљивост - Π±ΠΈΠ»ΠΎ која
      Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° ЦИ/Π¦Π” Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ Π·Π° (скоро) апсолутнС ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊΠ΅

  4. Када ΠΊΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ Π½Π° Π΄ΡƒΠ³ΠΌΠ΅ ΠšΡ€Π΅ΠΈΡ€Π°Ρ˜, ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΊΡ€Π΅ΠΈΡ€Π°Π½ ΠΈ Π±ΠΈΡ›Π΅Ρ‚Π΅ ΠΎΠ΄Π²Π΅Π΄Π΅Π½ΠΈ Π½Π° ΡšΠ΅Π³ΠΎΠ²Ρƒ страницу. На овој страници ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠ½Π΅ΠΌΠΎΠ³ΡƒΡ›ΠΈΡ‚Π΅ Π½Π΅ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π΅ Ρ‚Π°ΠΊΠΎ ΡˆΡ‚ΠΎ Ρ›Π΅Ρ‚Π΅ ΠΎΡ‚ΠΈΡ›ΠΈ Π½Π° подСшавања ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π° (доња Π²Π΅Π·Π° Π½Π° листи са Π»Π΅Π²Π΅ странС -> ΠŸΡ€Π΅Π³Π»Π΅Π΄ -> Π±Π»ΠΎΠΊ АзурС Π”Π΅Π²ΠžΠΏΡ БСрвицСс)
    Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° ЦИ/Π¦Π” Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ Π·Π° (скоро) апсолутнС ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊΠ΅

  5. Π˜Π΄ΠΈΡ‚Π΅ Π½Π° Атрифацтс, ΠΊΠ»ΠΈΠΊΠ½ΠΈΡ‚Π΅ Π½Π° ΠšΡ€Π΅ΠΈΡ€Π°Ρ˜ Ρ„ΠΈΠ΄

    1. УнСситС Π½Π°Π·ΠΈΠ² ΠΈΠ·Π²ΠΎΡ€Π°
    2. Π˜Π·Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ видљивост
    3. ΠžΠΏΠΎΠ·ΠΎΠ²ΠΈΡ‚Π΅ ΠΈΠ·Π±ΠΎΡ€ Ρƒ ΠΏΠΎΡ™Ρƒ Π·Π° ΠΏΠΎΡ‚Π²Ρ€Π΄Ρƒ Π£ΠΊΡ™ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΈΠ· ΡƒΠΎΠ±ΠΈΡ‡Π°Ρ˜Π΅Π½ΠΈΡ… Ρ˜Π°Π²Π½ΠΈΡ… ΠΈΠ·Π²ΠΎΡ€Π°Π΄Π° сС ΠΈΠ·Π²ΠΎΡ€ Π½Π΅ ΠΏΡ€Π΅Ρ‚Π²ΠΎΡ€ΠΈ Ρƒ Ρ’ΡƒΠ±Ρ€ΠΈΡˆΡ‚Π΅ Π½ΡƒΠ³Π΅Ρ‚ ΠΊΠ»ΠΎΠ½Π°
      Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° ЦИ/Π¦Π” Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ Π·Π° (скоро) апсолутнС ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊΠ΅

  6. ΠšΠ»ΠΈΠΊΠ½ΠΈΡ‚Π΅ Π½Π° Π¦ΠΎΠ½Π½Π΅Ρ†Ρ‚ Ρ‚ΠΎ Ρ„Π΅Π΅Π΄, ΠΈΠ·Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ Висуал Π‘Ρ‚ΡƒΠ΄ΠΈΠΎ, ΠΊΠΎΠΏΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π‘ΠΎΡƒΡ€Ρ†Π΅ ΠΈΠ· Π±Π»ΠΎΠΊΠ° Π·Π° подСшавањС машинС
    Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° ЦИ/Π¦Π” Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ Π·Π° (скоро) апсолутнС ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊΠ΅

  7. Π˜Π΄ΠΈΡ‚Π΅ Π½Π° подСшавања Π½Π°Π»ΠΎΠ³Π°, ΠΈΠ·Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ Π›ΠΈΡ‡Π½ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ Π·Π° приступ
    Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° ЦИ/Π¦Π” Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ Π·Π° (скоро) апсолутнС ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊΠ΅

  8. ΠšΡ€Π΅ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π½ΠΎΠ²ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ Π·Π° приступ

    1. Назив - ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΡ™Π°Π½
    2. ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° – Π°ΠΊΡ‚ΡƒΠ΅Π»Π½Π°
    3. Рок ваТСња: максимално 1 година
    4. Обим – паковањС/Ρ‡ΠΈΡ‚Π°ΡšΠ΅ ΠΈ писањС
      Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° ЦИ/Π¦Π” Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ Π·Π° (скоро) апсолутнС ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊΠ΅

  9. ΠšΠΎΠΏΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΊΡ€Π΅ΠΈΡ€Π°Π½ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ - Π½Π°ΠΊΠΎΠ½ Π·Π°Ρ‚Π²Π°Ρ€Π°ΡšΠ° ΠΌΠΎΠ΄Π°Π»Π½ΠΎΠ³ ΠΏΡ€ΠΎΠ·ΠΎΡ€Π° врСдност Π½Π΅Ρ›Π΅ Π±ΠΈΡ‚ΠΈ доступна

  10. Π˜Π΄ΠΈΡ‚Π΅ Π½Π° подСшавања ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π° Ρƒ Π“ΠΈΡ‚Π›Π°Π±-Ρƒ, ΠΈΠ·Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ ЦИ/Π¦Π” подСшавања
    Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° ЦИ/Π¦Π” Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ Π·Π° (скоро) апсолутнС ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊΠ΅

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

    1. ИмС - Π±ΠΈΠ»ΠΎ којС Π±Π΅Π· Ρ€Π°Π·ΠΌΠ°ΠΊΠ° (Π±ΠΈΡ›Π΅ доступно Ρƒ командној љусци)
    2. ВрСдност јС приступни Ρ‚ΠΎΠΊΠ΅Π½ ΠΈΠ· ΠΊΠΎΡ€Π°ΠΊΠ° 9
    3. Π˜Π·Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Ρƒ маскС
      Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° ЦИ/Π¦Π” Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ Π·Π° (скоро) апсолутнС ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊΠ΅

Ово Π·Π°Π²Ρ€ΡˆΠ°Π²Π° ΠΏΡ€Π΅Π»ΠΈΠΌΠΈΠ½Π°Ρ€Π½ΠΎ подСшавањС.

ΠŸΡ€ΠΈΠΏΡ€Π΅ΠΌΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½ΠΎΠ³ ΠΎΠΊΠ²ΠΈΡ€Π°

ΠŸΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΎ, Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° која сС користи Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡΠ°ΡšΠ΅ ЦИ/Π¦Π”-Π° Ρƒ Π“ΠΈΡ‚Π›Π°Π±-Ρƒ јС .gitlab-ci.yml ΠΈΠ· ΠΊΠΎΡ€Π΅Π½Π° ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π°. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΡ’Π΅Π½Ρƒ ΠΏΡƒΡ‚Π°ΡšΡƒ Π΄ΠΎ ΠΎΠ²Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ Ρƒ подСшавањима ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π°, Π°Π»ΠΈ Ρƒ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ Ρ‚ΠΎ нијС Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ.

Као ΡˆΡ‚ΠΎ сС ΠΌΠΎΠΆΠ΅ Π²ΠΈΠ΄Π΅Ρ‚ΠΈ ΠΈΠ· Π΅ΠΊΡΡ‚Π΅Π½Π·ΠΈΡ˜Π΅, Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° садрТи ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Ρƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ YAML. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π΄Π΅Ρ‚Π°Ρ™Π½ΠΎ ΠΎΠΏΠΈΡΡƒΡ˜Π΅ који ΠΊΡ™ΡƒΡ‡Π΅Π²ΠΈ ΠΌΠΎΠ³Ρƒ Π±ΠΈΡ‚ΠΈ садрТани Π½Π° највишСм Π½ΠΈΠ²ΠΎΡƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΈ Π½Π° сваком ΠΎΠ΄ ΡƒΠ³Π½Π΅ΠΆΡ’Π΅Π½ΠΈΡ… Π½ΠΈΠ²ΠΎΠ°.

ΠŸΡ€Π²ΠΎ, додајмо Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ Π²Π΅Π·Ρƒ Π΄ΠΎ Π΄ΠΎΡ†ΠΊΠ΅Ρ€ сликС Ρƒ којој Ρ›Π΅ сС Π·Π°Π΄Π°Ρ†ΠΈ ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°Ρ‚ΠΈ. Π”Π° бисмо Ρ‚ΠΎ ΡƒΡ€Π°Π΄ΠΈΠ»ΠΈ Π½Π°Π»Π°Π·ΠΈΠΌΠΎ Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° слика .НСт Π¦ΠΎΡ€Π΅ Π½Π° Π”ΠΎΡ†ΠΊΠ΅Ρ€ Π₯ΡƒΠ±-Ρƒ. Π£ Π“ΠΈΡ‚Π₯ΡƒΠ± ΠŸΠΎΡΡ‚ΠΎΡ˜ΠΈ Π΄Π΅Ρ‚Π°Ρ™Π°Π½ Π²ΠΎΠ΄ΠΈΡ‡ ΠΎ Ρ‚ΠΎΠΌΠ΅ ΠΊΠΎΡ˜Ρƒ слику ΠΎΠ΄Π°Π±Ρ€Π°Ρ‚ΠΈ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‚ΠΊΠ΅. Π‘Π»ΠΈΠΊΠ° са .НСт Π¦ΠΎΡ€Π΅ 3.1 јС ΠΏΠΎΠ³ΠΎΠ΄Π½Π° Π·Π° нас Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠΎ, ΠΏΠ° јС слободно Π΄ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ ΠΊΠ°ΠΎ ΠΏΡ€Π²ΠΈ Ρ€Π΅Π΄ Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ

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

Π‘Π°Π΄Π°, ΠΊΠ°Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅Ρ‚Π΅ Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄, Π½Π°Π²Π΅Π΄Π΅Π½Π° слика Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΏΡ€Π΅ΡƒΠ·Π΅Ρ‚Π° ΠΈΠ· ΠœΠΈΡ†Ρ€ΠΎΡΠΎΡ„Ρ‚ΠΎΠ²ΠΎΠ³ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π° слика, Ρƒ којој Ρ›Π΅ сС ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°Ρ‚ΠΈ сви Π·Π°Π΄Π°Ρ†ΠΈ ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅.

Π‘Π»Π΅Π΄Π΅Ρ›ΠΈ ΠΊΠΎΡ€Π°ΠΊ јС додавањС Ρ„Π°Π·Π°'с. Π“ΠΈΡ‚Π›Π°Π± ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡˆΠ΅ 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. Π’Π’Π€?

Π‘Π²Π΅ јС Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ - ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΎ, Ρ‚Ρ€ΠΊΠ°Ρ‡ΠΈ (ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π½ΠΈ Π·Π° ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ΅ скрипти Π·Π°Π΄Π°Ρ‚Π°ΠΊΠ° ΠΈ којС ΠΎΠ±Π΅Π·Π±Π΅Ρ’ΡƒΡ˜Π΅ Π“ΠΈΡ‚Π›Π°Π±) користС 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

Π”ΠΎΠ±ΠΈΠ»ΠΈ смо Π½Π΅ Π½Π°Ρ€ΠΎΡ‡ΠΈΡ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°Π½, Π°Π»ΠΈ ΠΈΠΏΠ°ΠΊ исправан Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄.

ПодСшавањС ΠΎΠΊΠΈΠ΄Π°Ρ‡Π°

Π—Π±ΠΎΠ³ Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ Π΄Π° нису Π½Π°Π²Π΅Π΄Π΅Π½ΠΈ Ρ„ΠΈΠ»Ρ‚Π΅Ρ€ΠΈ ΠΎΠΊΠΈΠ΄Π°Ρ‡Π° Π½ΠΈ Π·Π° јСдан ΠΎΠ΄ Π·Π°Π΄Π°Ρ‚Π°ΠΊΠ°, Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄ Ρ›Π΅ ΠΏΠΎΡ‚ΠΏΡƒΠ½ΠΎ ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π° сС сваки ΠΏΡƒΡ‚ ΠΊΠ°Π΄Π° сС ΡƒΡ€Π΅Π·ΠΈΠ²Π°ΡšΠ° ΡˆΠ°Ρ™Ρƒ Ρƒ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅. ΠŸΠΎΡˆΡ‚ΠΎ ΠΎΠ²ΠΎ ΡƒΠΎΠΏΡˆΡ‚Π΅ нијС ΠΆΠ΅Ρ™Π΅Π½ΠΎ понашањС, конфигурисаћСмо Ρ„ΠΈΠ»Ρ‚Π΅Ρ€Π΅ ΠΎΠΊΠΈΠ΄Π°Ρ‡Π° Π·Π° Π·Π°Π΄Π°Ρ‚ΠΊΠ΅.

Π€ΠΈΠ»Ρ‚Π΅Ρ€ΠΈ сС ΠΌΠΎΠ³Ρƒ конфигурисати Ρƒ Π΄Π²Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°: само/осим ΠΈ pravila. Π£ΠΊΡ€Π°Ρ‚ΠΊΠΎ, only/except ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π²Π°ΠΌ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠ΅Ρ‚Π΅ Ρ„ΠΈΠ»Ρ‚Π΅Ρ€Π΅ ΠΏΠΎΠΌΠΎΡ›Ρƒ ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°Ρ‡Π° (merge_request, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ - ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠ΅ Π·Π°Π΄Π°Ρ‚Π°ΠΊ Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π° сваки ΠΏΡƒΡ‚ ΠΊΠ°Π΄Π° сС ΠΊΡ€Π΅ΠΈΡ€Π° Π·Π°Ρ…Ρ‚Π΅Π² Π·Π° ΡΡ‚Π°ΠΏΠ°ΡšΠ΅ ΠΈ сваки ΠΏΡƒΡ‚ ΠΊΠ°Π΄Π° сС ΡƒΡ€Π΅Π·ΠΈΠ²Π°ΡšΠ° ΡˆΠ°Ρ™Ρƒ Π³Ρ€Π°Π½ΠΈ која јС ΠΈΠ·Π²ΠΎΡ€ Ρƒ Π·Π°Ρ…Ρ‚Π΅Π²Ρƒ Π·Π° ΡΡ‚Π°ΠΏΠ°ΡšΠ΅) ΠΈ ΠΈΠΌΠ΅Π½Π° Π³Ρ€Π°Π½Π° (ΡƒΠΊΡ™ΡƒΡ‡ΡƒΡ˜ΡƒΡ›ΠΈ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ Ρ€Π΅Π³ΡƒΠ»Π°Ρ€Π½ΠΈΡ… ΠΈΠ·Ρ€Π°Π·Π°); rules ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π²Π°ΠΌ Π΄Π° ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄ΠΈΡ‚Π΅ скуп услова ΠΈ, ΠΎΠΏΡ†ΠΈΠΎΠ½ΠΎ, ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ услов ΠΈΠ·Π²Ρ€ΡˆΠ΅ΡšΠ° Π·Π°Π΄Π°Ρ‚ΠΊΠ° Ρƒ зависности ΠΎΠ΄ успСха ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΈΡ… Π·Π°Π΄Π°Ρ‚Π°ΠΊΠ° (when Ρƒ Π“ΠΈΡ‚Π›Π°Π± ЦИ/Π¦Π”).

ΠŸΠΎΠ΄ΡΠ΅Ρ‚ΠΈΠΌΠΎ сС скупа Π·Π°Ρ…Ρ‚Π΅Π²Π° – склапањС ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ само Π·Π° Π·Π°Ρ…Ρ‚Π΅Π²Π΅ Π·Π° спајањС, паковањС ΠΈ слањС Ρƒ АзурС Π”Π΅Π²ΠžΠΏΡ – Π·Π° Π·Π°Ρ…Ρ‚Π΅Π²Π΅ Π·Π° спајањС ΠΈ Π³ΡƒΡ€Π°ΡšΠ° ΠΊΠ° мастСру, Π³Π΅Π½Π΅Ρ€ΠΈΡΠ°ΡšΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ – Π·Π° пусх Π΄ΠΎ мастСра.

ΠŸΡ€Π²ΠΎ, поставимо Π·Π°Π΄Π°Ρ‚Π°ΠΊ ΡΠ°ΡΡ‚Π°Π²Ρ™Π°ΡšΠ° ΠΊΠΎΠ΄Π° додавањСм ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΎΠΊΠΈΠ΄Π°Ρ‡Π° којС ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ само Π·Π°Ρ…Ρ‚Π΅Π² Π·Π° спајањС:

build job:
  # snip
  only:
    - merge_request

Π‘Π°Π΄Π° Ρ…Π°Ρ˜Π΄Π΅ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠ΅ΠΌΠΎ Π·Π°Π΄Π°Ρ‚Π°ΠΊ паковања Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅ Π·Π°Ρ…Ρ‚Π΅Π² Π·Π° спајањС ΠΈ Π΄ΠΎΠ΄Π°ΠΌΠΎ ΡƒΡ€Π΅Π·ΠΈΠ²Π°ΡšΠ΅ Π½Π° мастСр:

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

Као ΡˆΡ‚ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅, свС јС Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ ΠΈ јасно.

Π’Π°ΠΊΠΎΡ’Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚Π°ΠΊ Π΄Π° сС ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ само Π°ΠΊΠΎ јС Π·Π°Ρ…Ρ‚Π΅Π² Π·Π° објСдињавањС ΠΊΡ€Π΅ΠΈΡ€Π°Π½ са ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½ΠΎΠΌ Ρ†ΠΈΡ™Π½ΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ·Π²ΠΎΡ€Π½ΠΎΠΌ Π³Ρ€Π°Π½ΠΎΠΌ:

  rules:
    - if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"

Π£ условима сС ΠΌΠΎΠΆΠ΅ користити ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ Π½Π°Π²Π΅Π΄Π΅Π½Π΅ ΠΎΠ²Π΄Π΅; ΠŸΡ€Π°Π²ΠΈΠ»Π° rules нијС Ρƒ складу са ΠΏΡ€Π°Π²ΠΈΠ»ΠΈΠΌΠ° only/except.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡΠ°ΡšΠ΅ Ρ‡ΡƒΠ²Π°ΡšΠ° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΠ°Ρ‚Π°

Π”ΠΎΠΊ јС Π·Π°Π΄Π°Ρ‚Π°ΠΊ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ build job ΠΈΠΌΠ°Ρ›Π΅ΠΌΠΎ ΠΊΡ€Π΅ΠΈΡ€Π°Π½Π΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π΅ који сС ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ½ΠΎΠ²ΠΎ користити Ρƒ Π½Π°Ρ€Π΅Π΄Π½ΠΈΠΌ Π·Π°Π΄Π°Ρ†ΠΈΠΌΠ°. Π”Π° бистС Ρ‚ΠΎ ΡƒΡ€Π°Π΄ΠΈΠ»ΠΈ, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° Π΄ΠΎΠ΄Π°Ρ‚Π΅ ΠΏΡƒΡ‚Π°ΡšΠ΅ Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Π·Π°Π΄Π°Ρ‚ΠΊΠ°, Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ Π΄ΡƒΠΆ ΠΊΠΎΡ˜ΠΈΡ… Ρ›Π΅ ΠΌΠΎΡ€Π°Ρ‚ΠΈ Π΄Π° сС ΡΠ°Ρ‡ΡƒΠ²Π°Ρ˜Ρƒ ΠΈ ΠΏΠΎΠ½ΠΎΠ²ΠΎ користС Ρƒ Π½Π°Ρ€Π΅Π΄Π½ΠΈΠΌ Π·Π°Π΄Π°Ρ†ΠΈΠΌΠ°, Ρƒ ΠΊΡ™ΡƒΡ‡ artifacts:

build job:
  # snip
  artifacts:
    paths:
      - path/to/build/artifacts
      - another/path
      - MyCoolLib.*/bin/Release/*

ΠŸΡƒΡ‚Π°ΡšΠ° ΠΏΠΎΠ΄Ρ€ΠΆΠ°Π²Π°Ρ˜Ρƒ ΡŸΠΎΠΊΠ΅Ρ€ Π·Π½Π°ΠΊΠΎΠ²Π΅, ΡˆΡ‚ΠΎ ΠΈΡ… Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ‚ΠΈΠ²Π½ΠΎ Ρ‡ΠΈΠ½ΠΈ лакшим Π·Π° ΠΏΠΎΡΡ‚Π°Π²Ρ™Π°ΡšΠ΅.

Ако Π·Π°Π΄Π°Ρ‚Π°ΠΊ ΠΊΡ€Π΅ΠΈΡ€Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π΅, ΠΎΠ½Π΄Π° Ρ›Π΅ сваки слСдСћи Π·Π°Π΄Π°Ρ‚Π°ΠΊ ΠΌΠΎΡ›ΠΈ Π΄Π° ΠΈΠΌ приступи – ΠΎΠ½ΠΈ Ρ›Π΅ сС Π½Π°Π»Π°Π·ΠΈΡ‚ΠΈ Π΄ΡƒΠΆ истих ΠΏΡƒΡ‚Π°ΡšΠ° Ρƒ односу Π½Π° ΠΊΠΎΡ€Π΅Π½ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π° Π΄ΡƒΠΆ којСг су ΠΏΡ€ΠΈΠΊΡƒΠΏΡ™Π΅Π½ΠΈ ΠΎΠ΄ ΠΏΡ€Π²ΠΎΠ±ΠΈΡ‚Π½ΠΎΠ³ Π·Π°Π΄Π°Ρ‚ΠΊΠ°. АртСфакти су Ρ‚Π°ΠΊΠΎΡ’Π΅ доступни Π·Π° ΠΏΡ€Π΅ΡƒΠ·ΠΈΠΌΠ°ΡšΠ΅ Π½Π° Π²Π΅Π± Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜ΠΈ.

Π‘Π°Π΄Π° ΠΊΠ°Π΄Π° ΠΈΠΌΠ°ΠΌΠΎ спрСман (ΠΈ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠΎΠ²Π°Π½) ΠΎΠΊΠ²ΠΈΡ€ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΡ€Π΅Ρ›ΠΈ Π½Π° стварно писањС скрипти Π·Π° Π·Π°Π΄Π°Ρ‚ΠΊΠ΅.

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

МоТда јС Π½Π΅ΠΊΠ°Π΄Π° Π΄Π°Π²Π½ΠΎ, Ρƒ далСкој, далСкој галаксији, ΠΈΠ·Π³Ρ€Π°Π΄ΡšΠ° ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚Π° (ΡƒΠΊΡ™ΡƒΡ‡ΡƒΡ˜ΡƒΡ›ΠΈ .Π½Π΅Ρ‚) са ΠΊΠΎΠΌΠ°Π½Π΄Π½Π΅ линијС Π±ΠΈΠ»Π° ΠΌΡƒΠΊΠ°. Π‘Π°Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ саставити, тСстирати ΠΈ ΠΎΠ±Ρ˜Π°Π²ΠΈΡ‚ΠΈ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚ Ρƒ 3 Ρ‚ΠΈΠΌΠ°:

dotnet build
dotnet test
dotnet pack

Наравно, ΠΏΠΎΡΡ‚ΠΎΡ˜Π΅ Π½Π΅ΠΊΠ΅ нијансС Π·Π±ΠΎΠ³ ΠΊΠΎΡ˜ΠΈΡ… Ρ›Π΅ΠΌΠΎ Π΄ΠΎΠ½Π΅ΠΊΠ»Π΅ Π·Π°ΠΊΠΎΠΌΠΏΠ»ΠΈΠΊΠΎΠ²Π°Ρ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π΅.

  1. Π–Π΅Π»ΠΈΠΌΠΎ издањС, Π° Π½Π΅ Π΄Π΅Π±ΡƒΠ³, Π±ΡƒΠΈΠ»Π΄, ΠΏΠ° додајСмо свакој ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ -c Release
  2. ΠŸΡ€ΠΈΠ»ΠΈΠΊΠΎΠΌ Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ° ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° ΠΏΡ€ΠΈΠΊΡƒΠΏΠΈΠΌΠΎ ΠΏΠΎΠ΄Π°Ρ‚ΠΊΠ΅ ΠΎ покривСности ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊΠΎ Π΄Π° ΠΌΠΎΡ€Π°ΠΌΠΎ Π΄Π° ΠΏΠΎΠ²Π΅ΠΆΠ΅ΠΌΠΎ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ покривСности са тСст Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠ°:
    1. ΠŸΠ°ΠΊΠ΅Ρ‚ Ρ‚Ρ€Π΅Π±Π° Π΄ΠΎΠ΄Π°Ρ‚ΠΈ свим тСст Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠ° coverlet.msbuild: dotnet add package coverlet.msbuild ΠΈΠ· фасциклС ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π°
    2. Π”ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π·Π° ΠΏΡ€ΠΎΠ±Π½ΠΎ ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ /p:CollectCoverage=true
    3. Π₯ајдС Π΄Π° Π΄ΠΎΠ΄Π°ΠΌΠΎ ΠΊΡ™ΡƒΡ‡ Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Π·Π°Π΄Π°Ρ‚ΠΊΠ° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ° Π΄Π° бисмо Π΄ΠΎΠ±ΠΈΠ»ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π΅ покривСности (ΠΏΠΎΠ³Π»Π΅Π΄Π°Ρ˜Ρ‚Π΅ Π΄ΠΎΠ»Π΅)
  3. Када ΠΏΠ°ΠΊΡƒΡ˜Π΅ΠΌΠΎ ΠΊΠΎΠ΄ Ρƒ Π½ΡƒΠ³Π΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅, поставићСмо ΠΈΠ·Π»Π°Π·Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ Π·Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π΅: -o .

ΠŸΡ€ΠΈΠΊΡƒΠΏΡ™Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° ΠΎ покривСности ΠΊΠΎΠ΄Π°

Након ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ° тСстова, Π¦ΠΎΠ²Π΅Ρ€Π»Π΅Ρ‚ ΠΏΡ€ΠΈΠΊΠ°Π·ΡƒΡ˜Π΅ статистику ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ° Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»ΠΈ:

Calculating coverage result...
  Generating report 'C:Usersxxxsourcereposmy-projectmyProject.testscoverage.json'

+-------------+--------+--------+--------+
| Module      | Line   | Branch | Method |
+-------------+--------+--------+--------+
| project 1   | 83,24% | 66,66% | 92,1%  |
+-------------+--------+--------+--------+
| project 2   | 87,5%  | 50%    | 100%   |
+-------------+--------+--------+--------+
| project 3   | 100%   | 83,33% | 100%   |
+-------------+--------+--------+--------+

+---------+--------+--------+--------+
|         | Line   | Branch | Method |
+---------+--------+--------+--------+
| Total   | 84,27% | 65,76% | 92,94% |
+---------+--------+--------+--------+
| Average | 90,24% | 66,66% | 97,36% |
+---------+--------+--------+--------+

Π“ΠΈΡ‚Π›Π°Π± Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π΄Π° Π½Π°Π²Π΅Π΄Π΅Ρ‚Π΅ Ρ€Π΅Π³ΡƒΠ»Π°Ρ€Π½ΠΈ ΠΈΠ·Ρ€Π°Π· Π·Π° добијањС статистикС, која сС Π·Π°Ρ‚ΠΈΠΌ ΠΌΠΎΠΆΠ΅ Π΄ΠΎΠ±ΠΈΡ‚ΠΈ Ρƒ ΠΎΠ±Π»ΠΈΠΊΡƒ Π·Π½Π°Ρ‡ΠΊΠ΅. Π Π΅Π³ΡƒΠ»Π°Ρ€Π½ΠΈ ΠΈΠ·Ρ€Π°Π· јС Π½Π°Π²Π΅Π΄Π΅Π½ Ρƒ подСшавањима Π·Π°Π΄Π°Ρ‚ΠΊΠ° ΠΏΠΎΠΌΠΎΡ›Ρƒ ΠΊΡ™ΡƒΡ‡Π° coverage; ΠΈΠ·Ρ€Π°Π· ΠΌΠΎΡ€Π° Π΄Π° садрТи Π³Ρ€ΡƒΠΏΡƒ Π·Π° снимањС, Ρ‡ΠΈΡ˜Π° Ρ›Π΅ врСдност Π±ΠΈΡ‚ΠΈ ΠΏΡ€Π΅Π½Π΅Ρ‚Π° Π½Π° Π·Π½Π°Ρ‡ΠΊΡƒ:

test and cover job:
  # snip
  coverage: /|s*Totals*|s*(d+[,.]d+%)/

ОвдС добијамо статистику ΠΈΠ· линијС са ΡƒΠΊΡƒΠΏΠ½ΠΎΠΌ ΠΏΠΎΠΊΡ€ΠΈΠ²Π΅Π½ΠΎΡˆΡ›Ρƒ линијама.

ΠžΠ±Ρ˜Π°Π²Ρ™ΡƒΡ˜Π΅ΠΌΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ

ОбС Ρ€Π°Π΄ΡšΠ΅ су Π΄ΠΎΠ΄Π΅Ρ™Π΅Π½Π΅ послСдњој Ρ„Π°Π·ΠΈ гасовода - ΠΏΠΎΡˆΡ‚ΠΎ су ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ° ΠΈ тСстови ΠΏΡ€ΠΎΡˆΠ»ΠΈ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΠΏΠΎΠ΄Π΅Π»ΠΈΠΌΠΎ наш Ρ€Π°Π·Π²ΠΎΡ˜ са свСтом.

ΠŸΡ€Π²ΠΎ, поглСдајмо ΠΎΠ±Ρ˜Π°Π²Ρ™ΠΈΠ²Π°ΡšΠ΅ Ρƒ ΠΈΠ·Π²ΠΎΡ€Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°:

  1. Ако ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚ Π½Π΅ΠΌΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ Π½ΡƒΠ³Π΅Ρ‚ (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 β€” Π£Π Π› ΠΈΠ·Π²ΠΎΡ€Π° ΠΈΠ· Ρ„Π°Π·Π΅ β€žΠŸΡ€ΠΈΠΏΡ€Π΅ΠΌΠ° Π½Π°Π»ΠΎΠ³Π°β€œ, ΠΊΠΎΡ€Π°ΠΊ 6
    3. organization - Π½Π°Π·ΠΈΠ² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π΅ Ρƒ АзурС Π”Π΅Π²ΠžΠΏΡ-Ρƒ
    4. gitlab variable β€” Π½Π°Π·ΠΈΠ² ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ са Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ Π·Π° приступ Π΄ΠΎΠ΄Π°Ρ‚ Ρƒ Π“ΠΈΡ‚Π›Π°Π± (β€žΠŸΡ€ΠΈΠΏΡ€Π΅ΠΌΠ° Π½Π°Π»ΠΎΠ³Π°β€œ, стр. 11). Наравно, Ρƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ $variableName
    5. -StorePasswordInClearText β€” Ρ…Π°ΠΊ Π΄Π° Π·Π°ΠΎΠ±ΠΈΡ’Π΅ Π³Ρ€Π΅ΡˆΠΊΡƒ одбијСног приступа (Нисам ΠΏΡ€Π²ΠΈ који јС стао Π½Π° ΠΎΠ²Π΅ Π³Ρ€Π°Π±Ρ™Π΅)
    6. Π£ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ Π³Ρ€Π΅ΡˆΠ°ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π±ΠΈΡ‚ΠΈ корисно Π΄ΠΎΠ΄Π°Ρ‚ΠΈ -verbosity detailed
  3. Π¨Π°Ρ™Π΅ΠΌΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈΠ·Π²ΠΎΡ€Ρƒ: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Π‘Π²Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΡˆΠ°Ρ™Π΅ΠΌΠΎ ΠΈΠ· Ρ‚Ρ€Π΅Π½ΡƒΡ‚Π½ΠΎΠ³ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΠ°, Π΄Π°ΠΊΠ»Π΅ *.nupkg.
    2. name - са ΠΊΠΎΡ€Π°ΠΊΠ° ΠΈΠ·Π½Π°Π΄.
    3. key - Π±ΠΈΠ»ΠΎ која линија. Π£ АзурС Π”Π΅Π²ΠžΠΏΡ-Ρƒ, Ρƒ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρƒ ПовСТи сС са Ρ„ΠΈΠ΄ΠΎΠΌ, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ јС ΡƒΠ²Π΅ΠΊ az.
    4. -skipduplicate β€” Π°ΠΊΠΎ ΠΏΠΎΠΊΡƒΡˆΠ°Ρ‚Π΅ Π΄Π° ΠΏΠΎΡˆΠ°Ρ™Π΅Ρ‚Π΅ Π²Π΅Ρ› ΠΏΠΎΡΡ‚ΠΎΡ˜Π΅Ρ›ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ Π±Π΅Π· ΠΎΠ²ΠΎΠ³ ΠΊΡ™ΡƒΡ‡Π°, ΠΈΠ·Π²ΠΎΡ€ Ρ›Π΅ Π²Ρ€Π°Ρ‚ΠΈΡ‚ΠΈ Π³Ρ€Π΅ΡˆΠΊΡƒ 409 Conflict; са ΠΊΡ™ΡƒΡ‡Π΅ΠΌ, слањС Ρ›Π΅ Π±ΠΈΡ‚ΠΈ прСскочСно.

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

  1. Π—Π° ΠΏΠΎΡ‡Π΅Ρ‚Π°ΠΊ, Ρƒ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Ρƒ, Ρƒ главној Π³Ρ€Π°Π½ΠΈ, ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·ΡƒΡ˜Π΅ΠΌΠΎ Π΄ΠΎΡ†Ρ„ΠΊ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚. Π”Π° бистС Ρ‚ΠΎ ΡƒΡ€Π°Π΄ΠΈΠ»ΠΈ, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈΠ· ΠΊΠΎΡ€Π΅Π½Π° docfx init ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ поставити ΠΊΡ™ΡƒΡ‡Π½Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ Π·Π° склапањС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅. Π”Π΅Ρ‚Π°Ρ™Π°Π½ опис ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎΠ³ подСшавања ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π° ΠΎΠ²Π΄Π΅.
    1. ΠŸΡ€ΠΈΠ»ΠΈΠΊΠΎΠΌ подСшавања Π²Π°ΠΆΠ½ΠΎ јС навСсти ΠΈΠ·Π»Π°Π·Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ ..public - Π“ΠΈΡ‚Π›Π°Π± ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΎ ΡƒΠ·ΠΈΠΌΠ° ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜ јавнС фасциклС Ρƒ ΠΊΠΎΡ€Π΅Π½Ρƒ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π° ΠΊΠ°ΠΎ ΠΈΠ·Π²ΠΎΡ€ Π·Π° страницС. ΠˆΠ΅Ρ€ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΠ°Ρ‚ Ρ›Π΅ сС Π½Π°Π»Π°Π·ΠΈΡ‚ΠΈ Ρƒ фасцикли која јС ΡƒΠ³Π½Π΅ΠΆΡ’Π΅Π½Π° Ρƒ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Ρƒ - Π΄ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ ΠΈΠ·Π»Π°Π· Π½Π° слСдСћи Π½ΠΈΠ²ΠΎ ΠΏΡƒΡ‚Π°ΡšΠΈ.
  2. Π₯ајдС Π΄Π° ΠΏΡ€Π΅Π±Π°Ρ†ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅ Ρƒ Π“ΠΈΡ‚Π›Π°Π±.
  3. Π”ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚Π°ΠΊ Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄Π° pages (рСзСрвисана Ρ€Π΅Ρ‡ Π·Π° Π·Π°Π΄Π°Ρ‚ΠΊΠ΅ ΠΎΠ±Ρ˜Π°Π²Ρ™ΠΈΠ²Π°ΡšΠ° ΡΠ°Ρ˜Ρ‚Π° Ρƒ Π“ΠΈΡ‚Π›Π°Π± страницама):
    1. Π‘ΠΊΡ€ΠΈΠΏΡ‚Π°:
      1. nuget install docfx.console -version 2.51.0 - инсталирати Π΄ΠΎΡ†Ρ„ΠΊ; Π’Π΅Ρ€Π·ΠΈΡ˜Π° јС ΠΎΠ±Π΅Π·Π±Π΅Ρ’Π΅Π½Π° Π΄Π° Π±ΠΈ сС осигурало Π΄Π° су ΠΏΡƒΡ‚Π°ΡšΠ΅ Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π° исправнС.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json β€” ΠΏΡ€ΠΈΠΊΡƒΠΏΡ™Π°ΡšΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅
    2. Π§Π²ΠΎΡ€ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΠ°Ρ‚Π°:

pages:
  # snip
  artifacts:
    paths:
      - public

Лирска Π΄ΠΈΠ³Ρ€Π΅ΡΠΈΡ˜Π° ΠΎ Π΄ΠΎΡ†Ρ„ΠΊ-Ρƒ

РанијС сам, ΠΏΡ€ΠΈΠ»ΠΈΠΊΠΎΠΌ ΠΏΠΎΡΡ‚Π°Π²Ρ™Π°ΡšΠ° ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π°, Π½Π°Π²Π΅ΠΎ ΠΈΠ·Π²ΠΎΡ€ ΠΊΠΎΠ΄Π° Π·Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ ΠΊΠ°ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ Ρ€Π΅ΡˆΠ΅ΡšΠ°. Π“Π»Π°Π²Π½ΠΈ нСдостатак јС ΡˆΡ‚ΠΎ сС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠΊΡ€Π΅ΠΈΡ€Π° ΠΈ Π·Π° тСст ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π΅. Ако ΠΎΠ²ΠΎ нијС Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ поставити ΠΎΠ²Ρƒ врСдност Π½Π° Ρ‡Π²ΠΎΡ€ metadata.src:

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

  1. metadata.src.src: "../" β€” ΠΈΠ΄ΠΈΡ‚Π΅ јСдан Π½ΠΈΠ²ΠΎ Π³ΠΎΡ€Π΅ Ρƒ односу Π½Π° Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Ρƒ docfx.json, Ρ˜Π΅Ρ€ ΠŸΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°ΡšΠ΅ стабла Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΠ° Π½Π΅ Ρ€Π°Π΄ΠΈ Ρƒ обрасцима.
  2. metadata.src.files: ["**/*.csproj"] β€” Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΎΠ±Ρ€Π°Π·Π°Ρ†, ΠΏΡ€ΠΈΠΊΡƒΠΏΡ™Π°ΠΌΠΎ свС Π¦# ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π΅ ΠΈΠ· свих Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΠ°.
  3. metadata.src.exclude: ["*.tests*/**"] - Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΎΠ±Ρ€Π°Π·Π°Ρ†, искључитС свС ΠΈΠ· фасцикли са .tests Π£ наслову

ΠœΠ΅Ρ’ΡƒΠ·Π±ΠΈΡ€

Ова Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° сС ΠΌΠΎΠΆΠ΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΠΈ Π·Π° Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ ΠΏΠΎΠ»Π° сата ΠΈ ΠΏΠ°Ρ€ ΡˆΠΎΡ™ΠΈΡ†Π° ΠΊΠ°Ρ„Π΅, ΡˆΡ‚ΠΎ Ρ›Π΅ Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡƒΡ›ΠΈΡ‚ΠΈ Π΄Π° са сваким Π·Π°Ρ…Ρ‚Π΅Π²ΠΎΠΌ Π·Π° спајањС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ ΠΈ ΠΏΠΎΡˆΠ°Ρ™Π΅Ρ‚Π΅ Π³Π° ΠΌΠ°Ρ˜ΡΡ‚ΠΎΡ€Ρƒ Π΄Π° Π»ΠΈ сС ΠΊΠΎΠ΄ Π³Ρ€Π°Π΄ΠΈ ΠΈ Π΄Π° тСстови ΠΏΡ€ΠΎΠ»Π°Π·Π΅, ΡΠΊΠ»Π°ΠΏΠ°Ρ˜ΡƒΡ›ΠΈ Π½ΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚, Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ ΠΈ ΡƒΠ³Π°Ρ’Π°ΡšΠ΅ ΠΎΠΊΡƒ ΠΏΡ€Π΅Π»Π΅ΠΏΠΈΠΌ бСџСвима Ρƒ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Ρƒ Π Π•ΠΠ”ΠœΠ•.

Π€ΠΈΠ½Π°Π» .Π³ΠΈΡ‚Π»Π°Π±-Ρ†ΠΈ.ΠΈΠΌΠ»

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

Π“ΠΎΠ²ΠΎΡ€Π΅Ρ›ΠΈ ΠΎ Π·Π½Π°Ρ‡ΠΊΠ°ΠΌΠ°

Π—Π±ΠΎΠ³ ΡšΠΈΡ… јС свС ΠΏΠΎΡ‡Π΅Π»ΠΎ!

Π—Π½Π°Ρ‡ΠΊΠ΅ са статусима Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄Π° ΠΈ ΠΏΠΎΠΊΡ€ΠΈΠ²Π΅Π½ΠΎΡˆΡ›Ρƒ ΠΊΠΎΠ΄Π° су доступнС Ρƒ Π“ΠΈΡ‚Π›Π°Π±-Ρƒ Ρƒ подСшавањима ЦИ/Π¦Π” Ρƒ Π±Π»ΠΎΠΊΡƒ Π“Ρ‚Π½Ρ‚Ρ€Π°Π» Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄Π°:

Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° ЦИ/Π¦Π” Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ Π·Π° (скоро) апсолутнС ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊΠ΅

Направио сам Π·Π½Π°Ρ‡ΠΊΡƒ са Π²Π΅Π·ΠΎΠΌ Π΄ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ БхиСлдс.ΠΈΠΎ β€” Ρ‚Π°ΠΌΠΎ јС свС ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚ΠΈ сопствСну Π·Π½Π°Ρ‡ΠΊΡƒ ΠΈ Π΄ΠΎΠ±ΠΈΡ‚ΠΈ јС ΠΏΠΎΠΌΠΎΡ›Ρƒ Π·Π°Ρ…Ρ‚Π΅Π²Π°.

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

Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° ЦИ/Π¦Π” Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ Π·Π° (скоро) апсолутнС ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊΠ΅

АзурС Π”Π΅Π²ΠžΠΏΡ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ Π²Π°ΠΌ Ρ‚Π°ΠΊΠΎΡ’Π΅ ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π°Ρ˜Ρƒ Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Π·Π½Π°Ρ‡ΠΊΠ΅ Π·Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ који ΡƒΠΊΠ°Π·ΡƒΡ˜Ρƒ Π½Π° Π½Π°Ρ˜Π½ΠΎΠ²ΠΈΡ˜Ρƒ Π²Π΅Ρ€Π·ΠΈΡ˜Ρƒ. Π”Π° бистС Ρ‚ΠΎ ΡƒΡ€Π°Π΄ΠΈΠ»ΠΈ, Ρƒ ΠΈΠ·Π²ΠΎΡ€Ρƒ Π½Π° Π²Π΅Π± Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜ΠΈ АзурС Π”Π΅Π²ΠžΠΏΡ, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° ΠΊΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ Π½Π° ΠšΡ€Π΅ΠΈΡ€Π°Ρ˜ Π·Π½Π°Ρ‡ΠΊΡƒ Π·Π° ΠΈΠ·Π°Π±Ρ€Π°Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ ΠΌΠ°Ρ€ΠΊΠ΄ΠΎΠ²Π½:

Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° ЦИ/Π¦Π” Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ Π·Π° (скоро) апсолутнС ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊΠ΅

Π’ΠΎΠ΄ΠΈΡ‡ Π·Π° ЦИ/Π¦Π” Ρƒ Π“ΠΈΡ‚Π›Π°Π±Ρƒ Π·Π° (скоро) апсолутнС ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΠΊΠ΅

Π”ΠΎΠ΄Π°Π²Π°ΡšΠ΅ Π»Π΅ΠΏΠΎΡ‚Π΅

Издвајамо ΡƒΠΎΠ±ΠΈΡ‡Π°Ρ˜Π΅Π½Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅

Π”ΠΎΠΊ сам писао ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ ΠΈ ΠΏΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ, наишао сам Π½Π° Π·Π°Π½ΠΈΠΌΡ™ΠΈΠ²Ρƒ Π˜ΠΠœΠ› Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Ρƒ - ΠΏΠΎΠ½ΠΎΠ²Π½ΠΎ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Π°Ρ‚Π°.

Као ΡˆΡ‚ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΈΠ· подСшавања Π·Π°Π΄Π°Ρ‚ΠΊΠ°, сви ΠΎΠ½ΠΈ Π·Π°Ρ…Ρ‚Π΅Π²Π°Ρ˜Ρƒ ΠΎΠ·Π½Π°ΠΊΡƒ windows ΠΈΠ· ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°Ρ‡Π°, Π° ΠΏΠΎΠΊΡ€Π΅Ρ›Ρƒ сС ΠΏΡ€ΠΈΠ»ΠΈΠΊΠΎΠΌ слања Π·Π°Ρ…Ρ‚Π΅Π²Π° Π·Π° спајањС мастСру/ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ° Π·Π°Ρ…Ρ‚Π΅Π²Π° Π·Π° спајањС (осим Π·Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ). Π₯ајдС Π΄Π° Π΄ΠΎΠ΄Π°ΠΌΠΎ ΠΎΠ²ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρƒ који Ρ›Π΅ΠΌΠΎ ΠΏΠΎΠ½ΠΎΠ²ΠΎ користити:

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

И сада ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΡƒΠ±Π°Ρ†ΠΈΠΌΠΎ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ Π½Π°Ρ˜Π°Π²Ρ™Π΅Π½ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Ρƒ опис Π·Π°Π΄Π°Ρ‚ΠΊΠ°:

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

Називи Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Π°Ρ‚Π° ΠΌΠΎΡ€Π°Ρ˜Ρƒ Π΄Π° ΠΏΠΎΡ‡ΠΈΡšΡƒ Ρ‚Π°Ρ‡ΠΊΠΎΠΌ Π΄Π° сС Π½Π΅ Π±ΠΈ Ρ‚ΡƒΠΌΠ°Ρ‡ΠΈΠ»ΠΈ ΠΊΠ°ΠΎ Π·Π°Π΄Π°Ρ‚Π°ΠΊ.

Π’Π΅Ρ€ΡΠΈΠΎΠ½ΠΈΡ€Π°ΡšΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°

ΠŸΡ€ΠΈΠ»ΠΈΠΊΠΎΠΌ ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ° ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π°Π²Π° ΠΏΡ€Π΅ΠΊΠΈΠ΄Π°Ρ‡Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π΅ линијС, Π° Ρƒ ΡšΠΈΡ…ΠΎΠ²ΠΎΠΌ одсуству, Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π°; Након ΡˆΡ‚ΠΎ јС ΠΏΡ€ΠΎΠ½Π°ΡˆΠ°ΠΎ Ρ‡Π²ΠΎΡ€ ВСрсион, ΠΎΠ½ ΡƒΠ·ΠΈΠΌΠ° ΡΠ²ΠΎΡ˜Ρƒ врСдност ΠΊΠ°ΠΎ Π²Π΅Ρ€Π·ΠΈΡ˜Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° који сС ΠΏΡ€Π°Π²ΠΈ. Π˜ΡΠΏΠΎΡΡ‚Π°Π²ΠΈΠ»ΠΎ сС Π΄Π° Π΄Π° бистС Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ са Π½ΠΎΠ²ΠΎΠΌ Π²Π΅Ρ€Π·ΠΈΡ˜ΠΎΠΌ, ΠΌΠΎΡ€Π°Ρ‚Π΅ ΠΈΠ»ΠΈ Π΄Π° Π³Π° Π°ΠΆΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Π΄Π° Π³Π° прослСдитС ΠΊΠ°ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π΅ линијС.

Π₯ајдС Π΄Π° Π΄ΠΎΠ΄Π°ΠΌΠΎ још Ρ˜Π΅Π΄Π½Ρƒ ΠΆΠ΅Ρ™Ρƒ – Π½Π΅ΠΊΠ° најниТа Π΄Π²Π° Π±Ρ€ΠΎΡ˜Π° Ρƒ Π²Π΅Ρ€Π·ΠΈΡ˜ΠΈ Π±ΡƒΠ΄Ρƒ Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ Π΄Π°Ρ‚ΡƒΠΌ ΠΈΠ·Ρ€Π°Π΄Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ додајмо прСлСасС Π²Π΅Ρ€Π·ΠΈΡ˜Π΅. Наравно, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ΄Π°Ρ‚ΠΈ ΠΎΠ²Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΊΠ΅ Ρƒ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Π½Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΠΈ ΠΈΡ… ΠΏΡ€Π΅ сваког слања – Π°Π»ΠΈ Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡƒΡ€Π°Π΄ΠΈΡ‚Π΅ ΠΈ Ρƒ Ρ‚ΠΎΠΊΡƒ, ΠΏΡ€ΠΈΠΊΡƒΠΏΡ™Π°Ρ˜ΡƒΡ›ΠΈ Π²Π΅Ρ€Π·ΠΈΡ˜Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈΠ· контСкста ΠΈ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΡƒΡ˜ΡƒΡ›ΠΈ јС ΠΊΡ€ΠΎΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π΅ линијС.

Π₯ајдС Π΄Π° сС Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌΠΎ Π΄Π° Π°ΠΊΠΎ ΠΏΠΎΡ€ΡƒΠΊΠ° ΡƒΡ€Π΅Π·ΠΈΠ²Π°ΡšΠ° садрТи Π»ΠΈΠ½ΠΈΡ˜Ρƒ ΠΊΠ°ΠΎ release (v./ver./version) <version number> (rev./revision <revision>)?, ΠΎΠ½Π΄Π° Ρ›Π΅ΠΌΠΎ ΠΏΡ€Π΅ΡƒΠ·Π΅Ρ‚ΠΈ Π²Π΅Ρ€Π·ΠΈΡ˜Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈΠ· ΠΎΠ²ΠΎΠ³ Ρ€Π΅Π΄Π°, Π΄ΠΎΠΏΡƒΠ½ΠΈΡ‚ΠΈ јС Ρ‚Ρ€Π΅Π½ΡƒΡ‚Π½ΠΈΠΌ Π΄Π°Ρ‚ΡƒΠΌΠΎΠΌ ΠΈ прослСдити јС ΠΊΠ°ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ dotnet pack. Π£ нСдостатку линијС, Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ Π½Π΅Ρ›Π΅ΠΌΠΎ саставити ΠΏΠ°ΠΊΠ΅Ρ‚.

Π‘Π»Π΅Π΄Π΅Ρ›Π° скрипта Ρ€Π΅ΡˆΠ°Π²Π° овај ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ:

# рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для поиска строки с вСрсиСй
$rx = "releases+(v.?|ver.?|version)s*(?<maj>d+)(?<min>.d+)?(?<rel>.d+)?s*((rev.?|revision)?s+(?<rev>[a-zA-Z0-9-_]+))?"
# ΠΈΡ‰Π΅ΠΌ строку Π² сообщСнии ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΌ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· прСдопрСдСляСмых GitLab'ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…
$found = $env:CI_COMMIT_MESSAGE -match $rx
# совпадСний Π½Π΅Ρ‚ - Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ
if (!$found) { Write-Output "no release info found, aborting"; exit }
# ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΌΠ°ΠΆΠΎΡ€Π½ΡƒΡŽ ΠΈ ΠΌΠΈΠ½ΠΎΡ€Π½ΡƒΡŽ вСрсии
$maj = $matches['maj']
$min = $matches['min']
# Ссли строка содСрТит Π½ΠΎΠΌΠ΅Ρ€ Ρ€Π΅Π»ΠΈΠ·Π° - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ - Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π³ΠΎΠ΄
if ($matches.ContainsKey('rel')) { $rel = $matches['rel'] } else { $rel = ".$(get-date -format "yyyy")" }
# Π² качСствС Π½ΠΎΠΌΠ΅Ρ€Π° сборки - Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ мСсяц ΠΈ дСнь
$bld = $(get-date -format "MMdd")
# Ссли Π΅ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΏΡ€Π΅Ρ€Π΅Π»ΠΈΠ·Π½ΠΎΠΉ вСрсии - Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΈΡ… Π² Π²Π΅Ρ€ΡΠΈΡŽ
if ($matches.ContainsKey('rev')) { $rev = "-$($matches['rev'])" } else { $rev = '' }
# собираСм Π΅Π΄ΠΈΠ½ΡƒΡŽ строку вСрсии
$version = "$maj$min$rel.$bld$rev"
# собираСм ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹
dotnet pack -c Release -o . /p:Version=$version

Π”ΠΎΠ΄Π°Π²Π°ΡšΠ΅ скриптС Π·Π°Π΄Π°Ρ‚ΠΊΡƒ pack and deploy job ΠΈ стриктно ΠΏΠΎΡΠΌΠ°Ρ‚Ρ€Π°Ρ˜Ρ‚Π΅ ΡΠ°ΡΡ‚Π°Π²Ρ™Π°ΡšΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π°ΠΊΠΎ ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ Π΄Π°Ρ‚Π° линија Ρƒ ΠΏΠΎΡ€ΡƒΡ†ΠΈ ΡƒΡ€Π΅Π·ΠΈΠ²Π°ΡšΠ°.

Π£ΠΊΡƒΠΏΠ½ΠΎ

Након ΡˆΡ‚ΠΎ смо ΠΏΠΎΡ‚Ρ€ΠΎΡˆΠΈΠ»ΠΈ ΠΎΠΊΠΎ ΠΏΠΎΠ»Π° сата Π΄ΠΎ сат Π²Ρ€Π΅ΠΌΠ΅Π½Π° Π½Π° писањС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅, ΠΎΡ‚ΠΊΠ»Π°ΡšΠ°ΡšΠ΅ Π³Ρ€Π΅ΡˆΠ°ΠΊΠ° Ρƒ Π»ΠΎΠΊΠ°Π»Π½ΠΎΠΌ повСрсхСлл-Ρƒ ΠΈ, ΠΌΠΎΠ³ΡƒΡ›Π΅, Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈΡ… ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ°, Π΄ΠΎΠ±ΠΈΠ»ΠΈ смо Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Π·Π° Π°ΡƒΡ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡ˜Ρƒ рутинских Π·Π°Π΄Π°Ρ‚Π°ΠΊΠ°.

Наравно, Π“ΠΈΡ‚Π›Π°Π± ЦИ/Π¦Π” јС ΠΌΠ½ΠΎΠ³ΠΎ обимнији ΠΈ Π²ΠΈΡˆΠ΅ΡΡ‚Ρ€ΡƒΠΊΠΈ Π½Π΅Π³ΠΎ ΡˆΡ‚ΠΎ Π±ΠΈ ΠΌΠΎΠ³Π»ΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π°Ρ‚ΠΈ Π½Π°ΠΊΠΎΠ½ Ρ‡ΠΈΡ‚Π°ΡšΠ° ΠΎΠ²ΠΎΠ³ Π²ΠΎΠ΄ΠΈΡ‡Π° - Ρ‚ΠΎ ΡƒΠΎΠΏΡˆΡ‚Π΅ нијС Ρ‚Π°Ρ‡Π½ΠΎ. Има Ρ‡Π°ΠΊ Ауто Π”Π΅Π²ΠžΠΏΡ Π΄Π°Π΄ΠΎΠ·Π²ΠΎΡ™Π°Π²Π°Ρ˜ΡƒΡ›ΠΈ

аутоматски ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°, ΠΏΡ€Π°Π²ΠΈ, тСстира, ΠΏΡ€ΠΈΠΌΠ΅ΡšΡƒΡ˜Π΅ ΠΈ Π½Π°Π΄Π³Π»Π΅Π΄Π° вашС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅

Π‘Π°Π΄Π° су ΠΏΠ»Π°Π½ΠΎΠ²ΠΈ Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠ΅ Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄ Π·Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Ρƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Ρƒ АзурС, користСћи ΠŸΡƒΠ»ΡƒΠΌΠΈ ΠΈ аутоматски Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΡƒΡ˜ΡƒΡ›ΠΈ Ρ†ΠΈΡ™Π½ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ΅, ΡˆΡ‚ΠΎ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΏΠΎΠΊΡ€ΠΈΠ²Π΅Π½ΠΎ Ρƒ слСдСћСм Ρ‡Π»Π°Π½ΠΊΡƒ.

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ

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