ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π½Π° PHP: ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄
Π ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΠΌΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ β ΠΊΠ»ΡΡ ΠΊ ΡΡΠΏΠ΅Ρ
Ρ ΠΈ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ Π±ΠΈΠ·Π½Π΅ΡΠ°. CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ (Continuous Integration ΠΈ Continuous Delivery/Deployment) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΡΠΊΠΎΡΠΈΡΡ Π²ΡΠΏΡΡΠΊ Π½ΠΎΠ²ΡΡ
Π²Π΅ΡΡΠΈΠΉ, ΡΠ½ΠΈΠ·ΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΏΠΎΠ²ΡΡΠΈΡΡ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΡ PHP-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π»ΡΠ±ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ.
ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ CI/CD Π΄Π»Ρ PHP?
PHP β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ
ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ
ΡΠ·ΡΠΊΠΎΠ² Π΄Π»Ρ Π²Π΅Π±-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π΅Π³ΠΎ Π²ΡΠ±ΠΎΡΠΎΠΌ β1 Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ
Π±ΠΈΠ·Π½Π΅ΡΠΎΠ². ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ, Π·Π°Π΄Π΅ΡΠΆΠΊΠ°ΠΌ ΠΈ ΡΠΈΡΠΊΠ°ΠΌ. ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ GitLab CI, GitHub Actions ΠΈΠ»ΠΈ Jenkins Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ, ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡ ΠΈ Π³ΠΈΠ±ΠΊΠΎΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ Π²Π°ΡΠΈΡ
Π²Π΅Π±-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
ΠΠ°ΠΊ ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ CI/CD Π΄Π»Ρ PHP-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²
ΠΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠΊΡΠΏΠ΅ΡΡΠΎΠ² ΠΏΠΎ DevOps ΠΈ PHP-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΈΠΊΠ» Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² ΠΏΠΎΠ΄ ΠΊΠ»ΡΡ:
- ΠΠ½Π°Π»ΠΈΠ· Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
- Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°.
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ (GitLab CI, GitHub Actions, Jenkins).
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΠ΅ΡΡΠΎΠ², ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½ΡΠ°.
- ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π°ΡΠΈΡ
CI/CD ΡΠ΅ΡΠ΅Π½ΠΈΠΉ:
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ (PHPUnit, Codeception, Behat ΠΈ Π΄Ρ.).
- ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΊΠΎΠ΄Π° (PHPStan, PHP_CodeSniffer).
- ΠΡΡΡΡΡΠΉ ΠΎΡΠΊΠ°Ρ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
- ΠΠΈΠ±ΠΊΠ°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Docker, Composer, ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ ΠΠ.
ΠΠΎΡΠ΅ΠΌΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ Π½Π°Ρ?
ΠΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌΡΡ Π½Π° Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠΈ CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² Π΄Π»Ρ PHP-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π»ΡΠ±ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ β ΠΎΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ
Π»Π΅Π½Π΄ΠΈΠ½Π³ΠΎΠ² Π΄ΠΎ ΠΊΡΡΠΏΠ½ΡΡ
Π²ΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ
ΠΏΠΎΡΡΠ°Π»ΠΎΠ². ΠΡΡ ΡΠ°Π±ΠΎΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ ΠΊΠ»ΡΡ Ρ ΡΡΡΡΠΎΠΌ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΡ
ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ. ΠΠ°ΡΠ°Π½ΡΠΈΡΡΠ΅ΠΌ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡ, ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ.
ΠΠ°ΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ:
- Π‘ΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΡ
ΠΎΠ΄Π° Π½ΠΎΠ²ΡΡ
Π²Π΅ΡΡΠΈΠΉ Π½Π° 40-70%.
- Π£ΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΏΡΠΎΡΡΠΎΠ΅Π² Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠ°.
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ/Ρ
ΠΎΡΡΠΈΠ½Π³Π°ΠΌΠΈ.
- ΠΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»Π° ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ.
Π‘ ΠΊΠ°ΠΊΠΈΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ?
- GitLab CI/CD β ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ
GitLab. ΠΠΈΠ±ΠΊΠ°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ², ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΉ, Π°Π²ΡΠΎΡΠ΅ΡΡΡ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π±Π΅Π· Π»ΠΈΡΠ½ΠΈΡ
ΡΡΠΈΠ»ΠΈΠΉ.
- GitHub Actions β Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° CI/CD ΠΏΡΡΠΌΠΎ Π² GitHub. ΠΡΠΎΡΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π±ΠΎΠ³Π°ΡΠ°Ρ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ° Π³ΠΎΡΠΎΠ²ΡΡ
action'ΠΎΠ², ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎΠΌ ΠΎΠ±Π»Π°ΡΠ½ΡΡ
ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ².
- Jenkins β ΠΊΠ»Π°ΡΡΠΈΠΊΠ° ΠΌΠΈΡΠ° DevOps. ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΡ, ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Π»ΡΠ±ΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΡ
ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π².
ΠΠΎΡΠΎΠ²Ρ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΠΈ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ?
ΠΡΡΠ°Π²ΡΡΠ΅ Π·Π°ΡΠ²ΠΊΡ β ΠΈ ΠΌΡ ΠΏΠΎΠΌΠΎΠΆΠ΅ΠΌ Π²Π°ΠΌ Π²Π½Π΅Π΄ΡΠΈΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π΄Π»Ρ Π²Π°ΡΠΈΡ
PHP-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΡΡΠΎΠ±Ρ Π²Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠ³Π»Π° ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° ΡΠ°Π·Π²ΠΈΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π°, Π° Π½Π΅ Π½Π° ΡΡΡΠΈΠ½Π½ΡΡ
Π·Π°Π΄Π°ΡΠ°Ρ
.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΠΎΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²Π° Ρ Π½Π°ΠΌΠΈ:
- ΠΠΊΡΠΏΠ΅ΡΡΠ½ΠΎΡΡΡ Π² DevOps ΠΈ PHP.
- ΠΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄.
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ.
- ΠΡΠΎΠ·ΡΠ°ΡΠ½Π°Ρ ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΠΈ ΡΡΠΎΠΊΠΈ.
ΠΠ±Π΅ΡΠΏΠ΅ΡΡΡΠ΅ ΡΠ²ΠΎΠ΅ΠΌΡ PHP-ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΠ΅ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΠΈ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΡ β Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠΉΡΠ΅ CI/CD Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»Π°ΠΌΠΈ ΡΠΆΠ΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ!