Implementing Continuous Integration and Continuous Deployment (CI/CD) for PHP on Ubuntu
Continuous Integration (CI) and Continuous Deployment (CD) are essential for streamlining PHP development workflows, reducing manual errors, and accelerating delivery. Below is a structured guide to setting up CI/CD for PHP on Ubuntu, covering tools, configurations, and best practices.
Before configuring CI/CD, ensure your Ubuntu environment has:
sudo apt install php php-cli php-mbstring php-gd php-xml for common extensions).curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer).git init)./var/www/myproject).Select a tool that aligns with your team’s needs:
Create a .github/workflows/php-ci.yml file in your project root. This workflow automates testing and deployment on every push to the master branch:
name: PHP CI/CD
on:
push:
branches: [ master ]
jobs:
build-test-deploy:
runs-on: ubuntu-latest
steps:
# Checkout code
- uses: actions/checkout@v3
# Set up PHP (specify version and extensions)
- uses: shivammathur/setup-php@v2
with:
php-version: '8.0'
extensions: mbstring, gd, curl
# Install dependencies
- run: composer install --no-interaction --prefer-dist --optimize-autoloader
# Run tests (PHPUnit required)
- run: vendor/bin/phpunit
# Deploy to server (via SSH)
- name: Deploy to Server
run: scp -r . user@your-server-ip:/var/www/myproject
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
shivammathur/setup-php: Configures PHP and extensions.composer install: Installs project dependencies.vendor/bin/phpunit: Runs unit tests (ensure phpunit.xml exists).scp: Deploys files to the server via SSH (store the private key in GitHub Secrets).Install Jenkins on Ubuntu (sudo apt install jenkins) and create a Jenkinsfile in your project:
pipeline {
agent any
stages {
stage('Build') {
steps {
checkout scm
sh 'composer install'
sh 'php artisan key:generate' // If using Laravel
}
}
stage('Test') {
steps {
sh 'vendor/bin/phpunit'
}
}
stage('Deploy') {
when {
branch 'master'
}
steps {
sh 'ssh deploy@your-server-ip "cd /var/www/myproject && git pull && composer install && systemctl restart nginx"'
}
}
}
}
checkout scm: Pulls code from Git.composer install: Installs dependencies.ssh: Executes deployment commands on the server (e.g., git pull, composer install).Create a .gitlab-ci.yml file:
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- composer install
artifacts:
paths:
- vendor/
test_job:
stage: test
script:
- vendor/bin/phpunit
deploy_job:
stage: deploy
only:
- master
script:
- ssh deploy@your-server-ip "cd /var/www/myproject && git pull && composer install && systemctl restart nginx"
.github/workflows/, Jenkinsfile) in Git to ensure reproducibility.composer install --prefer-dist --optimize-autoloader to speed up deployments.After successful deployment, automate post-deployment tasks:
systemctl restart php8.0-fpm) and Nginx/Apache to apply changes.php artisan cache:clear (Laravel) or equivalent for your framework.By following these steps, you can establish a robust CI/CD pipeline for PHP on Ubuntu, enabling faster, more reliable deployments while maintaining code quality.