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

Π ΡΡΠ°ΡΠΈΡΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°Π½Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΈ Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π·Π° ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΡ ΠΊΠ»Π°ΡΠΎΠ²Π΅ Π½Π° .Net Core Π² GitLab, Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π² GitLab Pages ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΡΡΠ±ΡΠ°Π½ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π² ΡΠ°ΡΡΠ΅Π½ ΡΠΈΠΉΠ΄ Π² Azure DevOps.
ΠΠ°ΡΠΎ ΡΡΠ΅Π΄Π° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π±Π΅ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ VS Code Ρ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ (Π·Π° Π²Π°Π»ΠΈΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»Π° Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡ ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°).
ΠΡΠ°ΡΠΊΠΎ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
CD β ΡΠΎΠ²Π° Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΡΡΠ²Π°Ρ, Π° ΠΏΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π²Π΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΏΠ°Π΄Π½Π°Π»ΠΎ?
ΠΠ°ΠΊΠ²ΠΎ Π΅ CI/CD ΠΈ Π·Π°ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ β ΠΌΠΎΠΆΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈ Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ. ΠΡΠ»Π½Π°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΎΡΠ½ΠΎΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π½Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΈ Π² GitLab ΡΡΡΠΎ Π½Π΅ Π΅ ΡΡΡΠ΄Π½Π° Π·Π° Π½Π°ΠΌΠΈΡΠ°Π½Π΅. ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ ΠΈΠ·ΠΏΡΠ°ΡΠ° ΠΊΠΎΠΌΠΈΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΡΡΠ·Π΄Π°Π²Π° merge request ΠΏΡΠ΅Π· ΡΠ°ΠΉΡΠ°,
- ΠΈΠ»ΠΈ ΠΏΠΎ Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½ ΡΠ²Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠ²Π½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΡΠ΅ ΠΈΠ·Π±ΠΈΡΠ°Ρ Π²ΡΠΈΡΠΊΠΈ Π·Π°Π΄Π°ΡΠΈ, ΡΠΈΠΈΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈ Π² Π΄Π°Π΄Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ,,
- Π·Π°Π΄Π°ΡΠΈΡΠ΅ ΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Ρ Π² ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Ρ Π΅ΡΠ°ΠΏΠΈΡΠ΅ ΡΠΈ,
- Π΅ΡΠ°ΠΏΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΡΠ΅ ΠΈΠ·ΠΏ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ β Ρ.Π΅.
- ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π²ΡΠΈΡΠΊΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΎΡ ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ, Π°ΠΊΠΎ Π΅ΡΠ°ΠΏΡΡ Π·Π°Π²ΡΡΡΠΈ Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ (Ρ.Π΅. Π°ΠΊΠΎ ΠΏΠΎΠ½Π΅ Π΅Π΄Π½Π° ΠΎΡ Π·Π°Π΄Π°ΡΠΈΡΠ΅ Π² Π΅ΡΠ°ΠΏΠ° Π·Π°Π²ΡΡΡΠΈ Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ) β ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΡΡ ΡΠΏΠΈΡΠ° (
- ΠΏΠΎΡΡΠΈ Π²ΠΈΠ½Π°Π³ΠΈΠ°ΠΊΠΎ Π²ΡΠΈΡΠΊΠΈ Π΅ΡΠ°ΠΏΠΈ Π·Π°Π²ΡΡΡΠ²Π°Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΡΡ ΡΠ΅ ΡΡΠΈΡΠ° Π·Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π».),
- Π’Π°ΠΊΠ° ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅:
ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ β Π½Π°Π±ΠΎΡ ΠΎΡ Π·Π°Π΄Π°ΡΠΈ, ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π² Π΅ΡΠ°ΠΏΠΈ, Π² ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ±ΠΈΡΠ°, ΡΠ΅ΡΡΠΈΡΠ°, ΠΎΠΏΠ°ΠΊΠΎΠ²Π° ΠΊΠΎΠ΄Π°, Π΄Π° ΡΠ΅ ΡΠ°Π·Π³ΡΡΡΠ° Π³ΠΎΡΠΎΠ²Π°ΡΠ° ΡΠ±ΠΎΡΠΊΠ° Π² ΠΎΠ±Π»Π°ΡΠ΅Π½ ΡΠ΅ΡΠ²ΠΈΡ ΠΈ Ρ.Π½.
- Π΅ΡΠ°ΠΏ (
- stagestage) β Π΅Π΄ΠΈΠ½ΠΈΡΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°, ΡΡΠ΄ΡΡΠΆΠ° 1+ Π·Π°Π΄Π°ΡΠ°,
- Π·Π°Π΄Π°ΡΠ° (job) β Π΅Π΄ΠΈΠ½ΠΈΡΠ° ΡΠ°Π±ΠΎΡΠ° Π² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°. Π‘ΡΡΡΠΎΠΈ ΡΠ΅ ΠΎΡ ΡΠΊΡΠΈΠΏΡ (Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ), ΡΡΠ»ΠΎΠ²ΠΈΡ Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅, Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π·Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅/ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ.
Π‘ΡΠΎΡΠ²Π΅ΡΠ½ΠΎ, Π·Π°Π΄Π°ΡΠ°ΡΠ° ΠΏΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π½Π° CI/CD ΡΠ΅ ΡΡΡΡΠΎΠΈ Π² ΡΠΎΠ²Π° Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ Π½Π°Π±ΠΎΡ ΠΎΡ Π·Π°Π΄Π°ΡΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠΈ Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅, ΡΠ΅ΡΡΠ²Π°Π½Π΅ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π° ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅.
ΠΡΠ΅Π΄ΠΈ Π·Π°ΠΏΠΎΡΠ²Π°Π½Π΅: Π·Π°ΡΠΎ?
- ΠΠ°ΡΠΎ GitLab?
ΠΠ°ΡΠΎΡΠΎ ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π°Ρ ΡΠ°ΡΡΠ½ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π·Π° Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, Π½Π° GitHub ΡΠ΅ Π±ΡΡ Π° ΠΏΠ»Π°ΡΠ΅Π½ΠΈ, Π° Π°Π· ΡΡΠΌ ΠΈΠΊΠΎΠ½ΠΎΠΌΠΈΡΠ΅Π½. Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈΡΠ΅ ΡΡΠ°Π½Π°Ρ Π° Π±Π΅Π·ΠΏΠ»Π°ΡΠ½ΠΈ, Π½ΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠΎΠ²Π° Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π° ΠΌΠ΅Π½ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π° Π½Π° GitHub.
- ΠΠ°ΡΠΎ Π½Π΅ Azure DevOps Pipelines?
ΠΠ°ΡΠΎΡΠΎ ΡΠ°ΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½Π° β Π΄ΠΎΡΠΈ Π½Π΅ ΡΠ° Π½ΡΠΆΠ½ΠΈ ΠΏΠΎΠ·Π½Π°Π½ΠΈΡ Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄. ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΡΠ° Ρ Π²ΡΠ½ΡΠ½ΠΈ Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈ Π½Π° git ΡΡΠ°Π²Π° Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠ»ΠΈΠΊΠ²Π°Π½ΠΈΡ, ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° SSH ΠΊΠ»ΡΡΠΎΠ²Π΅ Π·Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡΠΈ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΡΡΡΠΎ, ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΡΡ Π»Π΅ΡΠ½ΠΎ ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠ²Π° Π΄ΠΎΡΠΈ Π½Π΅ ΠΎΡ ΡΠ°Π±Π»ΠΎΠ½.
ΠΠ·Ρ ΠΎΠ΄Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΡ: ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅
ΠΠΌΠ°ΠΌΠ΅:
- ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π² GitLab.
ΠΡΠΊΠ°ΠΌΠ΅:
- Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π·Π° Π²ΡΡΠΊΠΎ merge request,
- ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° Π²ΡΡΠΊΠΎ merge request ΠΈ ΠΏΡΡΠ½Π°ΡΠΈ Π² ΠΌΠ°ΡΡΠ΅Ρ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π² ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΈΡΠ° Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΡΡΠΎΠΊΠ°,
- ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΡΡΠ±ΡΠ°Π½ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π² ΡΠ°ΡΡΠ΅Π½ ΡΠΈΠΉΠ΄ Π² Azure DevOps,
- ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ Π² GitLab Pages,
- Π±Π΅ΠΉΠ΄ΠΆΠΎΠ²Π΅!11
ΠΠΏΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΡΠ½ΠΎ ΡΠ΅ Π²ΠΏΠΈΡΠ²Π°Ρ Π² ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΌΠΎΠ΄Π΅Π» Π½Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°:
- ΠΡΠ°ΠΏ 1 β ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ
- ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ΄Π°, ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ ΠΊΠ°ΡΠΎ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ
- ΠΡΠ°ΠΏ 2 β ΡΠ΅ΡΡΠ²Π°Π½Π΅
- ΠΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅ ΠΎΡ Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, ΡΡΡΡΠΈΠΌ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅, ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π°
- ΠΡΠ°ΠΏ 3 β ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅
- ΠΠ°Π΄Π°ΡΠ° 1 β ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅ nuget ΠΏΠ°ΠΊΠ΅Ρ ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°ΠΌΠ΅ Π² Azure DevOps
- ΠΠ°Π΄Π°ΡΠ° 2 β ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΉΡ ΠΎΡ xmldoc Π² ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ Π² GitLab Pages
ΠΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ!
Π‘ΡΠ±ΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°
ΠΠΎΠ΄Π³ΠΎΡΠ²ΡΠΌΠ΅ Π°ΠΊΠ°ΡΠ½ΡΠΈΡΠ΅
Π‘ΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π°ΠΊΠ°ΡΠ½Ρ Π²
ΠΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ Π²
Π‘ΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ
- ΠΠΌΠ΅ β ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ
- ΠΠΈΠ΄ΠΈΠΌΠΎΡΡ β ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½Π°

ΠΡΠΈ Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅ Π½Π° Π±ΡΡΠΎΠ½Π° 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-ΠΎΠ±ΡΠ°Π·Π°, Π² ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π·Π°Π΄Π°ΡΠΈΡΠ΅. ΠΠ° ΡΠΎΠ²Π° Π½Π°ΠΌΠΈΡΠ°ΠΌΠ΅ . Π ΠΈΠΌΠ° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ, ΠΊΠΎΠΉ ΠΎΠ±ΡΠ°Π· Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ. ΠΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠΆΠ΄Π° ΠΎΠ±ΡΠ°Π· Ρ .Net Core 3.1, Π·Π°ΡΠΎΠ²Π° Π±Π΅Π· ΠΏΡΠΈΡΠ΅ΡΠ½Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΏΡΡΠ²ΠΈΡ ΡΠ΅Π΄ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°
image: mcr.microsoft.com/dotnet/core/sdk:3.1Π‘Π΅Π³Π°, ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° Ρ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈ Microsoft ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈΡΡ ΠΎΠ±ΡΠ°Π·, Π² ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π²ΡΠΈΡΠΊΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°.
Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ° β Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° stageΠ΅ΡΠ°ΠΏΠΈ. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ GitLab ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ 5 Π΅ΡΠ°ΠΏΠ°:
.preβ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠ΅ ΠΏΡΠ΅Π΄ΠΈ Π²ΡΠΈΡΠΊΠΈ Π΅ΡΠ°ΠΏΠΈ,.postβ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠ΅ ΡΠ»Π΅Π΄ Π²ΡΠΈΡΠΊΠΈ Π΅ΡΠ°ΠΏΠΈ,buildβ ΠΏΡΡΠ²ΠΈ ΡΠ»Π΅Π΄.preΠ΅ΡΠ°ΠΏ,testβ Π²ΡΠΎΡΠΈ Π΅ΡΠ°ΠΏ,deployβ ΡΡΠ΅ΡΠΈ Π΅ΡΠ°ΠΏ.
ΠΠΈΡΠΎ Π½Π΅ ΠΏΡΠ΅ΡΠΈ Π΄Π° Π³ΠΈ ΠΎΠ±ΡΠ²ΠΈΠΌ ΡΠ²Π½ΠΎ, ΠΎΠ±Π°ΡΠ΅. ΠΠΎΡΡΠ΄ΡΠΊΡΡ, Π² ΠΊΠΎΠΉΡΠΎ ΡΠ° ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈ Π΅ΡΠ°ΠΏΠΈΡΠ΅, Π²Π»ΠΈΡΠ΅ Π½Π° ΡΠ΅Π΄Π°, Π² ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ. ΠΠ° ΠΏΡΠ»Π½ΠΎΡΠ°, Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°:
stages:
- build
- test
- deployΠΠ° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΈΠΌΠ° ΡΠΌΠΈΡΡΠ» Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΡΠ΅Π΄Π°ΡΠ°, Π² ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π·Π°Π΄Π°ΡΠΈΡΠ΅. ΠΠΎΠ±Π°Π²ΡΠΌΠ΅ Π³Π»ΠΎΠ±Π°Π»Π΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΏΡΠ΅Π΄ΠΈ Π²ΡΡΠΊΠ° Π·Π°Π΄Π°ΡΠ°, Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° before_script:
before_script:
- $PSVersionTable.PSVersion
- dotnet --version
- nuget help | select-string VersionΠΡΡΠ°Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎΠ½Π΅ Π΅Π΄Π½Π° Π·Π°Π΄Π°ΡΠ°, Π·Π° Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡΠΈ. ΠΠ° ΡΠ΅Π³Π° Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΏΡΠ°Π·Π½Π° Π·Π°Π΄Π°ΡΠ° Π·Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ:
dummy job:
script:
- echo okΠ‘ΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π²Π°Π»ΠΈΠ΄ΠΈΡΠ°Π½Π΅, ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ Π΅ Π½Π°ΡΠ΅Π΄, ΠΊΠΎΠΌΠΈΡΠ²Π°ΠΌΠ΅, ΠΏΡΡΠΈΠΌ, Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ Π½Π° ΡΠ°ΠΉΡΠ°β¦ Π ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π³ΡΠ΅ΡΠΊΠ° Π² ΡΠΊΡΠΈΠΏΡΠ° β bash: .PSVersion: ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π°. ΠΠ°ΠΊΠ²ΠΎ ΠΏΠΎ Π΄ΡΠ²ΠΎΠ»ΠΈΡΠ΅?
ΠΡΠΈΡΠΊΠΎ Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ β ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ runner-ΠΈΡΠ΅ (ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΈ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π·Π° Π·Π°Π΄Π°ΡΠΈ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½ΠΈ ΠΎΡ GitLab) ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ bash Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. ΠΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, ΠΊΠ°ΡΠΎ ΡΠ²Π½ΠΎ ΠΏΠΎΡΠΎΡΠΈΡΠ΅ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ°, ΠΊΠ°ΠΊΠ²ΠΈ ΡΠ°Π³ΠΎΠ²Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠΈΡΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΡΠ°Π½Π΅Ρ:
dummy job Π½Π° windows:
script:
- echo ok
tags:
- windowsΠ§ΡΠ΄Π΅ΡΠ½ΠΎ! Π‘Π΅Π³Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΡΡ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°.
ΠΠ½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΈΡΡ ΡΠΈΡΠ°ΡΠ΅Π», ΠΏΠΎΠ²ΡΠ°ΡΡΠΉΠΊΠΈ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈΡΠ΅ ΡΡΡΠΏΠΊΠΈ, ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½Π° Π² Π΅ΡΠ°ΠΏ test, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π½Π΅ ΡΠΊΠ°Π·Π°Ρ
ΠΌΠ΅ Π΅ΡΠ°ΠΏ. ΠΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈ, test ΡΠ΅ Π΅ΡΠ°ΠΏΡΡ Π΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅.
Π©Π΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΠΌ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΊΠ΅Π»Π΅ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π²ΡΠΈΡΠΊΠΈ Π·Π°Π΄Π°ΡΠΈ, ΠΎΠΏΠΈΡΠ°Π½ΠΈ ΠΏΠΎ-Π³ΠΎΡΠ΅:
build job:
script:
- echo "building..."
tags:
- windows
stage: build
test and cover job:
script:
- echo "running tests and coverage analysis..."
tags:
- windows
stage: test
pack and deploy job:
script:
- echo "packing and pushing to nuget..."
tags:
- windows
stage: deploy
pages:
script:
- echo "creating docs..."
tags:
- windows
stage: deployΠΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ Π½Π΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π΅Π½, Π½ΠΎ Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π° ΠΊΠΎΡΠ΅ΠΊΡΠ΅Π½ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΡΡΠΈΠ³Π΅ΡΠΈ
Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π·Π° Π½ΠΈΡΠΎ Π΅Π΄Π½Π° ΠΎΡ Π·Π°Π΄Π°ΡΠΈΡΠ΅ Π½Π΅ ΡΠ° ΡΠΊΠ°Π·Π°Π½ΠΈ ΡΠΈΠ»ΡΡΠΈ Π·Π° Π·Π°Π΄Π΅ΠΉΡΡΠ²Π°Π½Π΅, ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΡΡ ΡΠ΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΏΡΠΈ Π²ΡΡΠΊΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡΠΈ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΆΠ΅Π»Π°Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΎΠ±ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ, ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΠΌ ΡΠΈΠ»ΡΡΠΈ Π·Π° Π·Π°Π΄Π΅ΠΉΡΡΠ²Π°Π½Π΅ Π·Π° Π·Π°Π΄Π°ΡΠΈΡΠ΅.
Π€ΠΈΠ»ΡΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠ²Π°Ρ Π² Π΄Π²Π° ΡΠΎΡΠΌΠ°ΡΠ°: ΠΈ . ΠΠ°ΠΊΡΠ°ΡΠΊΠΎ, only/except ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΡΠΈΠ»ΡΡΠΈ ΠΏΠΎ ΡΡΠΈΠ³Π΅ΡΠΈ (merge_request, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ β Π½Π°ΡΡΡΠΎΠΉΠ²Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΏΡΠΈ Π²ΡΡΠΊΠΎ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ ΠΈ ΠΏΡΠΈ Π²ΡΡΠΊΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡΠΈ Π² ΠΊΠ»ΠΎΠ½Π°, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΈΠ·Ρ
ΠΎΠ΄Π΅Π½ Π² Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅) ΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ (Π² Ρ.Ρ. Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ); rules ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠ²Π°Ρ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΈ, ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅, Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΡΠΏΠ΅Ρ
Π° Π½Π° ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²Π°ΡΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ().
ΠΠ΅ΠΊΠ° ΠΏΡΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ Π½Π°Π±ΠΎΡΠ° ΠΎΡ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ β ΠΏΠΎΡΡΡΠΎΡΠ²Π°Π½Π΅ ΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π΅ ΡΠ°ΠΌΠΎ Π·Π° merge request, ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π² Azure DevOps β Π·Π° merge request ΠΈ ΠΏΡΡΠΎΠ²Π΅ Π² ΠΌΠ°ΠΉΡΡΠΎΡΡΠΊΠΈΡ ΠΊΠ»ΠΎΠ½, Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ β Π·Π° ΠΏΡΡΠΎΠ²Π΅ Π² ΠΌΠ°ΠΉΡΡΠΎΡΡΠΊΠΈΡ ΠΊΠ»ΠΎΠ½.
ΠΠ° Π½Π°ΡΠ°Π»ΠΎ, Π½Π΅ΠΊΠ° Π½Π°ΡΡΡΠΎΠΈΠΌ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° Π·Π°Π΄Π΅ΠΉΡΡΠ²Π°Π½Π΅ ΡΠ°ΠΌΠΎ ΠΏΡΠΈ merge request:
build job:
# snip
only:
- merge_requestΠ‘Π΅Π³Π° ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΠΌ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π·Π° ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π΄Π° ΡΠ΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π° ΠΏΡΠΈ merge request ΠΈ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΊΠΎΠΌΠΈΡΠΈ Π² ΠΌΠ°ΠΉΡΡΠΎΡΡΠΊΠΈΡ ΠΊΠ»ΠΎΠ½:
pack and deploy job:
# snip
only:
- merge_request
- masterΠΠ°ΠΊΡΠΎ Π²ΠΈΠΆΠ΄Π°ΡΠ΅, Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΏΡΠΎΡΡΠΎ ΠΈ Π½Π°ΠΏΡΠ°Π²ΠΎ.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠ°ΡΠ° ΡΠ°ΠΊΠ°, ΡΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ merge request Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠ΅Π»Π΅Π²Π° ΠΈΠ»ΠΈ ΠΎΡΠ½ΠΎΠ²Π½Π° ΠΊΠ»ΠΎΠ½ΠΊΠ°:
ΠΏΡΠ°Π²ΠΈΠ»Π°:
- Π°ΠΊΠΎ: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"Π ΡΡΠ»ΠΎΠ²ΠΈΡΡΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ; ΠΏΡΠ°Π²ΠΈΠ»Π° rules Π½Π΅ ΡΠ° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΈ Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° only/except.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ
ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° build job ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ. ΠΠ° ΡΠ΅Π»ΡΠ° Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΏΡΡΠΈΡΠ° ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π·Π°ΠΏΠ°Π·ΡΡ ΠΈ ΠΏΡΠ΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΠΏΠΎΠ΄ ΠΊΠ»ΡΡΠ° :
build job:
# snip
Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ:
ΠΏΡΡΠΈΡΠ°:
- path/to/build/artifacts
- another/path
- MyCoolLib.*/bin/Release/*ΠΡΡΠΈΡΠ°ΡΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ wildcards, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠΏΡΠΎΡΡΡΠ²Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ΡΠΎ ΠΈΠΌ.
ΠΠΊΠΎ Π·Π°Π΄Π°ΡΠ°ΡΠ° ΡΡΠ·Π΄Π°Π²Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ, ΡΠΎΠ³Π°Π²Π° Π²ΡΡΠΊΠ° ΡΠ»Π΅Π΄Π²Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΡΡ β ΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ Π½Π° ΡΡΡΠΈΡΠ΅ ΠΏΡΡΠΈΡΠ° ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΠΊΠΎΡΠ΅Π½Π° Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΠΏΠΎ ΠΊΠΎΠΈΡΠΎ ΡΠ° Π±ΠΈΠ»ΠΈ ΡΡΠ±ΡΠ°Π½ΠΈ ΠΎΡ ΠΈΠ·Ρ ΠΎΠ΄Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ°. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅ ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ΡΠ°ΠΉΡΠ°.
Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π³ΠΎΡΠΎΠ² (ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½) ΠΊΠ°ΡΠΊΠ°Ρ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΊΡΠΌ Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π·Π° Π·Π°Π΄Π°ΡΠΈΡΠ΅.
ΠΠΈΡΠ΅ΠΌ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅
ΠΠΎΠΆΠ΅ Π±ΠΈ Π½ΡΠΊΠΎΠ³Π°, Π² Π΄Π°Π»Π΅ΡΠ½Π°-Π΄Π°Π»Π΅ΡΠ½Π° Π³Π°Π»Π°ΠΊΡΠΈΠΊΠ°, ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ Π½Π° .net) ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄ Π΅ Π±ΠΈΠ»ΠΎ ΠΌΡΡΠ΅Π½ΠΈΠ΅. Π‘Π΅Π³Π° ΠΎΠ±Π°ΡΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ±Π΅ΡΠ΅, ΡΠ΅ΡΡΠ²Π° ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π° ΠΏΡΠΎΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅ Ρ 3 ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:
dotnet build
dotnet test
dotnet packΠΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ, ΠΈΠΌΠ° Π½ΡΠΊΠΎΠΈ Π½ΡΠ°Π½ΡΠΈ, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠΈΡΠΎ ΠΌΠ°Π»ΠΊΠΎ ΡΠ΅ ΡΡΠ»ΠΎΠΆΠ½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅.
- ΠΡΠΊΠ°ΠΌΠ΅ ΡΠ΅Π»ΠΈΠΉΠ·Π½Π°, Π° Π½Π΅ ΠΎΡΠ»Π°Π΄ΡΡΠ½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅
-c Release - ΠΡΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π°, Π·Π°ΡΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π²ΠΊΠ»ΡΡΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π·Π° ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ Π² ΡΠ΅ΡΡΠΎΠ²ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ:
- ΠΡΠ² Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ°
coverlet.msbuild:dotnet add package coverlet.msbuildΠΎΡ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° - Π ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅
/p:CollectCoverage=true - Π ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° Π·Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΊΠ»ΡΡ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ (Π²ΠΆ. ΠΏΠΎ-Π΄ΠΎΠ»Ρ)
- ΠΡΠ² Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ°
- ΠΡΠΈ ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π° Π² nuget ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ ΠΈΠ·Ρ
ΠΎΠ΄Π½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π·Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅:
-o .
Π‘ΡΠ±ΠΈΡΠ°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π°
Coverlet ΡΠ»Π΅Π΄ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΈΠ·Π²Π΅ΠΆΠ΄Π° Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ:
ΠΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ΡΠΎ...
ΠΠ΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΡΠ΅Ρ 'C:Usersxxxsourcereposmy-projectmyProject.testscoverage.json'
+-------------+--------+--------+--------+
| ΠΠΎΠ΄ΡΠ» | ΠΠΈΠ½ΠΈΡ | ΠΠ»ΠΎΠ½ | ΠΠ΅ΡΠΎΠ΄ |
+-------------+--------+--------+--------+
| ΠΏΡΠΎΠ΅ΠΊΡ 1 | 83,24% | 66,66% | 92,1% |
+-------------+--------+--------+--------+
| ΠΏΡΠΎΠ΅ΠΊΡ 2 | 87,5% | 50% | 100% |
+-------------+--------+--------+--------+
| ΠΏΡΠΎΠ΅ΠΊΡ 3 | 100% | 83,33% | 100% |
+-------------+--------+--------+--------+
+---------+--------+--------+--------+
| | ΠΠΈΠ½ΠΈΡ | ΠΠ»ΠΎΠ½ | ΠΠ΅ΡΠΎΠ΄ |
+---------+--------+--------+--------+
| ΠΠ±ΡΠΎ | 84,27% | 65,76% | 92,94% |
+---------+--------+--------+--------+
| Π‘ΡΠ΅Π΄Π½ΠΎ | 90,24% | 66,66% | 97,36% |
+---------+--------+--------+--------+GitLab ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°, ΠΊΠΎΡΡΠΎ ΠΏΠΎΡΠ»Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½Π° ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π·Π½Π°ΡΠΊΠ°. Π Π΅Π³ΡΠ»ΡΡΠ½ΠΈΡΡ ΠΈΠ·ΡΠ°Π· ΡΠ΅ ΡΠΊΠ°Π·Π²Π° Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° Ρ ΠΊΠ»ΡΡΠ° ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅; Π² ΠΈΠ·ΡΠ°Π·Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΈΡΡΡΡΠ²Π° capture-Π³ΡΡΠΏΠ°, ΡΠΈΡΡΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½Π° Π½Π° Π·Π½Π°ΡΠΊΠ°ΡΠ°:
ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅:
# ΡΡΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅
ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅: /|s*ΠΠ±ΡΠΎΡΡΠΌΠ°ΡΠ½ΠΈ*|s*(d+[,.]d+%)Π’ΡΠΊ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΠΎΡ ΡΠ΅Π΄Π° Ρ ΠΎΠ±ΡΠΎΡΠΎ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ ΠΏΠΎ Π»ΠΈΠ½ΠΈΠΈ.
ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
Π Π΄Π²Π΅ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ° Π½Π°ΡΡΠΎΡΠ΅Π½ΠΈ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π΅ΡΠ°ΠΏ Π½Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° β ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΌΠΈΠ½Π°Ρ Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠΏΠΎΠ΄Π΅Π»ΠΈΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈΡΠ΅ ΡΠΈ Ρ ΡΠ²Π΅ΡΠ°.
ΠΡΠ΅Π΄ΠΈ Π²ΡΠΈΡΠΊΠΎ, Π½Π΅ΠΊΠ° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΠΊΠ°ΠΊ ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π° Π² ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ:
ΠΠΊΠΎ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½ΡΠΌΠ° ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ nuget (
nuget.config), Π½Π΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π½ΠΎΠ²:dotnet new nugetconfigΠΠ°ΡΠΎ: Π² ΠΎΠ±ΡΠ°Π·Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ Π·Π°Π±ΡΠ°Π½Π΅Π½ Π΄ΠΎΡΡΡΠΏΡΡ Π·Π° Π·Π°ΠΏΠΈΡ ΠΊΡΠΌ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡΠ΅ (ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈΡΠ΅ ΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΠΈ) ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠ° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΠΌ Π³ΡΠ΅ΡΠΊΠΈ, ΠΏΡΠΎΡΡΠΎ ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π½ΠΎΠ²Π° Π»ΠΎΠΊΠ°Π»Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠΌ Ρ Π½Π΅Ρ.
- ΠΠΎΠ±Π°Π²ΡΠΌΠ΅ Π½ΠΎΠ² ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π² Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ:
nuget sources add -name -source -username -password -configfile nuget.config -StorePasswordInClearTextΠΈΠΌΠ΅β Π»ΠΎΠΊΠ°Π»Π½ΠΎΡΠΎ ΠΈΠΌΠ΅ Π½Π° ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ°, Π½Π΅ Π΅ ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅urlβ URL Π½Π° ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° ΠΎΡ Π΅ΡΠ°ΠΏ "ΠΠΎΡΠ²ΠΈΠΌ Π°ΠΊΠ°ΡΠ½ΡΠΈ", ΡΠΎΡΠΊΠ° 6ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡβ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡΠ° Π² Azure DevOpsgitlab variableβ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Ρ ΡΠΎΠΊΠ΅Π½Π° Π·Π° Π΄ΠΎΡΡΡΠΏ, Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π² GitLab ("ΠΠΎΡΠ²ΠΈΠΌ Π°ΠΊΠ°ΡΠ½ΡΠΈ", ΡΠΎΡΠΊΠ° 11). Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π² ΡΠΎΡΠΌΠ°ΡΠ°$variableName-StorePasswordInClearTextβ Ρ Π°ΠΊ Π·Π° Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»ΡΠ½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠ° Π·Π° ΠΎΡΠΊΠ°Π· Π½Π° Π΄ΠΎΡΡΡΠΏ ()- Π ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ
-verbosity detailed
- ΠΠ·ΠΏΡΠ°ΡΠ°ΠΌΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° Π² ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ°:
nuget push -source -skipduplicate -apikey *.nupkg- ΠΠ·ΠΏΡΠ°ΡΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΡ ΡΠ΅ΠΊΡΡΠ°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, Π·Π°ΡΠΎΠ²Π°
*.nupkg. ΠΈΠΌΠ΅β ΠΎΡ ΠΏΡΠ΅Π΄Ρ ΠΎΠ΄Π½Π°ΡΠ° ΡΡΡΠΏΠΊΠ°.keyβ Π²ΡΡΠΊΠ° ΡΡΡΠΎΠΊΠ°. Π Azure DevOps Π² ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠ° Connect to feed Π²ΠΈΠ½Π°Π³ΠΈ Π΄Π°Π²Π°Ρ ΠΏΡΠΈΠΌΠ΅Ρ Ρ Π½ΠΈΠ·Π°Π·.-skipduplicateβ ΠΏΡΠΈ ΠΎΠΏΠΈΡ Π·Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΠΏΠ°ΠΊΠ΅Ρ Π±Π΅Π· ΡΠΎΠ·ΠΈ ΠΊΠ»ΡΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΡΡ ΡΠ΅ Π²ΡΡΠ½Π΅ Π³ΡΠ΅ΡΠΊΠ°409 ΠΠΎΠ½ΡΠ»ΠΈΠΊΡ; Ρ ΠΊΠ»ΡΡΠ° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠΎΠΏΡΡΠ½Π°ΡΠΎ.
- ΠΠ·ΠΏΡΠ°ΡΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΡ ΡΠ΅ΠΊΡΡΠ°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, Π·Π°ΡΠΎΠ²Π°
Π‘Π΅Π³Π° ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΠΌ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ:
- ΠΡΡΠ²ΠΎ, Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΎ, Π² ΠΊΠ»ΠΎΠ½ 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Π² ΠΈΠΌΠ΅ΡΠΎ
ΠΡΠΎΠΌΠ΅ΠΆΠ΄ΡΡΡΡΠ΅Π½ ΠΈΠ·Π²ΠΎΠ΄
Π’Π°ΠΊΠ°Π²Π° ΠΏΡΠΎΡΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΡΡΠ°Π²ΠΈ Π±ΡΠΊΠ²Π°Π»Π½ΠΎ Π·Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ ΡΠ°Ρ ΠΈ Π΄Π²Π΅ ΡΠ°ΡΠΈ ΠΊΠ°ΡΠ΅, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΡΠΈ Π²ΡΡΠΊΠΎ ΠΈΡΠΊΠ°Π½Π΅ Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π² master Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅, ΡΠ΅ ΠΊΠΎΠ΄ΡΡ ΡΠ΅ ΡΡΠ±ΠΈΡΠ° ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΌΠΈΠ½Π°Π²Π°Ρ, Π΄Π° ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅ Π½ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ, Π΄Π° ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°ΠΌΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° ΠΈ Π΄Π° ΡΠ°Π΄Π²Π° ΠΎΡΠΈΡΠ΅ Ρ ΠΊΡΠ°ΡΠΈΠ²ΠΈ Π·Π½Π°ΡΠΊΠΈ Π² README Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Π€ΠΈΠ½Π°Π»Π΅Π½ .gitlab-ci.yml
image: mcr.microsoft.com/dotnet/core/sdk:3.1
before_script:
- $PSVersionTable.PSVersion
- dotnet --version
- nuget help | select-string Version
stages:
- build
- test
- deploy
build job:
stage: build
script:
- dotnet build -c Release
tags:
- windows
only:
- merge_requests
- master
artifacts:
paths:
- your/path/to/binaries
test and cover job:
stage: test
tags:
- windows
script:
- dotnet test -c Release /p:CollectCoverage=true
coverage: /|s*Totals*|s*(d+[,.]d+%) /
only:
- merge_requests
- master
pack and deploy job:
stage: deploy
tags:
- windows
script:
- dotnet pack -c Release -o .
- dotnet new nugetconfig
- nuget sources add -name feedName -source https://pkgs.dev.azure.com/your-organization/_packaging/your-feed/nuget/v3/index.json -username your-organization -password $nugetFeedToken -configfile nuget.config -StorePasswordInClearText
- nuget push -source feedName -skipduplicate -apikey az *.nupkg
only:
- master
pages:
tags:
- windows
stage: deploy
script:
- nuget install docfx.console -version 2.51.0
- $env:path = "$env:path;$($(get-location).Path)"
- .docfx.console.2.51.0toolsdocfx.exe .docfxdocfx.json
artifacts:
paths:
- public
only:
- masterΠΠ΅ΠΆΠ΄Ρ Π΄ΡΡΠ³ΠΎΡΠΎ Π·Π° Π·Π½Π°ΡΠΊΠΈΡΠ΅
Π ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΡΡ Π²ΡΠ΅ ΠΏΠ°ΠΊ Π²ΡΠΈΡΠΊΠΎ Π±Π΅ Π·Π°ΠΏΠΎΡΠ½Π°ΡΠΎ!
ΠΠ½Π°ΡΠΊΠΈΡΠ΅ ΡΡΡ ΡΡΠ°ΡΡΡΠΈ Π½Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ΠΈ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π° ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ Π² GitLab Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° CI/CD Π² Π±Π»ΠΎΠΊΠ° Gtntral pipelines:

ΠΠ½Π°ΡΠΊΠ° ΡΡΡ Π»ΠΈΠ½ΠΊ ΠΊΡΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° ΡΡΠ·Π΄Π°Π΄ΠΎΡ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° β ΡΠ°ΠΌ Π²ΡΠΈΡΠΊΠΎ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ, ΠΌΠΎΠΆΠ΅Ρ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅Ρ ΡΠ²ΠΎΡ Π·Π½Π°ΡΠΊΠ° ΠΈ Π΄Π° Ρ ΠΏΠΎΠ»ΡΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠ°.

Azure DevOps Artifacts ΡΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΡΠ·Π΄Π°Π²Π°Ρ Π·Π½Π°ΡΠΊΠΈ Π·Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° Π°ΠΊΡΡΠ°Π»Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ. ΠΠ° ΡΠ΅Π»ΡΠ° Π² ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°ΠΉΡΠ° Azure DevOps Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π½Π°ΡΠΈΡΠ½Π΅Ρ Π½Π° Create badge Π·Π° ΠΈΠ·Π±ΡΠ°Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΈ Π΄Π° ΠΊΠΎΠΏΠΈΡΠ°Ρ markdown-ΡΠ°Π·ΠΌΠ΅ΡΠΊΠ°ΡΠ°:


ΠΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΊΡΠ°ΡΠΎΡΠ°
ΠΠ·Π²Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΎΠ±ΡΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°
ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΈ ΠΏΡΠΈ ΡΡΡΡΠ΅Π½Π΅ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ°, ΡΠ΅ Π½Π°ΡΡΠΊΠ½Π°Ρ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π² YAML β ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈ.
ΠΠ°ΠΊΡΠΎ ΡΠ΅ Π²ΠΈΠΆΠ΄Π° ΠΎΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠΈΡΠ΅, Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° ΡΠ°Π³ windows ΠΏΡΠΈ ΡΡΠ½ΡΡΠ° ΠΈ ΡΠ΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π°Ρ ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ ΠΊΡΠΌ master/ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ (Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ°). ΠΠ΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠΎΠ²Π° Π²ΡΠ² ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΡΠ΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅:
.common_tags: &common_tags
tags:
- windows
.common_only: &common_only
only:
- merge_requests
- masterΠ ΡΠ΅Π³Π° Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΌΡΠΊΠ½Π΅ΠΌ ΠΎΠ±ΡΠ²Π΅Π½ΠΈΡ ΠΏΠΎ-ΡΠ°Π½ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ:
build job:
<<: *common_tags
<<: *common_onlyΠΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°ΠΏΠΎΡΠ²Π°Ρ Ρ ΡΠΎΡΠΊΠ°, Π·Π° Π΄Π° Π½Π΅ Π±ΡΠ΄Π°Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠ°Π½ΠΈ ΠΊΠ°ΡΠΎ Π·Π°Π΄Π°ΡΠ°.
ΠΠ΅ΡΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ
ΠΡΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΠΊΠ»ΡΡΠΎΠ²Π΅ΡΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄, Π° ΠΏΡΠΈ ΡΡΡ Π½ΠΎΡΠΎ ΠΎΡΡΡΡΡΠ²ΠΈΠ΅ - ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅; ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΎΡΠΊΡΠΈΠ΅ Π²ΡΠ·Π΅Π» Version, Π²Π·ΠΈΠΌΠ° Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΊΠ°ΡΠΎ Π²Π΅ΡΡΠΈΡ Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ. Π’Π°ΠΊΠ° ΡΠ΅, Π·Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΠ°ΠΊΠ΅Ρ Ρ Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ, ΡΡΡΠ±Π²Π° ΠΈΠ»ΠΈ Π΄Π° Ρ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ Π²ΡΠ² ΡΠ°ΠΉΠ»Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΈΠ»ΠΈ Π΄Π° Ρ ΠΏΡΠ΅Π΄Π°Π΄Π΅ΡΠ΅ ΠΊΠ°ΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄.
ΠΠ΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΡΠ΅ Π΅Π΄Π½ΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ - Π΄Π° Π±ΡΠ΄Π°Ρ ΠΌΠ»Π°Π΄ΡΠΈΡΠ΅ Π΄Π²Π° Π½ΠΎΠΌΠ΅ΡΠ° Π² Π²Π΅ΡΡΠΈΡΡΠ° Π³ΠΎΠ΄ΠΈΠ½Π°ΡΠ° ΠΈ Π΄Π°ΡΠ°ΡΠ° Π½Π° ΡΠ±ΠΎΡΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ°, ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΈ Π²Π΅ΡΡΠΈΠΈ. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π²ΡΠ² ΡΠ°ΠΉΠ»Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ ΠΏΡΠ΅Π΄ΠΈ Π²ΡΡΠΊΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ - Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°, ΡΡΠ±ΠΈΡΠ°ΠΉΠΊΠΈ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΈ ΠΏΡΠ΅Π΄Π°Π²Π°ΠΉΠΊΠΈ Ρ ΠΏΡΠ΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄.
ΠΠ° ΡΠ΅ ΡΡΠ³Π»Π°ΡΠΈΠΌ, ΡΠ΅ Π°ΠΊΠΎ Π² ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° ΠΊΠΎΠΌΠΈΡ ΠΈΠΌΠ° ΡΠ΅Π΄ Π²ΡΠ² Π²ΠΈΠ΄Π° release (v. / ver. / version) (rev. / revision )?, ΡΠ΅ Π²Π·Π΅ΠΌΠ΅ΠΌ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΎΡ ΡΠΎΠ·ΠΈ ΡΠ΅Π΄, ΡΠ΅ Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΠΌ Ρ ΡΠ΅ΠΊΡΡΠ°ΡΠ° Π΄Π°ΡΠ° ΠΈ ΡΠ΅ Ρ ΠΏΡΠ΅Π΄Π°Π΄Π΅ΠΌ ΠΊΠ°ΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° dotnet pack. ΠΡΠΈ ΠΎΡΡΡΡΡΠ²ΠΈΠ΅ Π½Π° ΡΠ΅Π΄Π° - ΠΏΡΠΎΡΡΠΎ Π½ΡΠΌΠ° Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ°.
Π’Π°Π·ΠΈ Π·Π°Π΄Π°ΡΠ° ΡΠ΅ΡΠ°Π²Π° ΡΠ»Π΅Π΄Π½ΠΈΡΡ ΡΠΊΡΠΈΠΏΡ:
# ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΡΡΠΎΠΊΠΈ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ
$rx = "releases+(v.?|ver.?|version)s*(?<maj>d+)(?<min>.d+)?(?<rel>.d+)?s*((rev.?|revision)?s+(?<rev>[a-zA-Z0-9-_]+))?"
# ΠΈΡΠ΅ΠΌ ΡΡΡΠΎΠΊΡ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΌ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΡ
GitLab'ΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
$found = $env:CI_COMMIT_MESSAGE -match $rx
# ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ Π½Π΅Ρ - Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ
if (!$found) { Write-Output "no release info found, aborting"; exit }
# ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΌΠ°ΠΆΠΎΡΠ½ΡΡ ΠΈ ΠΌΠΈΠ½ΠΎΡΠ½ΡΡ Π²Π΅ΡΡΠΈΠΈ
$maj = $matches['maj']
$min = $matches['min']
# Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½ΠΎΠΌΠ΅Ρ ΡΠ΅Π»ΠΈΠ·Π° - ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΅Π³ΠΎ, ΠΈΠ½Π°ΡΠ΅ - ΡΠ΅ΠΊΡΡΠΈΠΉ Π³ΠΎΠ΄
if ($matches.ContainsKey('rel')) { $rel = $matches['rel'] } else { $rel = ".$(get-date -format "yyyy")" }
# Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π½ΠΎΠΌΠ΅ΡΠ° ΡΠ±ΠΎΡΠΊΠΈ - ΡΠ΅ΠΊΡΡΠΈΠ΅ ΠΌΠ΅ΡΡΡ ΠΈ Π΄Π΅Π½Ρ
$bld = $(get-date -format "MMdd")
# Π΅ΡΠ»ΠΈ Π΅ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΏΡΠ΅ΡΠ΅Π»ΠΈΠ·Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ - Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΡ
Π² Π²Π΅ΡΡΠΈΡ
if ($matches.ContainsKey('rev')) { $rev = "-$($matches['rev'])" } else { $rev = '' }
# ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π΅Π΄ΠΈΠ½ΡΡ ΡΡΡΠΎΠΊΡ Π²Π΅ΡΡΠΈΠΈ
$version = "$maj$min$rel.$bld$rev"
# ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΠ°ΠΊΠ΅ΡΡ
dotnet pack -c Release -o . /p:Version=$versionΠΠΎΠ±Π°Π²ΡΠΌΠ΅ ΡΠΊΡΠΈΠΏΡΠ° Π² Π·Π°Π΄Π°ΡΠ°ΡΠ° pack and deploy job ΠΈ Π½Π°Π±Π»ΡΠ΄Π°Π²Π°ΠΌΠ΅ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΡΡΡΠΎΠ³ΠΎ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈΡ ΡΠ΅Π΄ Π² ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° ΠΊΠΎΠΌΠΈΡ.
ΠΡΠΎΠ³ΠΎ
ΠΠΎΡ Π°ΡΡΠ²Π°ΠΉΠΊΠΈ ΠΎΠΊΠΎΠ»ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ ΡΠ°Ρ Π΄ΠΎ ΡΠ°Ρ Π²ΡΠ΅ΠΌΠ΅ Π·Π° Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ powershell ΠΈ, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π²Π΅ Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈΡ, ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ Π½Π΅Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΡΠΈΠ½Π½ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ.
Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, GitLab CI/CD Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΎΠ±ΡΠΈΡΠ΅Π½ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ³ΡΠ°Π½Π΅Π½, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ»Π΅Π΄ ΠΏΡΠΎΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ - . Π’Π°ΠΌ Π΄ΠΎΡΠΈ , ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΎΡΠΊΡΠΈΠ²Π°, ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°, ΡΠ΅ΡΡΠ²Π°, ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΈ Π½Π°Π±Π»ΡΠ΄Π°Π²Π° Π²Π°ΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π‘Π΅Π³Π° Π² ΠΏΠ»Π°Π½ΠΎΠ²Π΅ΡΠ΅ Π΅ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π·Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Azure, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Pulumi ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΡΠ΅Π»Π΅Π²Π°ΡΠ° ΡΡΠ΅Π΄Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΠ°ΡΠΈΡ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com








