ΠΠ»ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ΡΠ΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΈ Π·Π½Π°ΡΠΊΠΈ Π·Π° Π²Π°ΡΠΈΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ Π²ΠΎ Π΅Π΄Π½Π° Π²Π΅ΡΠ΅Ρ Π½Π° Π»Π΅ΡΠ½ΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅
ΠΠ΅ΡΠΎΡΠ°ΡΠ½ΠΎ, ΡΠ΅ΠΊΠΎΡ ΡΠ°Π·Π²ΠΈΠ²Π°Ρ ΠΊΠΎΡ ΠΈΠΌΠ° Π±Π°ΡΠ΅ΠΌ Π΅Π΄Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ Π·Π° ΠΌΠΈΠ»Π΅Π½ΠΈΡΠΈΡΠ° Π²ΠΎ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΠΌΠ° ΡΠ΅ΡΠ°ΡΠ΅ Π·Π° ΡΠ±Π°Π²ΠΈ Π·Π½Π°ΡΠΊΠΈ ΡΠΎ ΡΡΠ°ΡΡΡΠΈ, ΠΏΠΎΠΊΡΠΈΠ΅Π½ΠΎΡΡ Π½Π° ΠΊΠΎΠ΄, Π²Π΅ΡΠ·ΠΈΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π²ΠΎ nuget... Π ΠΎΠ²Π° ΡΠ΅ΡΠ°ΡΠ΅ ΠΌΠ΅ Π½Π°Π²Π΅Π΄Π΅ Π΄Π° ΡΠ° Π½Π°ΠΏΠΈΡΠ°ΠΌ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ°. ΠΠΎΠ΄Π³ΠΎΡΠ²ΡΠ²Π°ΡΡΠΈ ΡΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΠΈΡΠ°ΠΌ, ΡΠ° Π΄ΠΎΠ±ΠΈΠ² ΠΎΠ²Π°Π° ΡΠ±Π°Π²ΠΈΡΠ° Π²ΠΎ Π΅Π΄Π΅Π½ ΠΎΠ΄ ΠΌΠΎΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ:

ΠΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ Π²Π΅ Π²ΠΎΠ΄ΠΈ Π½ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ½ΡΠΈΡΠ°Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ° ΠΈ ΠΈΡΠΏΠΎΡΠ°ΠΊΠ° Π·Π° ΠΏΡΠΎΠ΅ΠΊΡ Π·Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΠ΄ ΠΊΠ»Π°ΡΠ° .Net Core Π²ΠΎ GitLab, ΠΎΠ±ΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° GitLab ΠΈ ΡΡΡΠΊΠ°ΡΠ΅ Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π΄ΠΎ ΠΏΡΠΈΠ²Π°ΡΠ΅Π½ ΠΈΠ·Π²ΠΎΡ Π²ΠΎ Azure DevOps.
VS Code Π±Π΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅Π½ ΠΊΠ°ΠΊΠΎ ΡΠ°Π·Π²ΠΎΡΠ½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π° ΡΠΎ Π½Π°ΡΡΠ°Π²ΠΊΠ°ΡΠ° (Π·Π° ΠΏΠΎΡΠ²ΡΠ΄ΡΠ²Π°ΡΠ΅ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠΎ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ΄ ΡΠ°Π·Π²ΠΎΡΠ½Π°ΡΠ° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°).
ΠΡΠ°ΡΠΎΠΊ Π²ΠΎΠ²Π΅Π΄
Π¦Π - Π΄Π°Π»ΠΈ Π΅ ΠΊΠΎΠ³Π° ΡΠ°ΠΌΠΎ ΡΡΠ΅ ΡΡΡΠ½Π°Π»Π΅, Π° Π²Π΅ΡΠ΅ ΡΠ΅ ΠΏΠ°Π΄Π½Π°Π»ΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΡ?
Π¨ΡΠΎ Π΅ 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
ΠΡΠ΄Π΅ Π΄Π° ΠΏΠΎΡΠ½Π΅ΠΌΠ΅!
Π‘ΠΎΠ±ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ°
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° ΡΠΌΠ΅ΡΠΊΠΈ
-
ΠΡΠ΅ΠΈΡΠ°ΡΡΠ΅ ΡΠΌΠ΅ΡΠΊΠ° Π²ΠΎ
-
ΠΠ΄ΠΈ Π΄ΠΎ
-
Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ
- ΠΠΌΠ΅ - ΠΊΠΎΠ΅ Π±ΠΈΠ»ΠΎ
- ΠΠΈΠ΄Π»ΠΈΠ²ΠΎΡΡ - ΠΊΠΎΡΠ° Π±ΠΈΠ»ΠΎ

-
ΠΠΎΠ³Π° ΡΠ΅ ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π½Π° ΠΊΠΎΠΏΡΠ΅ΡΠΎ ΠΡΠ΅ΠΈΡΠ°Ρ, ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΡΠ΅ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ° ΠΈ ΡΠ΅ Π±ΠΈΠ΄Π΅ΡΠ΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ΅Π½ΠΈ Π½Π° Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ°. ΠΠ° ΠΎΠ²Π°Π° ΡΡΡΠ°Π½ΠΈΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠΈΡΠ΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎ ΠΎΠ΄Π΅ΡΠ΅ Π΄ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ (Π΄ΠΎΠ»Π½Π°ΡΠ° Π²ΡΡΠΊΠ° Π²ΠΎ ΡΠΏΠΈΡΠΎΠΊΠΎΡ Π»Π΅Π²ΠΎ -> ΠΡΠ΅Π³Π»Π΅Π΄ -> ΠΠ»ΠΎΠΊ Π½Π° ΡΡΠ»ΡΠ³ΠΈ Π½Π° Azure DevOps)

-
ΠΠ΄Π΅ΡΠ΅ Π²ΠΎ Atrifacts, ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ ΠΡΠ΅ΠΈΡΠ°Ρ ΠΈΠ·Π²ΠΎΡ
- ΠΠ½Π΅ΡΠ΅ΡΠ΅ Π³ΠΎ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΈΠ·Π²ΠΎΡΠΎΡ
- ΠΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π²ΠΈΠ΄Π»ΠΈΠ²ΠΎΡΡ
- ΠΡΡΡΠΈΠΊΠ»ΠΈΡΠ°ΡΡΠ΅ ΠΠΊΠ»ΡΡΠ΅ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΠ΄ Π·Π°Π΅Π΄Π½ΠΈΡΠΊΠΈ ΡΠ°Π²Π½ΠΈ ΠΈΠ·Π²ΠΎΡΠΈ, Π·Π° Π΄Π° Π½Π΅ ΡΠ΅ ΠΏΡΠ΅ΡΠ²ΠΎΡΠΈ ΠΈΠ·Π²ΠΎΡΠΎΡ Π²ΠΎ ΠΊΠ»ΠΎΠ½ Π½Π° Π΄Π΅ΠΏΠΎΠ½ΠΈΡΠ°

-
ΠΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ ΠΠΎΠ²ΡΠ·ΠΈ ΡΠ΅ Π·Π° Π΄ΠΎΠ²ΠΎΠ΄, ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Visual Studio, ΠΊΠΎΠΏΠΈΡΠ°ΡΡΠ΅ Source ΠΎΠ΄ Π±Π»ΠΎΠΊΠΎΡ Machine Setup

-
ΠΠ΄Π΅ΡΠ΅ Π΄ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ Π½Π° ΡΠΌΠ΅ΡΠΊΠ°ΡΠ°, ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠΎΠΊΠ΅Π½ Π·Π° Π»ΠΈΡΠ΅Π½ ΠΏΡΠΈΡΡΠ°ΠΏ

-
Π‘ΠΎΠ·Π΄Π°Π΄Π΅ΡΠ΅ Π½ΠΎΠ² ΡΠΎΠΊΠ΅Π½ Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ
- ΠΠΌΠ΅ - ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ
- ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠ° - Π’Π΅ΠΊΠΎΠ²Π½Π°
- ΠΠ°ΠΆΠΈ Π½Π°ΡΠΌΠ½ΠΎΠ³Ρ 1 Π³ΠΎΠ΄ΠΈΠ½Π°
- ΠΠΏΡΠ΅Π³ - ΠΠ°ΠΊΡΠ²Π°ΡΠ΅/Π§ΠΈΡΠ°ΡΠ΅ ΠΈ ΠΏΠΈΡΡΠ²Π°ΡΠ΅

-
ΠΠΎΠΏΠΈΡΠ°ΡΡΠ΅ Π³ΠΎ ΠΊΡΠ΅ΠΈΡΠ°Π½ΠΈΠΎΡ ΡΠΎΠΊΠ΅Π½ - ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ΅ Π·Π°ΡΠ²ΠΎΡΠΈ ΠΌΠΎΠ΄Π°Π»Π½ΠΈΠΎΡ ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ, Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° ΡΠ΅ Π±ΠΈΠ΄Π΅ Π½Π΅Π΄ΠΎΡΡΠ°ΠΏΠ½Π°
-
ΠΠ΄Π΅ΡΠ΅ Π΄ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ Π²ΠΎ GitLab, ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π³ΠΈ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ Π·Π° CI / CD

-
ΠΡΠΎΡΠΈΡΠ΅ΡΠ΅ Π³ΠΎ Π±Π»ΠΎΠΊΠΎΡ ΠΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅ Π½ΠΎΠ²
- ΠΠΌΠ΅ - ΠΊΠΎΠ΅ Π±ΠΈΠ»ΠΎ Π±Π΅Π· ΠΏΡΠ°Π·Π½ΠΈ ΠΌΠ΅ΡΡΠ° (ΡΠ΅ Π±ΠΈΠ΄Π΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΎ Π²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°ΡΠ° ΡΠΊΠΎΠ»ΠΊΠ°)
- ΠΡΠ΅Π΄Π½ΠΎΡΡ - ΡΠΎΠΊΠ΅Π½ Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ ΠΎΠ΄ ΡΡΠ°Π² 9
- ΠΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π·Π° ΠΌΠ°ΡΠΊΠ°

ΠΠ²Π° ΡΠ° ΠΊΠΎΠΌΠΏΠ»Π΅ΡΠΈΡΠ° ΠΏΡΠ΅ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ°.
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° ΡΠ°ΠΌΠΊΠ°ΡΠ° Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°
Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ, CI/CD ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π²ΠΎ GitLab ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° .gitlab-ci.yml ΠΎΠ΄ ΠΊΠΎΡΠ΅Π½ΠΎΡ Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° ΠΏΠ°ΡΠ΅ΠΊΠ° Π΄ΠΎ ΠΎΠ²Π°Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π²ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ, Π½ΠΎ Π²ΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ ΡΠΎΠ° Π½Π΅ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ.
ΠΠ°ΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΠ΄ Π½Π°ΡΡΠ°Π²ΠΊΠ°ΡΠ°, Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠΎΠ΄ΡΠΆΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π²ΠΎ ΡΠΎΡΠΌΠ°Ρ YAML. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π°Π²Π΅Π΄ΡΠ²Π° ΠΊΠΎΠΈ ΠΊΠ»ΡΡΠ΅Π²ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΎΠ΄ΡΠΆΠ°Ρ Π½Π° Π³ΠΎΡΠ½ΠΎΡΠΎ Π½ΠΈΠ²ΠΎ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° ΠΈ Π½Π° ΡΠ΅ΠΊΠΎΠ΅ ΠΎΠ΄ Π²Π³Π½Π΅Π·Π΄Π΅Π½ΠΈΡΠ΅ Π½ΠΈΠ²ΠΎΠ°.
ΠΡΠ²ΠΎ, Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ Π²ΡΡΠΊΠ° Π΄ΠΎ ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° Π΄ΠΎΠΊΠ΅ΡΠΎΡ Π²ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΊΠ°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, Π²ΠΎ ΠΊΠΎΡΠ° ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ Π·Π°Π΄Π°ΡΠΈΡΠ΅. ΠΠ° ΠΎΠ²Π° Π½Π°ΠΎΡΠ°ΠΌΠ΅ . ΠΠΎ ΠΈΠΌΠ° Π΄Π΅ΡΠ°Π»Π΅Π½ Π²ΠΎΠ΄ΠΈΡ Π·Π° ΡΠΎΠ° ΠΊΠΎΡΠ° ΡΠ»ΠΈΠΊΠ° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ. Π‘Π»ΠΈΠΊΠ°ΡΠ° ΡΠΎ .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 Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΠΏΡΠΈΡΠΏΠΎΡΠΎΠ±ΠΈΡΠ΅ Π·Π±ΠΈΡ Π½Π° ΡΡΠ»ΠΎΠ²ΠΈ ΠΈ, ΠΏΠΎ ΠΈΠ·Π±ΠΎΡ, Π΄Π° ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠΎΡΡΠΎΡΠ±Π°ΡΠ° Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ ΡΡΠΏΠ΅Ρ
ΠΎΡ Π½Π° ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ().
ΠΠ° ΡΠ΅ ββΠΏΠΎΡΡΠ΅ΡΠΈΠΌΠ΅ Π½Π° Π·Π±ΠΈΡ Π½Π° Π±Π°ΡΠ°ΡΠ° - ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ ΠΈ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ ΡΠ°ΠΌΠΎ Π·Π° Π±Π°ΡΠ°ΡΠ΅ Π·Π° ΡΠΏΠΎΡΡΠ²Π°ΡΠ΅, ΠΏΠ°ΠΊΡΠ²Π°ΡΠ΅ ΠΈ ΠΈΡΠΏΡΠ°ΡΠ°ΡΠ΅ Π΄ΠΎ 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 ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π³ΡΠ°Π΄Π΅Π½ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ°Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ. ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΈ Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅ ΠΏΠ°ΡΠ΅ΠΊΠΈΡΠ΅ Π²ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° Π·Π°Π΄Π°ΡΠΈΡΠ΅, Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΠΏΠΎ ΠΊΠΎΠΈ ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΈ Π·Π°ΡΡΠ²Π°ΡΠ΅ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π΄Π° Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π²ΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, Π½Π° ΠΊΠ»ΡΡΠΎΡ :
build job:
# snip
artifacts:
paths:
- path/to/build/artifacts
- another/path
- MyCoolLib.*/bin/Release/*
ΠΠ°ΡΠ΅ΠΊΠΈΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π°Π°Ρ ΡΠΎΠΊΠ΅ΡΠΈ, ΡΡΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠ²Π½ΠΎ Π³ΠΎ ΠΎΠ»Π΅ΡΠ½ΡΠ²Π° Π½ΠΈΠ²Π½ΠΎΡΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅.
ΠΠΊΠΎ Π½Π΅ΠΊΠΎΡΠ° Π·Π°Π΄Π°ΡΠ° ΡΠΎΠ·Π΄Π°Π²Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ, ΡΠΎΠ³Π°Ρ ΡΠ΅ΠΊΠΎΡΠ° ΡΠ»Π΅Π΄Π½Π° Π·Π°Π΄Π°ΡΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΈΡΡΠ°ΠΏΠΈ Π΄ΠΎ Π½ΠΈΠ² - ΡΠΈΠ΅ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ Π»ΠΎΡΠΈΡΠ°Π½ΠΈ ΠΏΠΎ ΠΈΡΡΠΈΡΠ΅ ΠΏΠ°ΡΠ΅ΠΊΠΈ Π²ΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° ΠΊΠΎΡΠ΅Π½ΠΎΡ Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ ΡΡΠΎ Π±ΠΈΠ»Π΅ ΡΠΎΠ±ΡΠ°Π½ΠΈ ΠΎΠ΄ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ°. ΠΡΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅ ΡΠ΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π·Π° ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°.
Π‘Π΅Π³Π° ΠΊΠΎΠ³Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½Π° (ΠΈ ΡΠ΅ΡΡΠΈΡΠ°Π½Π°) ΡΠ°ΠΌΠΊΠ° Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌΠ΅ ΡΠΎ Π²ΡΡΡΠ½ΠΎΡΡ Π΄Π° ΠΏΠΈΡΡΠ²Π°ΠΌΠ΅ ΡΠΊΡΠΈΠΏΡΠΈ Π·Π° Π·Π°Π΄Π°ΡΠΈ.
ΠΠΈΠ΅ ΠΏΠΈΡΡΠ²Π°ΠΌΠ΅ ΡΠΊΡΠΈΠΏΡΠΈ
ΠΠΎΠΆΠ΅Π±ΠΈ, Π½Π΅ΠΊΠΎΠ³Π°Ρ ΠΎΠ΄Π°ΠΌΠ½Π°, Π²ΠΎ Π³Π°Π»Π°ΠΊΡΠΈΡΠ° Π΄Π°Π»Π΅ΠΊΡ, Π΄Π°Π»Π΅ΠΊΡ, Π³ΡΠ°Π΄Π΅ΡΠ΅ΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈ (Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ Π³ΠΈ ΠΈ ΠΎΠ½ΠΈΠ΅ Π½Π° .net) ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡΠ° Π±Π΅ΡΠ΅ Π±ΠΎΠ»ΠΊΠ°. Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅, ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ ΠΈ ΠΎΠ±ΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ Π²ΠΎ 3 ΡΠΈΠΌΠ°:
dotnet build
dotnet test
dotnet pack
Π‘Π΅ΠΊΠ°ΠΊΠΎ, ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠΈ Π½ΠΈΡΠ°Π½ΡΠΈ ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠΈ ΠΌΠ°Π»ΠΊΡ ΡΠ΅ Π³ΠΈ ΠΊΠΎΠΌΠΏΠ»ΠΈΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅.
- Π‘Π°ΠΊΠ°ΠΌΠ΅ ΠΈΠ·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅, Π° Π½Π΅ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ, ΠΏΠ° Π΄ΠΎΠ΄Π°Π²Π°ΠΌΠ΅ Π½Π° ΡΠ΅ΠΊΠΎΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°
-c Release - ΠΠΎΠ³Π° ΡΠ΅ΡΡΠΈΡΠ°ΠΌΠ΅, ΡΠ°ΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΠΎΠ±ΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° ΠΏΠΎΠΊΡΠΈΠ΅Π½ΠΎΡΡ Π½Π° ΠΊΠΎΠ΄ΠΎΡ, ΠΏΠ° Π·Π°ΡΠΎΠ° ΡΡΠ΅Π±Π° Π΄Π° Π²ΠΊΠ»ΡΡΠΈΠΌΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π½Π° ΠΏΠΎΠΊΡΠΈΠ΅Π½ΠΎΡΡ Π²ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π·Π° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅:
- ΠΠΎΠ΄Π°Π΄Π΅ΡΠ΅ Π³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΡ Π²ΠΎ ΡΠΈΡΠ΅ ΡΠ΅ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
coverlet.msbuild:dotnet add package coverlet.msbuildΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ½Π°ΡΠ° ΠΏΠ°ΠΏΠΊΠ° - ΠΠΎΠ΄Π°Ρ Π²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅
/p:CollectCoverage=true - ΠΠΎΠ΄Π°ΡΡΠ΅ ΠΊΠ»ΡΡ Π²ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΡΠ΅ΡΡ-Π·Π°Π΄Π°ΡΠ°ΡΠ° Π·Π° Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΠ΄ ΠΏΠΎΠΊΡΠΈΠ΅Π½ΠΎΡΡ (Π²ΠΈΠ΄Π΅ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ»Ρ)
- ΠΠΎΠ΄Π°Π΄Π΅ΡΠ΅ Π³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΡ Π²ΠΎ ΡΠΈΡΠ΅ ΡΠ΅ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
- ΠΠΎΠ³Π° Π³ΠΎ ΠΏΠ°ΠΊΡΠ²Π°ΡΠ΅ ΠΊΠΎΠ΄ΠΎΡ Π²ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΈ 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+%)/
ΠΠ²Π΄Π΅ Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΠΎΠ΄ Π»ΠΈΠ½ΠΈΡΠ° ΡΠΎ Π²ΠΊΡΠΏΠ½Π° ΠΏΠΎΠΊΡΠΈΠ΅Π½ΠΎΡΡ Π½Π° Π»ΠΈΠ½ΠΈΡΠ°ΡΠ°.
ΠΠ±ΡΠ°Π²ΡΠ²Π°ΡΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°
ΠΠ²Π΅ΡΠ΅ Π°ΠΊΡΠΈΠΈ ΡΠ΅ Π·Π°ΠΊΠ°ΠΆΠ°Π½ΠΈ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΠ°Π·Π° ΠΎΠ΄ Π³Π°ΡΠΎΠ²ΠΎΠ΄ΠΎΡ - Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ΡΠΎ ΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠΌΠΈΠ½Π°Π°, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΈ ΡΠΏΠΎΠ΄Π΅Π»ΠΈΠΌΠ΅ Π½Π°ΡΠΈΡΠ΅ ΡΠ»ΡΡΡΠ²Π°ΡΠ° ΡΠΎ ΡΠ²Π΅ΡΠΎΡ.
ΠΡΠ²ΠΎ, ΡΠ°Π·ΠΌΠΈΡΠ»Π΅ΡΠ΅ Π·Π° ΠΎΠ±ΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΈΠ·Π²ΠΎΡΠΎΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ:
-
ΠΠΊΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ Π½Π΅ΠΌΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΊΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° nuget (
nuget.config), ΠΊΡΠ΅ΠΈΡΠ°ΡΡΠ΅ Π½ΠΎΠ²Π°:dotnet new nugetconfigΠΠ° ΡΡΠΎ: ΡΠ»ΠΈΠΊΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ΠΌΠ° ΠΏΡΠΈΡΡΠ°ΠΏ Π·Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π΄ΠΎ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡΠ΅ (ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΈ ΠΈ ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΈ) ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠ° Π΄Π° Π½Π΅ ΡΠ°ΡΠΈΠΌΠ΅ Π³ΡΠ΅ΡΠΊΠΈ, Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π½ΠΎΠ²Π° Π»ΠΎΠΊΠ°Π»Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΈ ΡΠ°Π±ΠΎΡΠΈΠΌΠ΅ ΡΠΎ Π½Π΅Π°.
- ΠΡΠ΄Π΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ Π½ΠΎΠ² ΠΈΠ·Π²ΠΎΡ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ Π²ΠΎ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°:
nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearTextname- ΠΠΌΠ΅ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ ΠΈΠ·Π²ΠΎΡ, Π½Π΅ Π΅ ΠΊΡΠΈΡΠΈΡΠ½ΠΎurl- URL Π½Π° ΠΈΠ·Π²ΠΎΡΠΎΡ ΠΎΠ΄ ΡΠ°Π·Π°ΡΠ° βΠΠΎΠ΄Π³ΠΎΡΠ²ΡΠ²Π°ΡΠ΅ ΡΠΌΠ΅ΡΠΊΠΈβ, ΡΡΡ. 6organization- ΠΈΠΌΠ΅ Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠ°ΡΠ° Π²ΠΎ Azure DevOpsgitlab variable- ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° ΡΠΎ ΡΠΎΠΊΠ΅Π½ Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎΠ΄Π°Π΄Π΅Π½ Π²ΠΎ GitLab (βΠΠΎΠ΄Π³ΠΎΡΠ²ΡΠ²Π°ΡΠ΅ ΡΠΌΠ΅ΡΠΊΠΈβ, ΡΡΡ. 11). ΠΠΎΡΠΌΠ°Π»Π½ΠΎ, Π²ΠΎ ΡΠΎΡΠΌΠ°Ρ$variableName-StorePasswordInClearText- Ρ Π°ΠΊΠΈΡΠ°ΡΠ΅ Π·Π° Π΄Π° ΡΠ΅ Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈ Π³ΡΠ΅ΡΠΊΠ°ΡΠ° ΡΠΎ ΠΎΠ΄Π±ΠΈΠ΅Π½ ΠΏΡΠΈΡΡΠ°ΠΏ ()- ΠΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΊΠΎΡΠΈΡΠ½ΠΎ Π΄Π° ΡΠ΅ Π΄ΠΎΠ΄Π°Π΄Π΅
-verbosity detailed
- ΠΡΠΏΡΠ°ΡΠ°ΡΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ Π΄ΠΎ ΠΈΠ·Π²ΠΎΡΠΎΡ:
nuget push -source <name> -skipduplicate -apikey <key> *.nupkg- ΠΠΈ ΠΈΡΠΏΡΠ°ΡΠ°ΠΌΠ΅ ΡΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΠ΄ ΡΠ΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ, ΡΠ°ΠΊΠ°
*.nupkg. name- ΠΎΠ΄ ΡΠ΅ΠΊΠΎΡΠΎΡ ΠΏΠΎΠ³ΠΎΡΠ΅.key- ΠΊΠΎΡΠ° Π±ΠΈΠ»ΠΎ Π»ΠΈΠ½ΠΈΡΠ°. ΠΠΎ Azure DevOps, Π²ΠΎ ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠΎΡ Connect to feed, ΠΏΡΠΈΠΌΠ΅ΡΠΎΡ Π΅ ΡΠ΅ΠΊΠΎΠ³Π°Ρ Π»ΠΈΠ½ΠΈΡΠ°ΡΠ°az.-skipduplicate- ΠΊΠΎΠ³Π° ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°ΡΠ΅ Π΄Π° ΠΈΡΠΏΡΠ°ΡΠΈΡΠ΅ Π²Π΅ΡΠ΅ ΠΏΠΎΡΡΠΎΠ΅ΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ Π±Π΅Π· ΠΎΠ²ΠΎΡ ΠΊΠ»ΡΡ, ΠΈΠ·Π²ΠΎΡΠΎΡ ΡΠ΅ Π²ΡΠ°ΡΠΈ Π³ΡΠ΅ΡΠΊΠ°409 Conflict; ΡΠΎ ΠΊΠ»ΡΡΠΎΡ, ΠΈΡΠΏΡΠ°ΡΠ°ΡΠ΅ΡΠΎ ΡΠ΅ ΡΠ΅ ΠΏΡΠ΅ΡΠΊΠΎΠΊΠ½Π΅.
- ΠΠΈ ΠΈΡΠΏΡΠ°ΡΠ°ΠΌΠ΅ ΡΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΠ΄ ΡΠ΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ, ΡΠ°ΠΊΠ°
Π‘Π΅Π³Π° Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ΡΠΎ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°:
- ΠΡΠ²ΠΎ, Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ, Π²ΠΎ Π³Π»Π°Π²Π½Π°ΡΠ° Π³ΡΠ°Π½ΠΊΠ°, Π³ΠΎ ΠΈΠ½ΠΈΡΠΈΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ docfx. ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, ΠΈΠ·Π²ΡΡΠ΅ΡΠ΅ ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΠΎΠ΄ ΠΊΠΎΡΠ΅Π½ΠΎΡ
docfx initΠΈ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΈ ΠΊΠ»ΡΡΠ½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π·Π° Π³ΡΠ°Π΄Π΅ΠΆΠ½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°. ΠΠ΅ΡΠ°Π»Π΅Π½ ΠΎΠΏΠΈΡ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎΡΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ .- ΠΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅, Π²Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° Π³ΠΎ Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ ΠΈΠ·Π»Π΅Π·Π½ΠΈΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ
..public- GitLab ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ ΡΠ° Π·Π΅ΠΌΠ° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°ΡΠ° Π½Π° ΡΠ°Π²Π½Π°ΡΠ° ΠΏΠ°ΠΏΠΊΠ° Π²ΠΎ ΠΊΠΎΡΠ΅Π½ΠΎΡ Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π²ΠΎΡ Π·Π° Π‘ΡΡΠ°Π½ΠΈΡΠΈ. ΠΠΈΠ΄Π΅ΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΡΠ΅ ΡΠ΅ Π½Π°ΠΎΡΠ° Π²ΠΎ ΠΏΠ°ΠΏΠΊΠ° Π²Π³Π½Π΅Π·Π΄Π΅Π½Π° Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ - Π΄ΠΎΠ΄Π°ΡΡΠ΅ ΠΈΠ·Π»Π΅Π· Π½Π° Π½ΠΈΠ²ΠΎΡΠΎ Π½Π°Π³ΠΎΡΠ΅ Π²ΠΎ ΠΏΠ°ΡΠ΅ΠΊΠ°ΡΠ°.
- ΠΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅, Π²Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° Π³ΠΎ Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ ΠΈΠ·Π»Π΅Π·Π½ΠΈΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ
- ΠΡΠ΄Π΅ Π΄Π° Π³ΠΈ ΠΏΡΠΈΡΠΈΡΠ½Π΅ΠΌΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π²ΠΎ GitLab.
- ΠΠΎΠ΄Π°Π΄Π΅ΡΠ΅ Π·Π°Π΄Π°ΡΠ° Π²ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° Π³Π°ΡΠΎΠ²ΠΎΠ΄ΠΎΡ
pages(ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠ°Π½ Π·Π±ΠΎΡ Π·Π° Π·Π°Π΄Π°ΡΠΈ Π·Π° ΠΎΠ±ΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠ°ΡΡΠΎΠ²ΠΈ Π²ΠΎ GitLab Pages):- Π‘ΠΊΡΠΈΠΏΡΠ°:
nuget install docfx.console -version 2.51.0- ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΡΠ΅ docfx; Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° Π΅ Π½Π°Π²Π΅Π΄Π΅Π½Π° Π·Π° Π΄Π° ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠ° Π΄Π΅ΠΊΠ° ΠΏΠ°ΡΠ΅ΠΊΠΈΡΠ΅ Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ ΡΠ΅ ΡΠΎΡΠ½ΠΈ..docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json- ΠΏΡΠΈΠ±ΠΈΡΠ°ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°
- ΠΡΡΠ΅ΡΠ°ΠΊΡΠΈ Π½Π° ΡΠ°Π·ΠΎΠ»:
- Π‘ΠΊΡΠΈΠΏΡΠ°:
pages:
# snip
artifacts:
paths:
- public
ΠΠΈΡΡΠΊΠ° Π΄ΠΈΠ³ΡΠ΅ΡΠΈΡΠ° Π·Π° docfx
ΠΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎ, ΠΏΡΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡ, Π³ΠΎ Π½Π°Π²Π΅Π΄ΠΎΠ² ΠΈΠ·Π²ΠΎΡΠΎΡ Π½Π° ΠΊΠΎΠ΄ Π·Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° ΠΊΠ°ΠΊΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠ»Π°Π²Π½ΠΈΠΎΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ Π΅ ΡΠΎΠ° ΡΡΠΎ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΠΈ Π·Π° ΡΠ΅ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈ. ΠΠΎ ΡΠ»ΡΡΠ°Ρ ΡΠΎΠ° Π΄Π° Π½Π΅ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π½Π° ΡΠ°Π·ΠΎΠ»ΠΎΡ metadata.src:
{
"metadata": [
{
"src": [
{
"src": "../",
"files": [
"**/*.csproj"
],
"exclude":[
"*.tests*/**"
]
}
],
// --- snip ---
},
// --- snip ---
],
// --- snip ---
}
metadata.src.src: "../"- ΠΎΠ΄ΠΈΠΌΠ΅ Π΅Π΄Π½ΠΎ Π½ΠΈΠ²ΠΎ ΠΏΠΎΠ³ΠΎΡΠ΅ Π²ΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° Π»ΠΎΠΊΠ°ΡΠΈΡΠ°ΡΠ°docfx.json, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π²ΠΎ ΠΎΠ±ΡΠ°ΡΡΠΈ, ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π΄ΡΠ²ΠΎΡΠΎ Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ Π½Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°.metadata.src.files: ["**/*.csproj"]- Π³Π»ΠΎΠ±Π°Π»Π΅Π½ ΠΌΠΎΠ΄Π΅Π», Π³ΠΈ ΡΠΎΠ±ΠΈΡΠ°ΠΌΠ΅ ΡΠΈΡΠ΅ C # ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΠΎΠ΄ ΡΠΈΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΈ.metadata.src.exclude: ["*.tests*/**"]- Π³Π»ΠΎΠ±Π°Π»Π½Π° ΡΠ΅ΠΌΠ°, ΠΈΡΠΊΠ»ΡΡΠ΅ΡΠ΅ ΡΓ¨ ΠΎΠ΄ ΠΏΠ°ΠΏΠΊΠΈΡΠ΅ ΡΠΎ.testsΠΠΎ Π½Π°ΡΠ»ΠΎΠ²ΠΎΡ
Π‘ΡΠ±ΡΠΎΡΠ°Π»
Π’Π°ΠΊΠ²Π° Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ Π·Π° ΡΠ°ΠΌΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΡΠ°Ρ ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠΎΠ»ΡΠΈ ΠΊΠ°ΡΠ΅, ΡΡΠΎ ΡΠ΅ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π΄Π°Π»ΠΈ ΠΊΠΎΠ΄ΠΎΡ Π΅ Π²Π³ΡΠ°Π΄Π΅Π½ ΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΈΡΠ΅ Π΄Π° ΠΏΠΎΠΌΠΈΠ½Π°Ρ, Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ Π½ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ, Π΄Π° ΡΠ° Π°ΠΆΡΡΠΈΡΠ°ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° ΠΈ Π΄Π° Π³ΠΎ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΠΈΡΠ΅ ΠΎΠΊΠΎΡΠΎ ΡΠΎ ΡΠ±Π°Π²ΠΈ Π·Π½Π°ΡΠΊΠΈ Π²ΠΎ README Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΡΠΎ ΡΠ΅ΠΊΠΎΠ΅ Π±Π°ΡΠ°ΡΠ΅ Π·Π° ΡΠΏΠΎΡΡΠ²Π°ΡΠ΅ ΠΈ ΠΈΡΠΏΡΠ°ΡΠ°ΡΠ΅ Π΄ΠΎ Π³ΠΎΡΠΏΠΎΠ΄Π°ΡΠΎΡ.
Π€ΠΈΠ½Π°Π»Π½Π° .gitlab-ci.yml
image: mcr.microsoft.com/dotnet/core/sdk:3.1
before_script:
- $PSVersionTable.PSVersion
- dotnet --version
- nuget help | select-string Version
stages:
- build
- test
- deploy
build job:
stage: build
script:
- dotnet build -c Release
tags:
- windows
only:
- merge_requests
- master
artifacts:
paths:
- your/path/to/binaries
test and cover job:
stage: test
tags:
- windows
script:
- dotnet test -c Release /p:CollectCoverage=true
coverage: /|s*Totals*|s*(d+[,.]d+%)/
only:
- merge_requests
- master
pack and deploy job:
stage: deploy
tags:
- windows
script:
- dotnet pack -c Release -o .
- dotnet new nugetconfig
- nuget sources add -name feedName -source https://pkgs.dev.azure.com/your-organization/_packaging/your-feed/nuget/v3/index.json -username your-organization -password $nugetFeedToken -configfile nuget.config -StorePasswordInClearText
- nuget push -source feedName -skipduplicate -apikey az *.nupkg
only:
- master
pages:
tags:
- windows
stage: deploy
script:
- nuget install docfx.console -version 2.51.0
- $env:path = "$env:path;$($(get-location).Path)"
- .docfx.console.2.51.0toolsdocfx.exe .docfxdocfx.json
artifacts:
paths:
- public
only:
- master
ΠΠ±ΠΎΡΡΠ²Π°ΡΡΠΈ Π·Π° Π±Π΅ΡΠΎΠ²ΠΈ
ΠΠΎΡΠ°Π΄ΠΈ Π½ΠΈΠ², Π½Π° ΠΊΡΠ°ΡΠΎΡ Π½Π° ΠΊΡΠ°ΠΈΡΡΠ°ΡΠ°, ΡΠ΅ Π·Π°ΠΏΠΎΡΠ½Π°!
ΠΠ½Π°ΡΠΊΠΈΡΠ΅ ΡΠΎ ΡΡΠ°ΡΡΡΠΈ Π½Π° ΡΠ΅Π²ΠΊΠΎΠ²ΠΎΠ΄ΠΈ ΠΈ ΠΏΠΎΠΊΡΠΈΠ΅Π½ΠΎΡΡ ΡΠΎ ΠΊΠΎΠ΄ ΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π²ΠΎ GitLab Π²ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ Π·Π° CI/CD Π²ΠΎ Π±Π»ΠΎΠΊΠΎΡ Π½Π° ΡΠ΅Π²ΠΊΠΎΠ²ΠΎΠ΄ΠΈ Gtntral:

ΠΠ°ΠΏΡΠ°Π²ΠΈΠ² Π·Π½Π°ΡΠΊΠ° ΡΠΎ Π»ΠΈΠ½ΠΊ Π΄ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° - ΡΠ°ΠΌΡ ΡΓ¨ Π΅ ΡΠΎΡΠ΅ΠΌΠ° Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΠ²ΠΎΡΠ° ΡΠΎΠΏΡΡΠ²Π΅Π½Π° Π·Π½Π°ΡΠΊΠ° ΠΈ Π΄Π° ΡΠ° Π΄ΠΎΠ±ΠΈΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π±Π°ΡΠ°ΡΠ΅.


Azure DevOps Artifacts ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π·Π½Π°ΡΠΊΠΈ Π·Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΡΠΎ Π½Π°ΡΠ½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ°. ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, Π²ΠΎ ΠΈΠ·Π²ΠΎΡΠΎΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Azure DevOps, ΡΡΠ΅Π±Π° Π΄Π° ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π½Π° ΠΡΠ΅ΠΈΡΠ°Ρ Π·Π½Π°ΡΠΊΠ° Π·Π° ΠΈΠ·Π±ΡΠ°Π½ΠΈΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΈ Π΄Π° ΡΠ° ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ ΠΎΠ·Π½Π°ΠΊΠ°ΡΠ° Π·Π° ΠΎΠ·Π½Π°ΡΡΠ²Π°ΡΠ΅:


ΠΠΎΠ΄Π°Π²Π°ΡΠ΅ ΡΠ±Π°Π²ΠΈΠ½Π°
ΠΡΡΠ°ΠΊΠ½ΡΠ²Π°ΡΠ΅ Π½Π° Π²ΠΎΠΎΠ±ΠΈΡΠ°Π΅Π½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΊΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈ
ΠΠΎΠ΄Π΅ΠΊΠ° ΡΠ° ΠΏΠΈΡΡΠ²Π°Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° ΠΈ ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°Π² Π½ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ°, Π½Π°ΠΈΠ΄ΠΎΠ² Π½Π° Π΅Π΄Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π½Π° YAML - ΠΏΠΎΠ²ΡΠΎΡΠ½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈ.
ΠΠ°ΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΠ΄ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ Π·Π° Π·Π°Π΄Π°ΡΠΈ, ΡΠΈΡΠ΅ ΡΠΈΠ΅ Π±Π°ΡΠ°Π°Ρ ΠΎΠ·Π½Π°ΠΊΠ° windows ΠΊΠ°Ρ ΡΡΠΊΠ°ΡΠΎΡ ΠΈ ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π°Ρ ΠΊΠΎΠ³Π° Π±Π°ΡΠ°ΡΠ΅ΡΠΎ Π·Π° ΡΠΏΠΎΡΡΠ²Π°ΡΠ΅ Π΅ ΠΈΡΠΏΡΠ°ΡΠ΅Π½ΠΎ Π΄ΠΎ Π³Π»Π°Π²Π½ΠΈΠΎΡ/ΡΠΎΠ·Π΄Π°Π΄Π΅Π½ (ΠΎΡΠ²Π΅Π½ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°). ΠΠ° Π³ΠΎ Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΠΎΠ²Π° Π½Π° ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΡ ΡΡΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ΅ Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅:
.common_tags: &common_tags
tags:
- windows
.common_only: &common_only
only:
- merge_requests
- master
Π ΡΠ΅Π³Π° ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΎ Π²ΠΌΠ΅ΡΠ½Π΅ΠΌΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΡ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°Π½ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ Π²ΠΎ ΠΎΠΏΠΈΡΠΎΡ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ°:
build job:
<<: *common_tags
<<: *common_only
ΠΠΌΠΈΡΠ°ΡΠ° Π½Π° ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈΡΠ΅ ΠΌΠΎΡΠ° Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π°Ρ ΡΠΎ ΡΠΎΡΠΊΠ°, Π·Π° Π΄Π° Π½Π΅ ΡΠ΅ ΡΠΎΠ»ΠΊΡΠ²Π°Π°Ρ ΠΊΠ°ΠΊΠΎ Π·Π°Π΄Π°ΡΠ°.
ΠΠ΅ΡΠ·ΠΈΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ
ΠΠΎΠ³Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΏΠ°ΠΊΠ΅Ρ, ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΎΡ Π³ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΠΏΡΠ΅ΠΊΠΈΠ½ΡΠ²Π°ΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡΠ°, Π° Π²ΠΎ Π½ΠΈΠ²Π½ΠΎ ΠΎΡΡΡΡΡΠ²ΠΎ, ΠΏΡΠΎΠ΅ΠΊΡΠ½ΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ; ΠΊΠΎΠ³Π° ΡΠ΅ Π½Π°ΡΠ΄Π΅ ΡΠ°Π·ΠΎΠ» Π½Π° Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ°, ΡΠ° Π·Π΅ΠΌΠ° Π½Π΅Π³ΠΎΠ²Π°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΊΠ°ΠΊΠΎ Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ ΡΡΠΎ ΡΠ΅ Π³ΡΠ°Π΄ΠΈ. ΠΠ·Π»Π΅Π³ΡΠ²Π° Π΄Π΅ΠΊΠ° Π·Π° Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅Ρ ΡΠΎ Π½ΠΎΠ²Π° Π²Π΅ΡΠ·ΠΈΡΠ°, ΡΡΠ΅Π±Π° ΠΈΠ»ΠΈ Π΄Π° Π³ΠΎ Π°ΠΆΡΡΠΈΡΠ°ΡΠ΅ Π²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ½Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΈΠ»ΠΈ Π΄Π° Π³ΠΎ ΠΏΡΠ΅Π½Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡΠ°.
ΠΡΠ΄Π΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΡΡΡΠ΅ Π΅Π΄Π½Π° Π»ΠΈΡΡΠ° Π½Π° ΠΆΠ΅Π»Π±ΠΈ - ΠΌΠ°Π»ΠΈΡΠ΅ Π΄Π²Π° Π±ΡΠΎΡΠ° Π²ΠΎ Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° Π½Π΅ΠΊΠ° Π±ΠΈΠ΄Π°Ρ Π³ΠΎΠ΄ΠΈΠ½Π°ΡΠ° ΠΈ Π΄Π°ΡΡΠΌΠΎΡ Π½Π° Π³ΡΠ°Π΄Π΅ΡΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ ΠΈ Π΄ΠΎΠ΄Π°ΡΡΠ΅ Π²Π΅ΡΠ·ΠΈΠΈ Π·Π° ΠΏΡΠ΅Π΄ΠΈΠ·Π΄Π°Π²Π°ΡΠ΅. Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅ ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ½Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΈ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΡΠ΅ ΠΏΡΠ΅Π΄ ΡΠ΅ΠΊΠΎΠ΅ ΠΏΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ - Π½ΠΎ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ° Π²ΠΎ Π½Π°ΡΡΠΎΠ²ΠΎΠ΄ΠΎΡ, ΡΠΎΠ±ΠΈΡΠ°ΡΡΠΈ ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ ΠΎΠ΄ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΡ ΠΈ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π°ΡΡΠΈ ΡΠ° Π½ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΡ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡΠ°.
ΠΠ° ΡΠ΅ ββΡΠΎΠ³Π»Π°ΡΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° Π°ΠΊΠΎ ΠΏΠΎΡΠ°ΠΊΠ°ΡΠ° Π·Π° 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 Π΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠΎΠ±Π΅ΠΌΠ½ΠΎ ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠ»ΠΎΡΠ½ΠΎ ΠΎΡΠΊΠΎΠ»ΠΊΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ΅ Π³ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΠ΅ ΠΎΠ²ΠΎΡ Π²ΠΎΠ΄ΠΈΡ - . ΠΡΡΠΈ ΠΈ ΡΠ°ΠΌΡ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΡΠΈ
Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΎ ΠΎΡΠΊΡΠΈΠ²Π°ΡΠ΅, Π³ΡΠ°Π΄Π΅ΡΠ΅, ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅, ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ ΠΈ ΡΠ»Π΅Π΄Π΅ΡΠ΅ Π½Π° Π²Π°ΡΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ
Π‘Π΅Π³Π° ΠΏΠ»Π°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° ΡΠ΅Π²ΠΊΠ° Π·Π° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° Azure, ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Pulumi ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΎ ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ΅Π»Π½Π°ΡΠ° ΡΡΠ΅Π΄ΠΈΠ½Π°, ΡΡΠΎ ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΎΠΏΡΠ°ΡΠ΅Π½ΠΎ Π²ΠΎ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΠ°.
ΠΠ·Π²ΠΎΡ: www.habr.com
