ΠΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΊΡΠ°ΡΠΈΠ²ΠΈ Π·Π½Π°ΡΠΊΠΈ Π·Π° Π²Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡ Π·Π° Π΅Π΄Π½Π° Π²Π΅ΡΠ΅Ρ Π½Π° Π»Π΅ΡΠ½ΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅
ΠΠ΅ΡΠΎΡΡΠ½ΠΎ Π²ΡΠ΅ΠΊΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΊΠΎΠΉΡΠΎ ΠΈΠΌΠ° ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ Π΄ΠΎΠΌΠ°ΡΠ΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ, Π² Π΄Π°Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΠ·ΠΏΠΈΡΠ²Π° ΡΡΡΠ±Π΅ΠΆ ΠΏΠΎ ΠΊΡΠ°ΡΠΈΠ²ΠΈ Π·Π½Π°ΡΠΊΠΈ ΡΡΡ ΡΡΠ°ΡΡΡΠΈ, ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π°, Π²Π΅ΡΡΠΈΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π² nuget ... Π ΡΠΎΠ·ΠΈ ΡΡΡΠ±Π΅ΠΆ ΠΌΠ΅ Π½Π°ΠΊΠ°ΡΠ° Π΄Π° Π½Π°ΠΏΠΈΡΠ° ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ. ΠΠΎΠ΄Π³ΠΎΡΠ²ΡΠΉΠΊΠΈ ΡΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΠΈΡΠ°, ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠ°Π·ΠΈ ΠΊΡΠ°ΡΠΎΡΠ° Π² Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΌΠΎΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ:
Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ Π²ΠΈ ΠΏΡΠ΅Π²Π΅Π΄Π΅ ΠΏΡΠ΅Π· ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΈ Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π·Π° ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΡ ΠΊΠ»Π°ΡΠΎΠ²Π΅ .Net Core Π² GitLab, ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π² GitLab Pages ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΊΡΠΌ ΡΠ°ΡΡΠ½Π° Π΅ΠΌΠΈΡΠΈΡ Π² Azure DevOps.
VS Code Π±Π΅ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΊΠ°ΡΠΎ ΡΡΠ΅Π΄Π° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Ρ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ
ΠΡΠ°ΡΠΊΠΎ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
CD - ΡΠΎΠ²Π° Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΠΎΡΡΠΎ Π±ΡΡΠ½Π΅ΡΠ΅ ΠΈ Π²ΡΠΈΡΠΊΠΎ Π²Π΅ΡΠ΅ Π΅ ΠΏΠ°Π΄Π½Π°Π»ΠΎ Π²ΡΡΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°?
ΠΠ°ΠΊΠ²ΠΎ Π΅ CI / CD ΠΈ Π·Π°ΡΠΎ Π²ΠΈ ΡΡΡΠ±Π²Π° - ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΡΡΠΈΡΠ΅ Π² Google. ΠΠ°ΠΌΠ΅ΡΠ΅ΡΠ΅ ΠΏΡΠ»Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΈ Π² GitLab
- ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ ΠΈΠ·ΠΏΡΠ°ΡΠ° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ ΠΊΡΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ, ΡΡΠ·Π΄Π°Π²Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ ΠΏΡΠ΅Π· ΡΠ°ΠΉΡΠ°, ΠΈΠ»ΠΈ ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½, ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΠΈΠ»ΠΈ ΠΈΠΌΠΏΠ»ΠΈΡΠΈΡΠ½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ° ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄Π°,
- Π²ΡΠΈΡΠΊΠΈ Π·Π°Π΄Π°ΡΠΈ ΡΠ΅ ΠΈΠ·Π±ΠΈΡΠ°Ρ ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, ΡΠΈΠΈΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈ Π² Π΄Π°Π΄Π΅Π½ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ,
- Π·Π°Π΄Π°ΡΠΈΡΠ΅ ΡΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠΏΠΎΡΠ΅Π΄ ΡΠ΅Ρ Π½ΠΈΡΠ΅ Π΅ΡΠ°ΠΏΠΈ,
- Π΅ΡΠ°ΠΏΠΈΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π½Π° ΡΠ²ΠΎΠΉ ΡΠ΅Π΄ - Ρ.Π΅. ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ Π²ΡΠΈΡΠΊΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΎΡ ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ ΡΠ° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈ,
- Π°ΠΊΠΎ Π΅ΡΠ°ΠΏΡΡ ΡΠ΅ ΠΏΡΠΎΠ²Π°Π»ΠΈ (Ρ.Π΅. ΠΏΠΎΠ½Π΅ Π΅Π΄Π½Π° ΠΎΡ Π·Π°Π΄Π°ΡΠΈΡΠ΅ Π½Π° Π΅ΡΠ°ΠΏΠ° ΡΠ΅ ΠΏΡΠΎΠ²Π°Π»ΠΈ), ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡΡ ΡΠΏΠΈΡΠ° (ΠΏΠΎΡΡΠΈ Π²ΠΈΠ½Π°Π³ΠΈ),
- Π°ΠΊΠΎ Π²ΡΠΈΡΠΊΠΈ Π΅ΡΠ°ΠΏΠΈ ΡΠ° Π·Π°Π²ΡΡΡΠ΅Π½ΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΡΡ ΡΠ΅ ΡΡΠΈΡΠ° Π·Π° ΡΡΠΏΠ΅ΡΠ΅Π½.
Π’Π°ΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅:
- ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ - Π½Π°Π±ΠΎΡ ΠΎΡ Π·Π°Π΄Π°ΡΠΈ, ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π½Π° Π΅ΡΠ°ΠΏΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°ΡΠ΅, ΡΠ΅ΡΡΠ²Π°ΡΠ΅, ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠ΄, Π²Π½Π΅Π΄ΡΡΠ²Π°ΡΠ΅ Π·Π°Π²ΡΡΡΠ΅Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π² ΠΎΠ±Π»Π°ΡΠ½Π° ΡΡΠ»ΡΠ³Π° ΠΈ Ρ.Π½.,
- ΡΡΠ΅Π½Π° (Π΅ΡΠ°ΠΏ) β ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΎΠ½Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΠ° Π·Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ, ΡΡΠ΄ΡΡΠΆΠ° 1+ Π·Π°Π΄Π°ΡΠ°,
- Π·Π°Π΄Π°ΡΠ° (ΡΠ°Π±ΠΎΡΠ°) Π΅ Π΅Π΄ΠΈΠ½ΠΈΡΠ° ΡΠ°Π±ΠΎΡΠ° Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°. Π‘ΡΡΡΠΎΠΈ ΡΠ΅ ΠΎΡ ΡΠΊΡΠΈΠΏΡ (Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π΅Π½), ΡΡΠ»ΠΎΠ²ΠΈΡ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅, Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π·Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅/ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ.
Π‘ΡΠΎΡΠ²Π΅ΡΠ½ΠΎ, Π·Π°Π΄Π°ΡΠ°ΡΠ° ΠΏΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° CI / CD ΡΠ΅ ΡΠ²Π΅ΠΆΠ΄Π° Π΄ΠΎ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½Π°Π±ΠΎΡ ΠΎΡ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, ΡΠ΅ΡΡΠ²Π°Π½Π΅ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ.
ΠΡΠ΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅: Π·Π°ΡΠΎ?
- ΠΠ°ΡΠΎ Gitlab?
ΠΠ°ΡΠΎΡΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠ°Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π°Ρ ΡΠ°ΡΡΠ½ΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π·Π° Π΄ΠΎΠΌΠ°ΡΠ½ΠΈ Π»ΡΠ±ΠΈΠΌΡΠΈ, ΡΠ΅ Π±ΡΡ Π° ΠΏΠ»Π°ΡΠ΅Π½ΠΈ Π² GitHub ΠΈ Π°Π· Π±ΡΡ Π°Π»ΡΠ΅Π½. Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈΡΠ΅ ΡΡΠ°Π½Π°Ρ Π° Π±Π΅Π·ΠΏΠ»Π°ΡΠ½ΠΈ, Π½ΠΎ Π·Π°ΡΠ΅Π³Π° ΡΠΎΠ²Π° Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½Π° ΠΏΡΠΈΡΠΈΠ½Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΡ Π² GitHub.
- ΠΠ°ΡΠΎ Π½Π΅ Azure DevOps ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈ?
ΠΠ°ΡΠΎΡΠΎ ΡΠ°ΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½Π° - Π΄ΠΎΡΠΈ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄. ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Π²ΡΠ½ΡΠ½ΠΈ Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈ Π½Π° git - Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠ°ΠΊΠ²Π°Π½ΠΈΡ, ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° SSH ΠΊΠ»ΡΡΠΎΠ²Π΅ Π·Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ ΠΊΡΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ - ΡΡΡΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡΡ ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° Π»Π΅ΡΠ½ΠΎ Π΄ΠΎΡΠΈ Π½Π΅ ΠΎΡ ΡΠ°Π±Π»ΠΎΠ½.
ΠΠ°ΡΠ°Π»Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΡ: ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΈ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΈΡΠΊΠ°ΡΠ΅
ΠΠΌΠ°ΠΌΠ΅:
- Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π² GitLab.
ΠΠΈΠ΅ ΠΈΡΠΊΠ°ΠΌΠ΅:
- Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ ΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π·Π° Π²ΡΡΠΊΠ° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅,
- ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° Π²ΡΡΠΊΠ° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ ΠΈ Π½Π°ΡΠΎΡΠ²Π°Π½Π΅ ΠΊΡΠΌ Π³Π»Π°Π²Π½ΠΈΡ, ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΡΠ΅ ΠΈΠΌΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠ΅Π΄ Π² ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° Π°Π½Π³Π°ΠΆΠΈΡΠ°Π½Π΅,
- ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΊΡΠΌ ΡΠ°ΡΡΠ½Π° Π΅ΠΌΠΈΡΠΈΡ Π² Azure DevOps,
- ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ Π² GitLab Pages,
- Π·Π½Π°ΡΠΊΠΈ!11
ΠΠΏΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΡΠ½ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Ρ Π²ΡΡΡ Ρ ΡΠ»Π΅Π΄Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π» Π½Π° ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄Π°:
- ΠΡΠ°ΠΏ 1 - Π‘Π³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅
- ΠΠΈΠ΅ ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ΄Π°, ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΊΠ°ΡΠΎ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ
- ΠΡΠ°ΠΏ 2 - ΡΠ΅ΡΡΠ²Π°Π½Π΅
- ΠΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ ΠΎΡ Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅, ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π°
- ΠΡΠ°ΠΏ 3 - ΠΠ·ΠΏΡΠ°ΡΠ°Π½Π΅
- ΠΠ°Π΄Π°ΡΠ° 1 - ΠΈΠ·Π³ΡΠ°Π΄Π΅ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° nuget ΠΈ Π³ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ΅ΡΠ΅ Π½Π° Azure DevOps
- ΠΠ°Π΄Π°ΡΠ° 2 - ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΉΡΠ° ΠΎΡ xmldoc Π² ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ ΠΈ Π³ΠΎ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ Π² GitLab Pages
ΠΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ!
Π‘ΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°
ΠΠ·Π³ΠΎΡΠ²ΡΠ½Π΅ Π½Π° ΡΠΌΠ΅ΡΠΊΠΈ
-
Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π°ΠΊΠ°ΡΠ½Ρ Π²
Microsoft Azure -
ΠΡΠΈΠ΄Π΅ΡΠ΅ Π½Π°
Azure DevOps -
Π‘ΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ
- ΠΠΌΠ΅ - Π²ΡΡΠΊΠΎ
- ΠΠΈΠ΄ΠΈΠΌΠΎΡΡ - Π²ΡΡΠΊΠ°ΠΊΠ²Π°
-
ΠΠΎΠ³Π°ΡΠΎ ΡΡΠ°ΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ Π±ΡΡΠΎΠ½Π° Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅, ΠΏΡΠΎΠ΅ΠΊΡΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΠΈ ΡΠ΅ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΊΡΠΌ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ°. ΠΠ° ΡΠ°Π·ΠΈ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ Π½Π΅Π½ΡΠΆΠ½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠ°ΡΠΎ ΠΎΡΠΈΠ΄Π΅ΡΠ΅ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° (Π΄ΠΎΠ»Π½Π°ΡΠ° Π²ΡΡΠ·ΠΊΠ° Π² ΡΠΏΠΈΡΡΠΊΠ° Π²Π»ΡΠ²ΠΎ -> ΠΠ±Ρ ΠΏΡΠ΅Π³Π»Π΅Π΄ -> ΠΠ»ΠΎΠΊ Π·Π° ΡΡΠ»ΡΠ³ΠΈ Π½Π° Azure DevOps)
-
ΠΡΠΈΠ΄Π΅ΡΠ΅ Π½Π° Atrifacts, ΡΡΠ°ΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΅ΠΌΠΈΡΠΈΡ
- ΠΡΠ²Π΅Π΄Π΅ΡΠ΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ°
- ΠΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ
- ΠΡΠ΅ΠΌΠ°Ρ
Π½Π΅ΡΠ΅ ΠΎΡΠΌΠ΅ΡΠΊΠ°ΡΠ° ΠΠΊΠ»ΡΡΠ΅ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΡ ΠΎΠ±ΡΠΈ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΡΡ Π΄Π° Π½Π΅ ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΠ½Π΅ Π² dump nuget ΠΊΠ»ΠΎΠ½ΠΈΠ½Π³
-
Π©ΡΠ°ΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ Connect to feed, ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Visual Studio, ΠΊΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ Source ΠΎΡ Π±Π»ΠΎΠΊΠ° Machine Setup
-
ΠΡΠΈΠ΄Π΅ΡΠ΅ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° Π°ΠΊΠ°ΡΠ½ΡΠ°, ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Personal Access Token
-
Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ² ΠΌΠ°ΡΠΊΠ΅Ρ Π·Π° Π΄ΠΎΡΡΡΠΏ
- ΠΠΌΠ΅ - ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ
- ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ - Π’Π΅ΠΊΡΡΠ°
- ΠΠ°Π»ΠΈΠ΄Π΅Π½ Π·Π° ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ 1 Π³ΠΎΠ΄ΠΈΠ½Π°
- ΠΠ±Ρ
Π²Π°Ρ - ΠΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°/Π§Π΅ΡΠ΅Π½Π΅ ΠΈ ΠΏΠΈΡΠ°Π½Π΅
-
ΠΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈΡ ΡΠΎΠΊΠ΅Π½ - ΡΠ»Π΅Π΄ Π·Π°ΡΠ²Π°ΡΡΠ½Π΅ Π½Π° ΠΌΠΎΠ΄Π°Π»Π½ΠΈΡ ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π΅ Π½Π°Π»ΠΈΡΠ½Π°
-
ΠΡΠΈΠ΄Π΅ΡΠ΅ Π΄ΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π² GitLab, ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π·Π° CI / CD
-
Π Π°Π·ΡΠΈΡΠ΅ΡΠ΅ Π±Π»ΠΎΠΊΠ° ΠΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ Π½ΠΎΠ²
- ΠΠΌΠ΅ - Π²ΡΡΠΊΠΎ Π±Π΅Π· ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ (ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π°Π»ΠΈΡΠ½ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°ΡΠ° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°)
- Π‘ΡΠΎΠΉΠ½ΠΎΡΡ - ΠΌΠ°ΡΠΊΠ΅Ρ Π·Π° Π΄ΠΎΡΡΡΠΏ ΠΎΡ ΠΏΠ°ΡΠ°Π³ΡΠ°Ρ 9
- ΠΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° ΠΌΠ°ΡΠΊΠ°
Π’ΠΎΠ²Π° Π·Π°Π²ΡΡΡΠ²Π° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠ°ΠΌΠΊΠ°
ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° CI/CD Π² GitLab ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°ΠΉΠ»Π° .gitlab-ci.yml
ΠΎΡ ΠΊΠΎΡΠ΅Π½Π° Π½Π° Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ ΠΏΡΡ Π΄ΠΎ ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ» Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ, Π½ΠΎ Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ.
ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΡ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ°ΠΉΠ»ΡΡ ΡΡΠ΄ΡΡΠΆΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π²ΡΠ² ΡΠΎΡΠΌΠ°Ρ YAML
. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° ΠΎΠΏΠΈΡΠ²Π° ΠΊΠΎΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Ρ Π½Π° Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊΠΎΡΠΎ Π½ΠΈΠ²ΠΎ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΈ Π½Π° Π²ΡΡΠΊΠΎ ΠΎΡ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ Π½ΠΈΠ²Π°.
ΠΡΡΠ²ΠΎ, Π½Π΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π²ΡΡΠ·ΠΊΠ° ΠΊΡΠΌ Π΄ΠΎΠΊΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ°ΠΉΠ», Π² ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π·Π°Π΄Π°ΡΠΈΡΠ΅. ΠΠ° ΡΠΎΠ²Π° Π½Π°ΠΌΠΈΡΠ°ΠΌΠ΅
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?
ΠΡΠΈΡΠΊΠΎ Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ - ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ runners (ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΈ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π½Π° Π·Π°Π΄Π°ΡΠΈ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΎΡ GitLab) ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ bash
Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, ΠΊΠ°ΡΠΎ ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΠΏΠΎΡΠΎΡΠΈΡΠ΅ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° ΠΊΠ°ΠΊΠ²ΠΈ ΡΠ°Π³ΠΎΠ²Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠΈΡΡ ΡΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ:
dummy job on windows:
script:
- echo ok
tags:
- windows
Π‘ΡΡΠ°Ρ ΠΎΡΠ΅Π½! Π’ΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΡΡ Π²Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ.
ΠΠ½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΈΡΡ ΡΠΈΡΠ°ΡΠ΅Π», ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΏΠΎΠ²ΡΠΎΡΠΈ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈΡΠ΅ ΡΡΡΠΏΠΊΠΈ, ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½Π° Π² Π΅ΡΠ°ΠΏΠ° test
, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π½Π΅ ΡΡΠΎΡΠ½ΠΈΡ
ΠΌΠ΅ Π΅ΡΠ°ΠΏΠ°. ΠΠ°ΠΊΡΠΎ ΡΠ΅ Π΄ΠΎΡΠ΅ΡΠ°ΡΠ΅ test
Π΅ ΡΡΡΠΏΠΊΠ°ΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅.
ΠΠ΅ΠΊΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΠΌ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠΊΠ΅Π»Π΅Ρ, ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π²ΡΠΈΡΠΊΠΈ Π·Π°Π΄Π°ΡΠΈ, ΠΎΠΏΠΈΡΠ°Π½ΠΈ ΠΏΠΎ-Π³ΠΎΡΠ΅:
build job:
script:
- echo "building..."
tags:
- windows
stage: build
test and cover job:
script:
- echo "running tests and coverage analysis..."
tags:
- windows
stage: test
pack and deploy job:
script:
- echo "packing and pushing to nuget..."
tags:
- windows
stage: deploy
pages:
script:
- echo "creating docs..."
tags:
- windows
stage: deploy
ΠΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ Π½Π΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π΅Π½, Π½ΠΎ Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈΠ»Π΅Π½ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΡΡΠΈΠ³Π΅ΡΠΈ
ΠΠΎΡΠ°Π΄ΠΈ ΡΠ°ΠΊΡΠ°, ΡΠ΅ Π½Π΅ ΡΠ° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ ΡΡΠΈΠ³Π΅ΡΠ½ΠΈ ΡΠΈΠ»ΡΡΠΈ Π·Π° Π½ΠΈΠΊΠΎΡ ΠΎΡ Π·Π°Π΄Π°ΡΠΈΡΠ΅, ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΡΡ ΡΠ΅ Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈ Π½Π°ΠΏΡΠ»Π½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΊΡΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ ΡΠ΅ ΠΈΠ·Π±ΡΡΠ° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΆΠ΅Π»Π°Π½ΠΎΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ, ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΠΌ ΡΠΈΠ»ΡΡΠΈ Π·Π° Π·Π°Π΄Π΅ΠΉΡΡΠ²Π°Π½Π΅ Π·Π° Π·Π°Π΄Π°ΡΠΈ.
Π€ΠΈΠ»ΡΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ Π² Π΄Π²Π° ΡΠΎΡΠΌΠ°ΡΠ°: only/except
Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ ΡΠΈΠ»ΡΡΠΈ ΠΏΠΎ ΡΡΠΈΠ³Π΅ΡΠΈ (merge_request
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ - Π·Π°Π΄Π°Π²Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΈ Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ ΠΊΡΠΌ ΠΊΠ»ΠΎΠ½Π°, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΡΡ Π² Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅) ΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ); rules
Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΈ ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΡΠΏΠ΅Ρ
Π° Π½Π° ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ (when
Π² GitLab CI/CD
ΠΠ΅ΠΊΠ° ΡΠΈ ΠΏΡΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ - Π°ΡΠ΅ΠΌΠ±Π»ΠΈΡΠ°Π½Π΅ ΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π΅ ΡΠ°ΠΌΠΎ Π·Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅, ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π΄ΠΎ Azure DevOps - Π·Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ ΠΈ Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅ ΠΊΡΠΌ Π³Π»Π°Π²Π½ΠΈΡ, Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ - Π·Π° Π½Π°ΡΠΎΡΠ²Π°Π½ΠΈΡ ΠΊΡΠΌ Π³Π»Π°Π²Π½ΠΈΡ.
ΠΡΡΠ²ΠΎ, Π½Π΅ΠΊΠ° Π½Π°ΡΡΡΠΎΠΈΠΌ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π° ΡΠ°ΠΌΠΎ ΠΏΡΠΈ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅:
build job:
# snip
only:
- merge_request
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π½Π°ΡΡΡΠΎΠΈΠΌ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π·Π° ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π΄Π° Π·Π°Π΄Π΅ΠΉΡΡΠ²Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠΈ ΠΊΡΠΌ Π³Π»Π°Π²Π½ΠΈΡ:
pack and deploy job:
# snip
only:
- merge_request
- master
ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΏΡΠΎΡΡΠΎ ΠΈ ΡΡΠ½ΠΎ.
ΠΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° Π½Π°ΡΡΡΠΎΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π΄Π° ΡΠ΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π° ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½Π° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΡΠ΅Π»Π΅Π²ΠΈ ΠΈΠ»ΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠ»ΠΎΠ½:
rules:
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"
ΠΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ rules
Π½Π΅ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΈ Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° only/except
.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡ
ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠ° build job
ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ. ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, ΡΡΡΠ±Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΏΡΡΠΈΡΠ°ΡΠ° ΠΊΡΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ°, ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅, ΠΏΠΎ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡΠ΅ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΠΊΡΠΌ ΠΊΠ»ΡΡΠ° artifacts
build job:
# snip
artifacts:
paths:
- path/to/build/artifacts
- another/path
- MyCoolLib.*/bin/Release/*
ΠΡΡΠΈΡΠ°ΡΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ Π·Π°ΠΌΠ΅ΡΡΠ²Π°ΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π³ΠΈ ΠΏΡΠ°Π²ΠΈ ΠΏΠΎ-Π»Π΅ΡΠ½ΠΈ Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅.
ΠΠΊΠΎ Π΄Π°Π΄Π΅Π½Π° Π·Π°Π΄Π°ΡΠ° ΡΡΠ·Π΄Π°Π²Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ, ΡΠΎΠ³Π°Π²Π° Π²ΡΡΠΊΠ° ΡΠ»Π΅Π΄Π²Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° ΡΠ΅ ΠΈΠΌΠ° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΡΡ - ΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΏΠΎ ΡΡΡΠΈΡΠ΅ ΠΏΡΡΠΈΡΠ° ΡΠΏΡΡΠΌΠΎ ΠΊΠΎΡΠ΅Π½Π° Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΡΡΠ±ΡΠ°Π½ΠΈ ΠΎΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ°. ΠΡΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅ ΡΡΡΠΎ ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ΡΠ°ΠΉΡΠ°.
Π‘Π΅Π³Π°, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π³ΠΎΡΠΎΠ²Π° (ΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π°) ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠ°ΠΌΠΊΠ°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠΈΡΡΡΠΏΠΈΠΌ ΠΊΡΠΌ ΡΠ΅Π°Π»Π½ΠΎ ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π·Π° Π·Π°Π΄Π°ΡΠΈ.
ΠΠΈΠ΅ ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ
ΠΠΎΠΆΠ΅ Π±ΠΈ Π½ΡΠΊΠΎΠ³Π°, Π² Π΅Π΄Π½Π° Π΄Π°Π»Π΅ΡΠ½Π°, Π΄Π°Π»Π΅ΡΠ½Π° Π³Π°Π»Π°ΠΊΡΠΈΠΊΠ°, ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅Π·ΠΈ Π² .net) ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄ Π΅ Π±ΠΈΠ»ΠΎ Π±ΠΎΠ»ΠΊΠ°. Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅, ΡΠ΅ΡΡΠ²Π°ΡΠ΅ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² 3 Π΅ΠΊΠΈΠΏΠ°:
dotnet build
dotnet test
dotnet pack
ΠΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ, ΠΈΠΌΠ° Π½ΡΠΊΠΎΠΈ Π½ΡΠ°Π½ΡΠΈ, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΠ»ΠΎΠΆΠ½ΠΈΠΌ Π΄ΠΎΠ½ΡΠΊΡΠ΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅.
- ΠΡΠΊΠ°ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π·Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅, Π° Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΊΡΠΌ Π²ΡΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°
-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 -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, Π² ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠ° Π‘Π²ΡΡΠ·Π²Π°Π½Π΅ ΠΊΡΠΌ ΠΊΠ°Π½Π°Π», ΠΏΡΠΈΠΌΠ΅ΡΡΡ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ ΡΠ΅Π΄ΡΡaz
.-skipduplicate
- ΠΏΡΠΈ ΠΎΠΏΠΈΡ Π·Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΠΏΠ°ΠΊΠ΅Ρ Π±Π΅Π· ΡΠΎΠ·ΠΈ ΠΊΠ»ΡΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΡΡ ΡΠ΅ Π²ΡΡΠ½Π΅ Π³ΡΠ΅ΡΠΊΠ°409 Conflict
; Ρ ΠΊΠ»ΡΡΠ° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠΎΠΏΡΡΠ½Π°ΡΠΎ.
- ΠΠ·ΠΏΡΠ°ΡΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΡ ΡΠ΅ΠΊΡΡΠ°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, ΡΠ°ΠΊΠ° ΡΠ΅
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π½Π°ΡΡΡΠΎΠΈΠΌ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ:
- ΠΡΡΠ²ΠΎ, Π² Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ, Π² Π³Π»Π°Π²Π½ΠΈΡ ΠΊΠ»ΠΎΠ½, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° docfx. ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, ΠΈΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΠΎΡ root
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:
Π‘ΡΠ·Π΄Π°Π΄ΠΎΡ
Π·Π½Π°ΡΠΊΠ° Ρ Π²ΡΡΠ·ΠΊΠ° ΠΊΡΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ°
![ΠΡΠΈΠΌΠ΅Ρ Ρ Shields.io](https://img.shields.io/badge/custom-badge-blue)
ΠΡΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅ Π½Π° Azure DevOps ΡΡΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ Π·Π½Π°ΡΠΊΠΈ Π·Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Ρ Π½Π°ΠΉ-Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ. ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, Π² ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°ΠΉΡΠ° Π½Π° Azure DevOps ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ°ΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π·Π½Π°ΡΠΊΠ° Π·Π° ΠΈΠ·Π±ΡΠ°Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΈ Π΄Π° ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ ΠΌΠ°ΡΠΊΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ°ΡΠΊΠΈΡΠ°Π½Π΅ΡΠΎ:
ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΊΡΠ°ΡΠΎΡΠ°
ΠΡΠ²Π΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
ΠΠΎΠΊΠ°ΡΠΎ ΠΏΠΈΡΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΈ ΡΡΡΡΠ΅Ρ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ°, ΠΏΠΎΠΏΠ°Π΄Π½Π°Ρ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΡ Π½Π° YAML - ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈ.
ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ°, Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ Π΅ΡΠΈΠΊΠ΅ΡΠ° windows
Π² runner ΠΈ ΡΠ΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π°Ρ, ΠΊΠΎΠ³Π°ΡΠΎ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ Π΅ ΠΈΠ·ΠΏΡΠ°ΡΠ΅Π½Π° Π΄ΠΎ master/created (Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ). ΠΠ΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠΎΠ²Π° ΠΊΡΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ:
.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 Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΎΠ±ΡΠΈΡΠ΅Π½ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠ°Π½Π΅Π½, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ -
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΎΡΠΊΡΠΈΠ²Π°, ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°, ΡΠ΅ΡΡΠ²Π°, Π²Π½Π΅Π΄ΡΡΠ²Π° ΠΈ Π½Π°Π±Π»ΡΠ΄Π°Π²Π° Π²Π°ΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π‘Π΅Π³Π° ΠΏΠ»Π°Π½ΠΎΠ²Π΅ΡΠ΅ ΡΠ° Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Azure, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Pulumi ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΡΠ΅Π»Π΅Π²Π°ΡΠ° ΡΡΠ΅Π΄Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΠ°ΡΠΈΡ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com