Get Appointment

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅: Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ CI/CD для PHP-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²

Π’ соврСмСнном ΠΌΠΈΡ€Π΅ Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ автоматизация процСссов доставки ΠΊΠΎΠ΄Π° становится критичСски Π²Π°ΠΆΠ½ΠΎΠΉ для успСха любого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Для PHP-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠ°ΠΊ ΠΈ для Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ…, Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ CI/CD (Continuous Integration ΠΈ Continuous Delivery/Deployment) позволяСт ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ выпуск Π½ΠΎΠ²Ρ‹Ρ… вСрсий, ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ качСство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ чСловСчСский Ρ„Π°ΠΊΡ‚ΠΎΡ€ ΠΏΡ€ΠΈ доставкС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим соврСмСнныС способы Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² для PHP-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с использованиСм Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярных инструмСнтов: GitLab CI, GitHub Actions ΠΈ Jenkins.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ CI/CD ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Π²Π°ΠΆΠ½ΠΎ?

CI/CD β€” это Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄Π΅ (Continuous Integration) ΠΈ ΠΈΡ… доставку Π½Π° сСрвСр (Continuous Delivery ΠΈΠ»ΠΈ Deployment). Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ CI/CD позволяСт:

  • АвтоматичСски Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ΄Π΅
  • Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ количСство ошибок ΠΏΡ€ΠΈ Ρ€Π΅Π»ΠΈΠ·Π°Ρ…
  • Быстро Π²Ρ‹ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ вСрсии ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°
  • Π£ΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ связь для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²
  • ΠŸΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ прилоТСния

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ инструмСнты для CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ²

Для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ процСссов Π² PHP-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚:

  1. GitLab CI/CD β€” встроСнный инструмСнт Π² GitLab, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠΎΡ‰Π½Ρ‹ΠΌΠΈ возмоТностями настройки ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· Ρ„Π°ΠΉΠ» .gitlab-ci.yml.
  2. GitHub Actions β€” сСрвис для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов, Π³Π»ΡƒΠ±ΠΎΠΊΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ с экосистСмой GitHub, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· Ρ„Π°ΠΉΠ» .github/workflows/*.yml.
  3. Jenkins β€” ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠΉ open-source сСрвСр Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ кастомныС ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ‹ ΠΏΠΎΠ΄ Π»ΡŽΠ±Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ.

Π˜ΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ CI/CD для PHP Π½Π° GitLab CI

GitLab CI позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ практичСски любой сцСнарий Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ .gitlab-ci.yml для PHP-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

stages:
  - test
  - deploy
test:
  image: php:8.2
  script:
    - composer install
    - vendor/bin/phpunit

deploy:
  stage: deploy
  script:
    - ./deploy.sh
  only:
    - main

Π’Π°ΠΊΠΎΠΉ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ автоматичСски установит зависимости, запустит тСсты ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½ послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ тСстирования. GitLab CI интСгрируСтся с Docker, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ зависимостСй ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ.

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ CI/CD с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ GitHub Actions

GitHub Actions β€” соврСмСнный инструмСнт, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ‹ Π² ΠΎΠ±Π»Π°ΠΊΠ΅ ΠΈΠ»ΠΈ Π½Π° собствСнных runner'Π°Ρ…. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ процСсса для PHP-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

name: CI
on:
  push:
    branches: [main]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: 8.2
      - run: composer install
      - run: vendor/bin/phpunit

GitHub Actions ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ marketplace Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… экшСнов, Π³ΠΈΠ±ΠΊΡƒΡŽ настройку Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ² ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΡƒΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ сСрвисами GitHub.

Jenkins: кастомизация процСссов CI/CD для PHP

Jenkins β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых Π³ΠΈΠ±ΠΊΠΈΡ… инструмСнтов для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ рСпозиториями, систСмами тСстирования ΠΈ дСплоя. Для PHP-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описан ΠΊΠ°ΠΊ Π² Π²Π΅Π±-интСрфСйсС, Ρ‚Π°ΠΊ ΠΈ Ρ‡Π΅Ρ€Π΅Π· Ρ„Π°ΠΉΠ» Jenkinsfile:

pipeline {
    agent any
    stages {
        stage('Install dependencies') {
            steps {
                sh 'composer install'
            }
        }
        stage('Test') {
            steps {
                sh 'vendor/bin/phpunit'
            }
        }
        stage('Deploy') {
            when {
                branch 'main'
            }
            steps {
                sh './deploy.sh'
            }
        }
    }
}

Jenkins Π»Π΅Π³ΠΊΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ распрСдСлённыС сборки ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с систСмами ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΈ ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠΉ.

Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² для PHP

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ этапы для тСстирования, сборки ΠΈ дСплоя
  • Π₯Ρ€Π°Π½ΠΈΡ‚Π΅ сСкрСты ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния Π² бСзопасном Π²ΠΈΠ΄Π΅
  • НастраивайтС увСдомлСния ΠΎ статусС ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ²
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ зависимостСй для ускорСния сборок
  • ΠŸΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅ статичСский Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PHPStan, Psalm)
  • Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΄Π΅ΠΏΠ»ΠΎΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ прохоТдСния тСстов

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π˜ΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² β€” ваТнСйшая Ρ‡Π°ΡΡ‚ΡŒ соврСмСнного процСсса Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ PHP-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². ИспользованиС GitLab CI, GitHub Actions ΠΈΠ»ΠΈ Jenkins позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ высокой скорости Ρ€Π΅Π»ΠΈΠ·ΠΎΠ², качСства ΠΈ бСзопасности Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ быстро Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСссы CI/CD для вашСго PHP-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ! ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с нашими услугами ΠΏΠΎ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΡŽ CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² для PHP.

Avatar
Raman Sapezhka

CEO Plantago/CTO