meta-description: 使用GitHub Actions实现WordPress自动化部署完整教程,详解CI/CD工作流配置。
keywords: GitHub Actions,自动化部署,CI/CD,WordPress部署,自动发布
# 使用GitHub Actions自动化部署WordPress
本文详细介绍如何使用GitHub Actions实现WordPress代码的自动化部署,构建完整的CI/CD工作流。
## 为什么需要自动化部署
| 手动部署问题 | 自动化优势 |
|--------------|------------|
| 步骤繁琐易出错 | 一键部署 |
| 多人协作冲突 | 自动合并 |
| 无版本记录 | Git追溯 |
| 回滚困难 | 一键回滚 |
## 准备工作
### 1. 仓库结构规划
wordpress-theme/
├── .github/
│ └── workflows/
│ ├── deploy-staging.yml
│ └── deploy-production.yml
├── theme/
│ ├── style.css
│ ├── functions.php
│ └── ...
└── README.md
### 2. 服务器准备
# 在服务器上创建部署用户
sudo adduser deployer
sudo usermod -aG www-data deployer
# 设置SSH密钥认证
mkdir -p /home/deployer/.ssh
cat id_rsa.pub >> /home/deployer/.ssh/authorized_keys
chmod 700 /home/deployer/.ssh
chmod 600 /home/deployer/.ssh/authorized_keys
## 配置GitHub Actions
### 基础部署工作流
# .github/workflows/deploy.yml
name: Deploy to Production
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
- name: Validate composer.json
run: composer validate --strict
- name: Run tests
run: |
composer install
./vendor/bin/phpunit
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Deploy to Server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/html/wp-content/themes/my-theme
git pull origin main
composer install --no-dev
wp cache flush
### 多环境部署
# 分环境部署配置
name: Deploy
on:
push:
branches: [ develop, main ]
jobs:
deploy-staging:
if: github.ref == 'refs/heads/develop'
runs-on: ubuntu-latest
steps:
- name: Deploy to Staging
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.STAGING_HOST }}
username: deployer
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/staging/wp-content/themes/my-theme
git pull origin develop
wp cache flush --url=https://staging.example.com
deploy-production:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- name: Deploy to Production
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.PRODUCTION_HOST }}
username: deployer
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/html/wp-content/themes/my-theme
git pull origin main
composer install --no-dev --optimize-autoloader
wp cache flush
## 高级配置
### 使用环境变量
# 在GitHub仓库设置中添加secrets
env:
WP_ENV: production
DB_HOST: ${{ secrets.DB_HOST }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
steps:
- name: Create .env file
run: |
echo "WP_ENV=${{ env.WP_ENV }}" > .env
echo "DB_PASSWORD=${{ env.DB_PASSWORD }}" >> .env
### 数据库迁移
- name: Export Database
run: |
ssh deployer@${{ secrets.HOST }} \
"wp db export /tmp/backup-$(date +%Y%m%d).sql \
--path=/var/www/html"
- name: Import Database to Staging
run: |
scp /tmp/local-db.sql \
deployer@${{ secrets.STAGING_HOST }}:/tmp/
ssh deployer@${{ secrets.STAGING_HOST }} \
"wp db import /tmp/local-db.sql \
--path=/var/www/staging"
### 资源编译
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
- name: Install Dependencies
run: npm ci
- name: Build Assets
run: |
npm run build
npm run build:css
## 回滚策略
### 自动回滚配置
- name: Deploy with Rollback
run: |
# 记录当前版本
ssh deployer@production \
"cd /var/www/html && git rev-parse HEAD > /tmp/previous_version"
# 尝试部署
ssh deployer@production << 'EOF'
cd /var/www/html
git pull origin main
if ! wp core is-installed; then
git reset --hard $(cat /tmp/previous_version)
exit 1
fi
EOF
# 如果失败则回滚
if [ $? -ne 0 ]; then
echo "Deployment failed, rolling back..."
ssh deployer@production \
"cd /var/www/html && \
git reset --hard $(cat /tmp/previous_version)"
exit 1
fi
## 通知集成
### Slack通知
- name: Slack Notification
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
text: '部署完成:{{ github.repository }}'
webhook_url: ${{ secrets.SLACK_WEBHOOK }}
if: always()
### 邮件通知
- name: Send Email
uses: dawidd6/action-send-mail@v3
with:
server_address: smtp.gmail.com
server_port: 587
username: ${{ secrets.MAIL_USERNAME }}
password: ${{ secrets.MAIL_PASSWORD }}
subject: '部署通知:{{ github.repository }}'
body: '部署{{ job.status }}'
to: admin@example.com
## 最佳实践
1. 分分支保护:main分支禁止直接push,必须通过PR
2. 多环境验证:staging → production 逐步部署
3. 自动化测试:部署前运行单元测试
4. 备份策略:部署前自动备份数据库和文件
5. 监控告警:部署后自动健康检查
## 常见问题
| 问题 | 解决方案 |
|------|----------|
| SSH连接失败 | 检查密钥权限(600) |
| 部署超时 | 增加timeout-minutes |
| 权限错误 | 确保deployer属于www-data组 |
| 依赖安装失败 | 使用npm ci替代npm install |
通过GitHub Actions实现自动化部署后,可以将部署时间从30分钟缩短到3分钟,同时大幅提升代码质量。

评论(0)