相关文章
webhook 攻略
一、Git WebHook 是什么
在 Git 中,Webhook 是一种机制,用于在代码仓库中发生特定事件时触发自动化操作。它通过在代码仓库中配置一个 HTTP 回调 URL,当特定事件发生时,会向这个 URL 发送 HTTP 请求,从而触发预定义的操作。
二、实现自动化部署
设置Webhook
编写部署脚本
- 编写用于自动部署的脚本,该脚本负责从Git仓库中拉取最新的代码,并执行部署操作。
- 部署脚本可能涉及构建、测试、打包、上传至服务器、启动应用等操作,具体内容根据项目需求而定。
脚本案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #!/bin/bash
PROJECT_DIR="/path/to/your/project" GIT_REPO="https://github.com/yourusername/yourproject.git" BRANCH="main" REMOTE_HOST="your_remote_host" REMOTE_USER="your_remote_user" REMOTE_DIR="/path/to/remote/project"
cd $PROJECT_DIR
git pull origin $BRANCH
TIMESTAMP=$(date +"%Y%m%d%H%M%S") BACKUP_DIR="/path/to/backup/$TIMESTAMP" mkdir -p $BACKUP_DIR cp -r $PROJECT_DIR/* $BACKUP_DIR
scp -r $PROJECT_DIR/* $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR
echo "Deployment completed successfully."
|
编写接收 Webhook 请求的服务
你需要编写一个能够接收 Webhook 请求的服务,当收到请求时,触发部署脚本执行。这个服务可以是一个简单的 HTTP 服务器,可以使用 Node.js、Python 等编程语言实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| const http = require('http'); const { exec } = require('child_process');
const server = http.createServer((req, res) => { if (req.method === 'POST' && req.url === '/webhook') { let data = ''; req.on('data', (chunk) => { data += chunk; });
req.on('end', () => { try { const payload = JSON.parse(data); if (payload && payload.ref === 'refs/heads/master') { exec('bash deploy.sh', (error, stdout) => { if (error) { console.error(`执行部署脚本失败: ${error.message}`); res.statusCode = 500; res.end('Deployment failed'); } else { console.log(`部署脚本执行结果: ${stdout}`); res.statusCode = 200; res.end('Deployment successful'); } }); } else { res.statusCode = 200; res.end('Ignoring non-master branch push'); } } catch (error) { console.error(`解析 Webhook 数据失败: ${error.message}`); res.statusCode = 400; res.end('Invalid Webhook payload'); } }); } else { res.statusCode = 404; res.end('Not found'); } });
const PORT = process.env.PORT || 3000; server.listen(PORT, () => { console.log(`Server running on port ${PORT}`); });
|
部署服务到服务器
将接收 Webhook 请求的服务部署到服务器上,并确保服务在服务器启动时可以监听到正确的端口。
测试和验证
测试配置是否生效,当代码提交到 Git 仓库时,是否能够自动触发部署脚本执行。