ΠΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° CI/CD Π΄Π»Ρ Symfony: Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
Π ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΠΌΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΡΡΠΊΠ° ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΡΠ°ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΡΠΏΠ΅Ρ
Π±ΠΈΠ·Π½Π΅ΡΠ°. ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ β ΠΊΠ»ΡΡ ΠΊ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ ΠΈ Π±ΡΡΡΡΠΎΠΉ Π΄ΠΎΡΡΠ°Π²ΠΊΠ΅ Π½ΠΎΠ²ΡΡ
Π²Π΅ΡΡΠΈΠΉ Π²Π°ΡΠ΅Π³ΠΎ Symfony-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ»ΡΠ³Ρ ΠΏΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ GitLab CI, Jenkins ΠΈ GitHub Actions, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° ΡΠ°Π·Π²ΠΈΡΠΈΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°, Π° Π½Π΅ Π½Π° ΡΡΡΠΈΠ½Π½ΡΡ
Π·Π°Π΄Π°ΡΠ°Ρ
.
ΠΠΎΡΠ΅ΠΌΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π²Π°ΠΆΠ½Π° Π΄Π»Ρ Symfony-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²?
Symfony β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ
ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ
PHP-ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ
ΠΈ Π½Π°Π΄ΡΠΆΠ½ΡΡ
Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΈ ΠΌΠ°ΡΡΡΠ°Π± ΡΠ°ΠΊΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΡΡΠ΅Π±ΡΡΡ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π° ΠΊ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ. ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π²ΡΡΡΡΠΎΠ΅Π½Π½ΡΠΉ CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ:
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡΠ΅
- Π‘Π±ΠΎΡΠΊΡ ΠΈ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π±Π΅Π· ΡΡΡΠ½ΠΎΠ³ΠΎ Π²ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΡΡΠ²Π°
- ΠΡΡΡΡΠΎΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΎΠ²
- ΠΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°ΠΊΡΠΎΡΠ°
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ CI/CD ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ
ΠΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ ΡΡΠ΅ΠΌΡ Π²Π΅Π΄ΡΡΠΈΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ:
- GitLab CI β Π½Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΡΠ°Π·ΠΌΠ΅ΡΡΠ½Π½ΡΡ
Π² GitLab, ΠΏΡΠΎΡΡΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π²
.gitlab-ci.yml
ΠΈ Π³ΠΈΠ±ΠΊΠ°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Docker. - Jenkins β ΠΌΠΎΡΠ½Π°Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Ρ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΡ
ΠΈ Π³ΠΈΠ±ΡΠΈΠ΄Π½ΡΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ.
- GitHub Actions β ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΉ Π²ΡΠ±ΠΎΡ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π½Π° GitHub, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΏΡΡΠΌΠΎ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
.github/workflows
.
Π§ΡΠΎ Π²Ρ
ΠΎΠ΄ΠΈΡ Π² ΡΡΠ»ΡΠ³Ρ?
- ΠΠ½Π°Π»ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΈ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
- ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² ΠΏΠΎΠ΄ Π²Π°ΡΠΈ Π·Π°Π΄Π°ΡΠΈ
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ (PHPUnit, Behat, Codeception ΠΈ Π΄Ρ.)
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ Π½Π° staging/production
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ²
- ΠΠ±ΡΡΠ΅Π½ΠΈΠ΅ Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π±ΠΎΡΠ΅ Ρ CI/CD
- ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Π΄Π»Ρ Π±ΠΈΠ·Π½Π΅ΡΠ°
ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ CI/CD ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π²ΡΠ΅ΠΌΡ ΠΈ ΡΠ΅ΡΡΡΡΡ, ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±Π°Π³ΠΎΠ² Π½Π° production, ΡΡΠΊΠΎΡΡΠ΅Ρ ΡΠ΅Π»ΠΈΠ·Ρ ΠΈ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ Π»ΠΎΡΠ»ΡΠ½ΠΎΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ². Π£ΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΡΡΠ½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² ΡΠ΅Π»ΠΈΠ·Π½ΡΡ
ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π½ΠΎΠ²ΡΡ
ΡΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.
ΠΠΎΡΠ΅ΠΌΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ Π½Π°Ρ?
ΠΠ°Ρ ΠΎΠΏΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΡΡΡΡΠΎ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π²Π½Π΅Π΄ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π΄Π°ΠΆΠ΅ Π² ΡΠ°ΠΌΡΡ
ΡΠ»ΠΎΠΆΠ½ΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
. ΠΡ ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΡ Symfony ΠΈ ΠΏΠΎΠ΄Π±ΠΈΡΠ°Π΅ΠΌ Π»ΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ Π±ΠΈΠ·Π½Π΅ΡΠ°. ΠΠ°ΡΠ°Π½ΡΠΈΡΡΠ΅ΠΌ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈ Π²ΡΡΠΎΠΊΠΎΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°.
ΠΠΎΠ»ΡΡΠΈΡΠ΅ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΡ
Π‘Π²ΡΠΆΠΈΡΠ΅ΡΡ Ρ Π½Π°ΠΌΠΈ β ΠΌΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ ΠΎΡΠ΅Π½ΠΈΠΌ Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΏΠΎΠ΄ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡΠ°ΠΏΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΊΡΠΈΡΠΈΡΠ½Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π»Ρ Π²Π°Ρ, ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠΌ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ CI/CD ΠΏΠΎΠ΄ ΠΊΠ»ΡΡ.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΡΠ΅Π»ΠΈΠ·Ρ β ΠΎΠ±Π³ΠΎΠ½ΡΠΉΡΠ΅ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΎΠ²!