Get Appointment

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² CI/CD для Symfony-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²

БоврСмСнная Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ высокой скорости поставки ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π°. ИмСнно поэтому Continuous Integration ΠΈ Continuous Deployment (CI/CD) становятся Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ процСссов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Symfony. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ позволяСт автоматичСски Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹, Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ прилоТСния ΠΈ быстро Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° измСнСния. БСгодня ΠΌΡ‹ рассмотрим соврСмСнныС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ настройкС CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² для Symfony-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° Π±Π°Π·Π΅ GitLab CI, Jenkins ΠΈ GitHub Actions.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ CI/CD для Symfony

  • Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ количСства ошибок. Автоматизация всСх этапов развСртывания позволяСт ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ чСловСчСский Ρ„Π°ΠΊΡ‚ΠΎΡ€ ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ качСство ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°.
  • Быстрая обратная связь. МгновСнноС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… Π² ΠΊΠΎΠ΄Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ автоматичСских тСстов.
  • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π΅Π»ΠΈΠ·ΠΎΠ². РСгулярныС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ автоматичСскоС Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ риски ΠΏΡ€ΠΈ Π²Ρ‹ΠΊΠ»Π°Π΄ΠΊΠ΅ Π½ΠΎΠ²Ρ‹Ρ… вСрсий.
  • Экономия Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ„ΠΎΠΊΡƒΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ бизнСс-Π·Π°Π΄Π°Ρ‡, Π° Π½Π΅ Π½Π° Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹Ρ… опСрациях ΠΏΠΎ дСплою.

GitLab CI для Symfony: быстро ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ

GitLab CI ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ систСму CI/CD, Π³Π»ΡƒΠ±ΠΎΠΊΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ с рСпозиториями. Для Symfony-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° достаточно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Π΅Π½ΡŒ рСпозитория Ρ„Π°ΠΉΠ» .gitlab-ci.yml с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ этапов ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°:

stages:
  - install
  - test
  - deploy

install:
  stage: install
  image: php:8.2
  script:
    - apt-get update && apt-get install -y git unzip
    - composer install --no-interaction --prefer-dist

test:
  stage: test
  image: php:8.2
  script:
    - php bin/phpunit

deploy:
  stage: deploy
  image: alpine:latest
  script:
    - echo "Deploy to production server"
  only:
    - main

Π­Ρ‚ΠΎΡ‚ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ автоматичСски ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ зависимости, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ тСсты ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π² Π²Π΅Ρ‚ΠΊΡƒ main. GitLab CI ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ сСкрСты, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности для ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².

Jenkins: гибкая настройка ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ²

Jenkins β€” ΠΏΡ€ΠΈΠ·Π½Π°Π½Π½Ρ‹ΠΉ Π»ΠΈΠ΄Π΅Ρ€ срСди CI/CD-систСм, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для кастомных ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ², Π² Ρ‚ΠΎΠΌ числС для Symfony. Для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ потрСбуСтся Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Jenkinsfile Π² ΠΊΠΎΡ€Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

pipeline {
  agent any
  stages {
    stage('Install') {
      steps {
        sh 'composer install --no-interaction --prefer-dist'
      }
    }
    stage('Test') {
      steps {
        sh 'php bin/phpunit'
      }
    }
    stage('Deploy') {
      when {
        branch 'main'
      }
      steps {
        sh './deploy.sh'
      }
    }
  }
}

Jenkins позволяСт ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Docker, ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ слоТныС ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ‹ с условными этапами, Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°ΠΌΠΈ ΠΈ увСдомлСниями. Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° интСграция с систСмами контроля вСрсий, Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π°ΠΌΠΈ ΠΈ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΌΠΈ сСрвисами.

GitHub Actions: CI/CD прямо Π² вашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ

GitHub Actions β€” соврСмСнная ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ процСссов прямо ΠΈΠ· рСпозитория Π½Π° GitHub. Для Symfony-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° создаём Ρ„Π°ΠΉΠ» .github/workflows/ci.yml:

name: CI
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.2'
      - name: Install dependencies
        run: composer install --no-interaction --prefer-dist
      - name: Run tests
        run: php bin/phpunit
      - name: Deploy
        if: github.ref == 'refs/heads/main'
        run: ./deploy.sh

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° GitHub Actions β€” глубокая интСграция с экосистСмой GitHub, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ большого количСства Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… дСйствий, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сСкрСтов ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ. Для Symfony-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ΄Π°, Π»ΠΈΠ½Ρ‚ΠΈΠ½Π³, Π΄Π΅ΠΏΠ»ΠΎΠΉ Π½Π° сСрвСры ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ Docker-ΠΎΠ±Ρ€Π°Π·ΠΎΠ².

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ CI/CD для Symfony

  • Зависимости Composer. Π’Π°ΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ vendor для ускорСния сборки.
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ сСкрСты для бСзопасного хранСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ.
  • ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹. Π­ΠΊΠΎΠ½ΠΎΠΌΡŒΡ‚Π΅ врСмя Π½Π° сборкС, ΠΊΡΡˆΠΈΡ€ΡƒΡ зависимости ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстов.
  • ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ докСризация. МоТно Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ автоматичСскоС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ, сборку Docker-ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π² Kubernetes.

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΈ best practices

  1. РаздСляйтС этапы ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°: install, test, build, deploy.
  2. ДобавляйтС статичСский Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π° (PHPStan, Psalm).
  3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ для ускорСния ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°.
  4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ ΠΊΠΎΠ΄ Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SensioLabs Security Checker).
  5. НастраивайтС увСдомлСния ΠΎ статусС ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° Π² Slack, Telegram ΠΈΠ»ΠΈ ΠΏΠΎΡ‡Ρ‚Ρƒ.
  6. АвтоматизируйтС Π²Ρ‹ΠΊΠ»Π°Π΄ΠΊΡƒ Π½Π° staging ΠΈ production.

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

Настройка CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² для Symfony-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ GitLab CI, Jenkins ΠΈΠ»ΠΈ GitHub Actions β€” это гарантия ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ, быстрой ΠΈ бСзопасной доставки вашСго ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ соврСмСнных ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ позволяСт ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ рСсурсы, ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ошибки ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΠΈΡ‡ΠΈ Π½Π° Ρ€Ρ‹Π½ΠΎΠΊ. Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ настройку CI/CD ΠΏΠΎΠ΄ ваши Π·Π°Π΄Π°Ρ‡ΠΈ? ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΌΠΎΡ‡ΡŒ β€” ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ здСсь.

Avatar
Raman Sapezhka

CEO Plantago/CTO