Files
gh-awudevelop-claude-plugin…/commands/rollback.md
2025-11-29 17:59:27 +08:00

311 lines
6.9 KiB
Markdown

# DevOps Plugin - Rollback Deployment
You are rolling back a deployment to a previous version.
## Task: Rollback Deployment
The user wants to rollback to a previous deployment. This is a critical operation that must be handled carefully.
### Step 1: Verify Configuration
1. Check if `.devops/config.json` exists
2. **Validate platform is supported**:
- Read config and get platform
- If platform is NOT "netlify", show error:
```
❌ Platform Not Supported: {platform}
This plugin currently supports Netlify only.
To switch to Netlify: /devops:init
Supported platforms: Netlify
```
Then STOP.
3. Check if deployments exist:
```bash
node ${CLAUDE_PLUGIN_ROOT}/cli/devops-cli.js deployments list --json
```
4. If no previous deployments:
```
❌ No previous deployments found
💡 Nothing to rollback to
```
Then STOP.
### Step 2: Show Deployment History
Display recent deployments:
```bash
node ${CLAUDE_PLUGIN_ROOT}/cli/devops-cli.js deployments list --limit 5
```
Show:
```
📋 Recent Deployments
Current: ✓ v1.2.3 (deployed 2h ago) - ACTIVE
ID: dep_xyz789
Status: Healthy
URL: https://app.example.com
Available rollback targets:
1. v1.2.2 (deployed 1d ago)
ID: dep_abc123
Status: Stable
Duration: 24h active
2. v1.2.1 (deployed 3d ago)
ID: dep_def456
Status: Stable
Duration: 72h active
3. v1.2.0 (deployed 1w ago)
ID: dep_ghi789
Status: Stable
Duration: 168h active
💡 Select a version to rollback to
```
### Step 3: Select Rollback Target
Parse command arguments:
- `/devops:rollback` - Rollback to previous version (auto-select v1.2.2)
- `/devops:rollback v1.2.1` - Rollback to specific version
- `/devops:rollback {deployment_id}` - Rollback to specific deployment
If no target specified, default to previous version.
### Step 4: Validate Rollback Target
```bash
node ${CLAUDE_PLUGIN_ROOT}/cli/devops-cli.js deployments validate \
--id {target_deployment_id}
```
Check:
- Target deployment exists
- Target is in stable state
- No breaking changes between current and target
- Platform resources still available
If validation fails:
```
❌ Cannot rollback to {target_version}
Reason: {validation_error}
💡 Try a different version or contact support
```
Then STOP.
### Step 5: Show Rollback Impact
Display impact analysis:
```bash
node ${CLAUDE_PLUGIN_ROOT}/cli/devops-cli.js rollback analyze \
--from {current_deployment_id} \
--to {target_deployment_id}
```
Show:
```
⚠️ Rollback Impact Analysis
Rolling back from v1.2.3 to v1.2.2
Changes that will be reverted:
- Feature: New user dashboard
- Fix: Database connection pool leak
- Update: Payment gateway integration
Database migrations:
⚠️ 2 migrations will be reverted
- 20240115_add_user_preferences
- 20240116_update_payment_schema
Configuration changes:
- API_VERSION: 2.3 → 2.2
- MAX_CONNECTIONS: 100 → 50
Potential impacts:
⚠️ Users will lose access to new dashboard
⚠️ Database schema will change
✓ No data loss expected
Estimated downtime: ~30 seconds
```
### Step 6: Confirm Rollback
⚠️ **CRITICAL CONFIRMATION**
Ask for confirmation:
```
⚠️ Confirm Rollback
You are about to rollback:
FROM: v1.2.3 (current)
TO: v1.2.2
This will:
- Revert code changes
- Rollback database migrations
- Reset configuration
- Cause brief downtime (~30s)
Type 'ROLLBACK' to confirm:
```
If not exactly "ROLLBACK", STOP.
### Step 7: Create Backup
Before rollback, create backup:
```bash
node ${CLAUDE_PLUGIN_ROOT}/cli/devops-cli.js backup create \
--deployment {current_deployment_id} \
--reason "pre-rollback"
```
Show:
```
💾 Creating backup...
✓ Backup created: .devops/backups/{timestamp}/
```
### Step 8: Execute Rollback
Execute rollback:
```bash
node ${CLAUDE_PLUGIN_ROOT}/cli/devops-cli.js rollback execute \
--to {target_deployment_id} \
--track
```
Stream progress:
```
🔄 Rolling back deployment...
[00:00] Starting rollback...
[00:01] Stopping current deployment...
[00:05] Current deployment stopped
[00:06] Restoring previous version...
[00:15] Code reverted to v1.2.2
[00:16] Rolling back database migrations...
[00:25] Database rolled back
[00:26] Updating configuration...
[00:28] Starting application...
[00:35] Health check: passed
[00:36] Rollback complete
```
### Step 9: Verify Rollback
Run post-rollback verification:
```bash
node ${CLAUDE_PLUGIN_ROOT}/cli/devops-cli.js verify-deployment \
--id {target_deployment_id}
```
Show results:
```
✓ Rollback successful!
Current deployment:
Version: v1.2.2
Status: Healthy
URL: https://app.example.com
Verification:
✓ Application responding
✓ Database connected
✓ Health checks passing
✓ No errors in logs
Previous deployment (v1.2.3):
Status: Terminated
Backup: .devops/backups/{timestamp}/
💡 Monitor: /devops:status
💡 View logs: /devops:logs
💡 If issues persist, rollback further: /devops:rollback v1.2.1
```
### Step 10: Record Rollback
Rollback is automatically recorded:
- Added to `.devops/deployments.json`
- Logged in `.devops/rollback-history.json`
- Backup preserved in `.devops/backups/`
### Step 11: Handle Rollback Failure
If rollback fails:
```
❌ Rollback failed!
Error: {error_message}
Failed step: {failed_step}
Emergency recovery:
1. Backup is safe: .devops/backups/{timestamp}/
2. Current state: {current_state}
3. Manual intervention required
💡 Contact platform support immediately
📝 Include rollback ID: {rollback_id}
```
Then attempt emergency recovery:
```bash
node ${CLAUDE_PLUGIN_ROOT}/cli/devops-cli.js emergency-recover \
--rollback-id {rollback_id}
```
---
**Netlify Rollback**:
Netlify rollback is **instant** and **zero-downtime**:
- Simply activates a previous deployment
- Atomic traffic swap (no downtime)
- All previous deployments remain available
- Can rollback to any previous deployment instantly
**How it works**:
1. Netlify keeps all your previous deployments
2. Rollback just makes a previous deployment the "published" one
3. No rebuild required (uses cached build)
4. Changes take effect immediately (typically < 1 second)
**Simplified for Netlify**:
- ❌ No database migrations (static sites/JAMstack)
- ❌ No complex infrastructure changes
- ❌ No downtime during rollback
- ✓ Instant rollback
- ✓ Can rollback multiple times
- ✓ Can "roll forward" to newer deployment if needed
**IMPORTANT**:
- Rollback is instant (atomic traffic swap)
- Previous deployments never deleted (available indefinitely)
- Can rollback to any deployment in history
- If using Netlify Functions, function code is also rolled back
- If using environment variables, they are NOT rolled back (managed separately)
**BEST PRACTICES**:
- Monitor application closely after rollback
- Rollback is safe and reversible (can activate newer version again)
- Document reason for rollback in deployment notes
- Check environment variables haven't changed between versions