ΠΠ»ΠΈ ΠΊΠ°ΠΊ ΠΎΠ±Π·Π°Π²Π΅ΡΡΠΈΡΡ ΠΊΡΠ°ΡΠΈΠ²ΡΠΌΠΈ Π±Π΅ΠΉΠ΄ΠΆΠΈΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π·Π° ΠΎΠ΄ΠΈΠ½ Π²Π΅ΡΠ΅Ρ Π½Π΅Π½Π°ΠΏΡΡΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄ΠΈΠ½Π³Π°
ΠΠ°Π²Π΅ΡΠ½ΠΎΠ΅, Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΠ΅Ρ-ΠΏΡΠΎΠ΅ΠΊΡ, Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π·ΡΠ΄ Π½Π° ΡΠ΅ΠΌΡ ΠΊΡΠ°ΡΠΈΠ²ΡΡ Π±Π΅ΠΉΠ΄ΠΆΠΈΠΊΠΎΠ² ΡΠΎ ΡΡΠ°ΡΡΡΠ°ΠΌΠΈ, ΠΏΠΎΠΊΡΡΡΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π°, Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π² nugetβ¦ Π ΠΌΠ΅Π½Ρ ΡΡΠΎΡ Π·ΡΠ΄ ΠΏΡΠΈΠ²ΡΠ» ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΊ Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Ρ ΠΎΠ±Π·Π°Π²ΡΠ»ΡΡ Π²ΠΎΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΡΠ°ΡΠΎΡΠΎΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²:
Π ΡΡΠ°ΡΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π° Π±Π°Π·ΠΎΠ²Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΈ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² Π½Π° .Net Core Π² GitLab, Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π² GitLab Pages ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ ΡΠΎΠ±ΡΠ°Π½Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π² ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΡΠΈΠ΄ Π² Azure DevOps.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ VS Code c ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ
ΠΡΠ°ΡΠΊΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅
CD β ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΡΠ½ΡΠ», Π° Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠΆΠ΅ Π²ΡΡ ΡΠΏΠ°Π»ΠΎ?
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ CI/CD ΠΈ Π·Π°ΡΠ΅ΠΌ Π½ΡΠΆΠ½ΠΎ β ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π½Π°Π³ΡΠ³Π»ΠΈΡΡ. ΠΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² Π² GitLab Π½Π°ΠΉΡΠΈ
- ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΎΡΠΏΡΠ°Π»ΡΠ΅Ρ ΠΊΠΎΠΌΠΌΠΈΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, ΡΠΎΠ·Π΄Π°ΡΡ merge request ΡΠ΅ΡΠ΅Π· ΡΠ°ΠΉΡ, ΠΈΠ»ΠΈ Π΅ΡΡ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ²Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠ²Π½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½,
- ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π²ΡΠ±ΠΈΡΠ°ΡΡΡΡ Π²ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΈΡ Π·Π°ΠΏΡΡΡΠΈΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅,
- Π·Π°Π΄Π°ΡΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΡΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈ ΡΡΠ°ΠΏΠ°ΠΌΠΈ,
- ΡΡΠ°ΠΏΡ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ β Ρ.Π΅. ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΡΡΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ°,
- Π΅ΡΠ»ΠΈ ΡΡΠ°ΠΏ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ΅ΠΉ (Ρ.Π΅. Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ΅ΠΉ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½Π° ΠΈΠ· Π·Π°Π΄Π°Ρ ΡΡΠ°ΠΏΠ°) β ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ (ΠΏΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π°),
- Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΡΡΠ°ΠΏΡ Π·Π°Π²Π΅ΡΡΠ΅Π½Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΠ΅Π΄ΡΠΈΠΌ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΠΌΠ΅Π΅ΠΌ:
- ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ β Π½Π°Π±ΠΎΡ Π·Π°Π΄Π°Ρ, ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ Π² ΡΡΠ°ΠΏΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±ΡΠ°ΡΡ, ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄, ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ Π³ΠΎΡΠΎΠ²ΡΡ ΡΠ±ΠΎΡΠΊΡ Π² ΠΎΠ±Π»Π°ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ, ΠΈ ΠΏΡ.,
- ΡΡΠ°ΠΏ (stage) β Π΅Π΄ΠΈΠ½ΠΈΡΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ 1+ Π·Π°Π΄Π°ΡΡ,
- Π·Π°Π΄Π°ΡΠ° (job) β Π΅Π΄ΠΈΠ½ΠΈΡΠ° ΡΠ°Π±ΠΎΡΡ Π² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π΅. Π‘ΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠΊΡΠΈΠΏΡΠ° (ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ), ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π·Π°ΠΏΡΡΠΊΠ°, Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ/ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ² ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ.
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π·Π°Π΄Π°ΡΠ° ΠΏΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ CI/CD ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π°Π±ΠΎΡ Π·Π°Π΄Π°Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ².
ΠΠ΅ΡΠ΅Π΄ Π½Π°ΡΠ°Π»ΠΎΠΌ: ΠΏΠΎΡΠ΅ΠΌΡ?
- ΠΠΎΡΠ΅ΠΌΡ GitLab?
ΠΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΏΠΎΠ΄ ΠΏΠ΅Ρ-ΠΏΡΠΎΠ΅ΠΊΡΡ, Π½Π° GitHub’e ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΠΏΠ»Π°ΡΠ½ΡΠΌΠΈ, Π° Ρ β ΠΆΠ°Π΄Π½ΡΠΌ. Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΡΡΠ°Π»ΠΈ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΌΠΈ, Π½ΠΎ ΠΏΠΎΠΊΠ° ΡΡΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΠΏΠΎΠ²ΠΎΠ΄ΠΎΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΌ ΠΏΠ΅ΡΠ΅Π΅Π·ΠΆΠ°ΡΡ Π½Π° GitHub.
- ΠΠΎΡΠ΅ΠΌΡ Π½Π΅ Azure DevOps Pipelines?
ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ°ΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½Π°Ρ β Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΡΠ΅Π±ΡΡΡΡΡ Π·Π½Π°Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°ΠΌΠΈ git β Π² ΠΏΠ°ΡΡ ΠΊΠ»ΠΈΠΊΠΎΠ², ΠΈΠΌΠΏΠΎΡΡ SSH-ΠΊΠ»ΡΡΠ΅ΠΉ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ β ΡΠΎΠΆΠ΅, ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π»Π΅Π³ΠΊΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΈΠ· ΡΠ°Π±Π»ΠΎΠ½Π°.
ΠΡΡ ΠΎΠ΄Π½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ: ΡΡΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΈ ΡΠ΅Π³ΠΎ Ρ ΠΎΡΠ΅ΡΡΡ
ΠΠΌΠ΅Π΅ΠΌ:
- ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π² GitLab.
Π₯ΠΎΡΠΈΠΌ:
- Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ±ΠΎΡΠΊΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ merge request,
- ΡΠ±ΠΎΡΠΊΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ merge request ΠΈ ΠΏΡΡΠ° Π² ΠΌΠ°ΡΡΠ΅Ρ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ Π½Π°Π»ΠΈΡΠΈΡ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ,
- ΠΎΡΠΏΡΠ°Π²ΠΊΡ ΡΠΎΠ±ΡΠ°Π½Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π² ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΡΠΈΠ΄ Π² Azure DevOps,
- ΡΠ±ΠΎΡΠΊΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π² GitLab Pages,
- Π±Π΅ΠΉΠ΄ΠΆΠΈΠΊΠΈ!11
ΠΠΏΠΈΡΠ°Π½Π½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΡΠ½ΠΎ Π»ΠΎΠΆΠ°ΡΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°:
- ΠΡΠ°ΠΏ 1 β ΡΠ±ΠΎΡΠΊΠ°
- Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΠ΄, Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ
- ΠΡΠ°ΠΏ 2 β ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ Ρ ΡΡΠ°ΠΏΠ° ΡΠ±ΠΎΡΠΊΠΈ, Π³ΠΎΠ½ΡΠ΅ΠΌ ΡΠ΅ΡΡΡ, ΡΠΎΠ±ΡΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΊΠΎΠ΄Π°
- ΠΡΠ°ΠΏ 3 β ΠΎΡΠΏΡΠ°Π²ΠΊΠ°
- ΠΠ°Π΄Π°ΡΠ° 1 β ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ nuget-ΠΏΠ°ΠΊΠ΅Ρ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π² Azure DevOps
- ΠΠ°Π΄Π°ΡΠ° 2 β ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ°ΠΉΡ ΠΈΠ· xmldoc Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌ Π² GitLab Pages
ΠΡΠΈΡΡΡΠΏΠΈΠΌ!
Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
ΠΠΎΡΠΎΠ²ΠΈΠΌ Π°ΠΊΠΊΠ°ΡΠ½ΡΡ
-
Π‘ΠΎΠ·Π΄Π°ΡΠΌ Π°ΠΊΠΊΠ°ΡΠ½Ρ Π²
Microsoft Azure -
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π²
Azure DevOps -
Π‘ΠΎΠ·Π΄Π°ΡΠΌ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ
- ΠΠΌΡ β Π»ΡΠ±ΠΎΠ΅
- ΠΠΈΠ΄ΠΈΠΌΠΎΡΡΡ β Π»ΡΠ±Π°Ρ
-
ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Create ΠΏΡΠΎΠ΅ΠΊΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½, ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ²Π΅ΡΡΡΠ½ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° Π΅Π³ΠΎ ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠ° ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π½Π΅Π½ΡΠΆΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΏΠ΅ΡΠ΅ΠΉΠ΄Ρ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΡ (Π½ΠΈΠΆΠ½ΡΡ ΡΡΡΠ»ΠΊΠ° Π² ΡΠΏΠΈΡΠΊΠ΅ ΡΠ»Π΅Π²Π° -> Overview -> Π±Π»ΠΎΠΊ Azure DevOps Services)
-
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π² Atrifacts, ΠΆΠΌΡΠΌ Create feed
- ΠΠ²ΠΎΠ΄ΠΈΠΌ ΠΈΠΌΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°
- ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ
- Π‘Π½ΠΈΠΌΠ°Π΅ΠΌ Π³Π°Π»ΠΎΡΠΊΡ Include packages from common public sources, ΡΡΠΎΠ±Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π½Π΅ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ»ΡΡ Π² ΠΏΠΎΠΌΠΎΠΉΠΊΡ ΠΊΠ»ΠΎΠ½ nuget
-
ΠΠΌΡΠΌ Connect to feed, Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Visual Studio, ΠΈΠ· Π±Π»ΠΎΠΊΠ° Machine Setup ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ Source
-
ΠΠ΄ΡΠΌ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°, Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Personal Access Token
-
Π‘ΠΎΠ·Π΄Π°ΡΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠΎΠΊΠ΅Π½ Π΄ΠΎΡΡΡΠΏΠ°
- ΠΠΌΡ β ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅
- ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ β ΡΠ΅ΠΊΡΡΠ°Ρ
- Π‘ΡΠΎΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ β ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ 1 Π³ΠΎΠ΄
- ΠΠ±Π»Π°ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ (scope) β Packaging/Read & Write
-
ΠΠΎΠΏΠΈΡΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Π½ β ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΊΡΡΡΠΈΡ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎ
-
ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π² GitLab, Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ CI/CD
-
Π Π°ΡΠΊΡΡΠ²Π°Π΅ΠΌ Π±Π»ΠΎΠΊ Variables, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΡ
- ΠΠΌΡ β Π»ΡΠ±ΠΎΠ΅ Π±Π΅Π· ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² (Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅)
- ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ β ΡΠΎΠΊΠ΅Π½ Π΄ΠΎΡΡΡΠΏΠ° ΠΈΠ· ΠΏ. 9
- ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ Mask variable
ΠΠ° ΡΡΠΎΠΌ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π·Π°Π²Π΅ΡΡΠ΅Π½Π°.
ΠΠΎΡΠΎΠ²ΠΈΠΌ ΠΊΠ°ΡΠΊΠ°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ CI/CD Π² GitLab ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΠΉΠ» .gitlab-ci.yml
ΠΈΠ· ΠΊΠΎΡΠ½Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ. ΠΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ ΠΏΡΡΡ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ.
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, ΡΠ°ΠΉΠ» ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ YAML
. Π Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠ»ΡΡΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡ Π½Π° Π²Π΅ΡΡ
Π½Π΅ΠΌ ΡΡΠΎΠ²Π½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΡΡΠΎΠ²Π½Π΅ΠΉ.
Π‘Π½Π°ΡΠ°Π»Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΡΡΠ»ΠΊΡ Π½Π° docker-ΠΎΠ±ΡΠ°Π·, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°Ρ
ΠΎΠ΄ΠΈΠΌ
image: mcr.microsoft.com/dotnet/core/sdk:3.1
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° Ρ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΎΠ±ΡΠ°Π·ΠΎΠ² Microsoft Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°ΡΠ°Π½ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°Π·, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°ΠΏ β Π΄ΠΎΠ±Π°Π²ΠΈΡΡ stage‘Ρ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ GitLab ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ 5 ΡΡΠ°ΠΏΠΎΠ²:
.pre
β Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄ΠΎ Π²ΡΠ΅Ρ ΡΡΠ°ΠΏΠΎΠ²,.post
β Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ΅Ρ ΡΡΠ°ΠΏΠΎΠ²,build
β ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΡΠ»Π΅.pre
ΡΡΠ°ΠΏ,test
β Π²ΡΠΎΡΠΎΠΉ ΡΡΠ°ΠΏ,deploy
β ΡΡΠ΅ΡΠΈΠΉ ΡΡΠ°ΠΏ.
ΠΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΈΡ ΡΠ²Π½ΠΎ, Π²ΠΏΡΠΎΡΠ΅ΠΌ. ΠΠΎΡΡΠ΄ΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΊΠ°Π·Π°Π½Ρ ΡΡΠ°ΠΏΡ, Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΏΠΎΡΡΠ΄ΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ. ΠΠ»Ρ ΠΏΠΎΠ»Π½ΠΎΡΡ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ:
stages:
- build
- test
- deploy
ΠΠ»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π·Π°Π΄Π°ΡΠΈ. ΠΠΎΠ±Π°Π²ΠΈΠΌ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ before_script
:
before_script:
- $PSVersionTable.PSVersion
- dotnet --version
- nuget help | select-string Version
ΠΡΡΠ°Π»ΠΎΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½Ρ Π·Π°Π΄Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π·Π°ΠΏΡΡΡΠΈΠ»ΡΡ. ΠΠΎΠΊΠ° ΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡΡΡΡΡ Π·Π°Π΄Π°ΡΡ Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ:
dummy job:
script:
- echo ok
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ Π²ΡΡ Ρ
ΠΎΡΠΎΡΠΎ, ΠΊΠΎΠΌΠΌΠΈΡΠΈΠΌ, ΠΏΡΡΠΈΠΌ, ΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΡΠ°ΠΉΡΠ΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡβ¦ Π ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΡΠΈΠ±ΠΊΡ ΡΠΊΡΠΈΠΏΡΠ° β bash: .PSVersion: command not found
. WTF?
ΠΡΡ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ β ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ runner’Ρ (ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠ΅ Π·Π° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π·Π°Π΄Π°Ρ, ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ 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
ΠΡΠΏΠΎΠΌΠ½ΠΈΠΌ Π½Π°Π±ΠΎΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ β ΡΠ±ΠΎΡΠΊΠ° ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ merge request, ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Π² Azure DevOps β Π΄Π»Ρ merge request ΠΈ ΠΏΡΡΠ΅ΠΉ Π² ΠΌΠ°ΡΡΠ΅Ρ, Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ β Π΄Π»Ρ ΠΏΡΡΠ΅ΠΉ Π² ΠΌΠ°ΡΡΠ΅Ρ.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°ΡΡΡΠΎΠΈΠΌ Π·Π°Π΄Π°ΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΊΠΎΠ΄Π°, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ merge request:
build job:
# snip
only:
- merge_request
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΡΡΡΠΎΠΈΠΌ Π·Π°Π΄Π°ΡΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π½Π° ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ Π½Π° merge request ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² Π² ΠΌΠ°ΡΡΠ΅Ρ:
pack and deploy job:
# snip
only:
- merge_request
- master
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, Π²ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΈ ΠΏΡΡΠΌΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½ΠΎ.
Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Π·Π°Π΄Π°ΡΡ Π½Π° ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½ merge request Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΎΠΉ:
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/*
ΠΡΡΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ wildcards, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΈΡ Π·Π°Π΄Π°Π½ΠΈΠ΅.
ΠΡΠ»ΠΈ Π·Π°Π΄Π°ΡΠ° ΡΠΎΠ·Π΄Π°ΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ, ΡΠΎ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ°Ρ Π·Π°Π΄Π°ΡΠ° ΡΠΌΠΎΠΆΠ΅Ρ ΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊ Π½ΠΈΠΌ Π΄ΠΎΡΡΡΠΏ β ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ ΠΏΠΎ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΏΡΡΡΠΌ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΡΠ½Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ Π±ΡΠ»ΠΈ ΡΠΎΠ±ΡΠ°Π½Ρ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ. Π’Π°ΠΊ ΠΆΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ Π½Π° ΡΠ°ΠΉΡΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π³ΠΎΡΠΎΠ² (ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½) ΠΊΠ°ΡΠΊΠ°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π΄Π»Ρ Π·Π°Π΄Π°Ρ.
ΠΠΈΡΠ΅ΠΌ ΡΠΊΡΠΈΠΏΡΡ
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π°-ΡΠΎ Π΄Π°Π²Π½ΠΎ, Π² Π΄Π°Π»ΡΠΊΠΎΠΉ-Π΄Π°Π»ΡΠΊΠΎΠΉ Π³Π°Π»Π°ΠΊΡΠΈΠΊΠ΅, ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΡ (Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ Π½Π° .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
; Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ capture-Π³ΡΡΠΏΠΏΠ°, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ Π² Π±Π΅ΠΉΠ΄ΠΆ:
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 -StorePasswordInClearText
name
β Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°, Π½Π΅ ΠΏΡΠΈΠ½ΠΈΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ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
; Ρ ΠΊΠ»ΡΡΠΎΠΌ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΏΡΡΠ΅Π½Π°.
- ΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π²ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΡΡΡΠΎΠΈΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ:
- ΠΠ»Ρ Π½Π°ΡΠ°Π»Π°, Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ, Π² Π²Π΅ΡΠΊΠ΅ master, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡ docfx. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΡΠ½Ρ Π½Π°Π΄ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
docfx init
ΠΈ Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π·Π°Π΄Π°Π΄ΠΈΠΌ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°Π·Π΄Π΅ΡΡ .- ΠΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Π²Π°ΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π²ΡΡ
ΠΎΠ΄Π½ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ
..public
β GitLab ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±Π΅ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ°ΠΏΠΊΠΈ public Π² ΠΊΠΎΡΠ½Π΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΊΠ°ΠΊ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π΄Π»Ρ Pages. Π’.ΠΊ. ΠΏΡΠΎΠ΅ΠΊΡ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΏΠ°ΠΏΠΊΠ΅ β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² ΠΏΡΡΡ Π²ΡΡ ΠΎΠ΄ Π½Π° ΡΡΠΎΠ²Π΅Π½Ρ Π²Π²Π΅ΡΡ .
- ΠΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Π²Π°ΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π²ΡΡ
ΠΎΠ΄Π½ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ
- ΠΡΠΏΡΠ°Π²ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² GitLab.
- Π ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π·Π°Π΄Π°ΡΡ
pages
(Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ Π΄Π»Ρ Π·Π°Π΄Π°Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ°ΠΉΡΠΎΠ² Π² GitLab Pages):- Π‘ΠΊΡΠΈΠΏΡ:
nuget install docfx.console -version 2.51.0
β ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ docfx; Π²Π΅ΡΡΠΈΡ ΡΠΊΠ°Π·Π°Π½Π° Π΄Π»Ρ Π³Π°ΡΠ°Π½ΡΠΈΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΡΠ΅ΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°..docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json
β ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
- Π£Π·Π΅Π» artifacts:
- Π‘ΠΊΡΠΈΠΏΡ:
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 pipelines:
ΠΠ΅ΠΉΠ΄ΠΆ ΡΠΎ ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Ρ ΡΠΎΠ·Π΄Π°Π²Π°Π» Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅
![ΠΡΠΈΠΌΠ΅Ρ Ρ Shields.io](https://img.shields.io/badge/custom-badge-blue)
Azure DevOps Artifacts ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±Π΅ΠΉΠ΄ΠΆΠΈ Π΄Π»Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ΅ Π½Π° ΡΠ°ΠΉΡΠ΅ Azure DevOps Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° Create badge Ρ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ markdown-ΡΠ°Π·ΠΌΠ΅ΡΠΊΡ:
ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊΡΠ°ΡΠΎΡΡ
ΠΡΠ΄Π΅Π»ΡΠ΅ΠΌ ΠΎΠ±ΡΠΈΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
ΠΠΎ Π²ΡΠ΅ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ ΠΏΠΎΠΈΡΠΊΠΎΠ² ΠΏΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Ρ Π½Π°ΡΠΊΠ½ΡΠ»ΡΡ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ YAML β ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ².
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π·Π°Π΄Π°Ρ, Π²ΡΠ΅ ΠΎΠ½ΠΈ ΡΡΠ΅Π±ΡΡΡ Π½Π°Π»ΠΈΡΠΈΡ ΡΠ΅Π³Π° windows
Ρ ΡΠ°Π½Π½Π΅ΡΠ°, ΠΈ ΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ Π² ΠΌΠ°ΡΡΠ΅Ρ/ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΡΠ»ΠΈΡΠ½ΠΈΠ΅ (ΠΊΡΠΎΠΌΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ). ΠΠΎΠ±Π°Π²ΠΈΠΌ ΡΡΠΎ Π²ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ:
.common_tags: &common_tags
tags:
- windows
.common_only: &common_only
only:
- merge_requests
- master
Π ΡΠ΅ΠΏΠ΅ΡΡ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΡΠ°Π²ΠΈΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΉ ΡΠ°Π½Π΅Π΅ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ:
build job:
<<: *common_tags
<<: *common_only
ΠΠ°Π·Π²Π°Π½ΠΈΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΡΠΎΡΠΊΠΈ, ΡΡΠΎΠ±Ρ Π½Π΅ Π±ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΊΠ°ΠΊ Π·Π°Π΄Π°ΡΠ°.
ΠΠ΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΊΠ»ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΠΈ Π² ΠΈΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ β ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²; Π½Π°ΠΉΠ΄Ρ ΡΠ·Π΅Π» Version, ΠΎΠ½ Π±Π΅ΡΡΡ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Π²Π΅ΡΡΠΈΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°. ΠΡΡ ΠΎΠ΄ΠΈΡ, ΡΡΠΎΠ±Ρ ΡΠΎΠ±ΡΠ°ΡΡ ΠΏΠ°ΠΊΠ΅Ρ Ρ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ, Π½ΡΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π΅Ρ Π² ΡΠ°ΠΉΠ»Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π»ΠΈΠ±ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
ΠΠΎΠ±Π°Π²ΠΈΠΌ Π΅ΡΡ ΠΎΠ΄Π½Ρ Ρ ΠΎΡΠ΅Π»ΠΊΡ β ΠΏΡΡΡΡ ΠΌΠ»Π°Π΄ΡΠΈΠ΅ Π΄Π²Π° Π½ΠΎΠΌΠ΅ΡΠ° Π² Π²Π΅ΡΡΠΈΠΈ Π±ΡΠ΄ΡΡ Π³ΠΎΠ΄ΠΎΠΌ ΠΈ Π΄Π°ΡΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡΠ΅ΡΠ΅Π»ΠΈΠ·Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ. ΠΠΎΠ±Π°Π²Π»ΡΡΡ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ°ΠΉΠ» ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ β Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Π΄Ρ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ ΠΈ Π² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π΅, ΡΠΎΠ±ΠΈΡΠ°Ρ Π²Π΅ΡΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ ΡΠ΅ΡΠ΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
Π£ΡΠ»ΠΎΠ²ΠΈΠΌΡΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ° Π΅ΡΡΡ ΡΡΡΠΎΠΊΠ° Π²ΠΈΠ΄Π° release (v./ver./version) <version number> (rev./revision <revision>)?
, ΡΠΎ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΠ· ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π±ΡΠ°ΡΡ Π²Π΅ΡΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ°, Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡ Π΅Ρ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π΄Π°ΡΠΎΠΉ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ dotnet pack
. Π ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ β ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΏΠ°ΠΊΠ΅Ρ.
ΠΠ°Π½Π½ΡΡ Π·Π°Π΄Π°ΡΡ ΡΠ΅ΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΊΡΠΈΠΏΡ:
# ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΡΡΠΎΠΊΠΈ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ
$rx = "releases+(v.?|ver.?|version)s*(?<maj>d+)(?<min>.d+)?(?<rel>.d+)?s*((rev.?|revision)?s+(?<rev>[a-zA-Z0-9-_]+))?"
# ΠΈΡΠ΅ΠΌ ΡΡΡΠΎΠΊΡ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΌ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΡ
GitLab'ΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
$found = $env:CI_COMMIT_MESSAGE -match $rx
# ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ Π½Π΅Ρ - Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ
if (!$found) { Write-Output "no release info found, aborting"; exit }
# ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΌΠ°ΠΆΠΎΡΠ½ΡΡ ΠΈ ΠΌΠΈΠ½ΠΎΡΠ½ΡΡ Π²Π΅ΡΡΠΈΠΈ
$maj = $matches['maj']
$min = $matches['min']
# Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½ΠΎΠΌΠ΅Ρ ΡΠ΅Π»ΠΈΠ·Π° - ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΅Π³ΠΎ, ΠΈΠ½Π°ΡΠ΅ - ΡΠ΅ΠΊΡΡΠΈΠΉ Π³ΠΎΠ΄
if ($matches.ContainsKey('rel')) { $rel = $matches['rel'] } else { $rel = ".$(get-date -format "yyyy")" }
# Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π½ΠΎΠΌΠ΅ΡΠ° ΡΠ±ΠΎΡΠΊΠΈ - ΡΠ΅ΠΊΡΡΠΈΠ΅ ΠΌΠ΅ΡΡΡ ΠΈ Π΄Π΅Π½Ρ
$bld = $(get-date -format "MMdd")
# Π΅ΡΠ»ΠΈ Π΅ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΏΡΠ΅ΡΠ΅Π»ΠΈΠ·Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ - Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΡ
Π² Π²Π΅ΡΡΠΈΡ
if ($matches.ContainsKey('rev')) { $rev = "-$($matches['rev'])" } else { $rev = '' }
# ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π΅Π΄ΠΈΠ½ΡΡ ΡΡΡΠΎΠΊΡ Π²Π΅ΡΡΠΈΠΈ
$version = "$maj$min$rel.$bld$rev"
# ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΠ°ΠΊΠ΅ΡΡ
dotnet pack -c Release -o . /p:Version=$version
ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠΊΡΠΈΠΏΡ Π² Π·Π°Π΄Π°ΡΡ pack and deploy job
ΠΈ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌ ΡΠ±ΠΎΡΠΊΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΡΡΡΠΎΠ³ΠΎ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ°.
ΠΡΠΎΠ³ΠΎ
ΠΠΎΡΡΠ°ΡΠΈΠ² ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΏΠΎΠ»ΡΠ°ΡΠ°-ΡΠ°Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΎΡΠ»Π°Π΄ΠΊΡ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ powershell ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠ°ΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΡ Π·Π°ΠΏΡΡΠΊΠΎΠ², ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΡΡΠΈΠ½Π½ΡΡ Π·Π°Π΄Π°Ρ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, GitLab CI/CD Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΎΠ±ΡΠΈΡΠ½Π΅Π΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ³ΡΠ°Π½Π½Π΅Π΅, ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° β
automatically detect, build, test, deploy, and monitor your applications
Π’Π΅ΠΏΠ΅ΡΡ Π² ΠΏΠ»Π°Π½Π°Ρ β ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π΄Π»Ρ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Azure, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Pulumi ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com