前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >webhooks进行网站自动化部署

webhooks进行网站自动化部署

作者头像
Qwe7
发布2022-03-20 08:05:50
7340
发布2022-03-20 08:05:50
举报
文章被收录于专栏:网络收集

CentOS安装NodeJS

1.首先安装wget

代码语言:javascript
复制
yum install -y wget

如果已经安装了可以跳过该步

2.下载nodejs最新的bin包

可以在下载页面

代码语言:javascript
复制
wget https://nodejs.org/dist/v9.3.0/node-v9.3.0-linux-x64.tar.xz

然后就是等着下载完毕。

另外你也可以在你喜欢的任意系统上下载最新的bin包,然后通过FTP上传到CentOS上。

3.解压包

依次执行

代码语言:javascript
复制
xz -d node-v9.3.0-linux-x64.tar.xz
tar -xf node-v9.3.0-linux-x64.tar

4.部署bin文件

先确认你nodejs的路径,我这里的路径为~/node-v9.3.0-linux-x64/bin。确认后依次执行

代码语言:javascript
复制
ln -s ~/node-v9.3.0-linux-x64/bin/node /usr/bin/node
ln -s ~/node-v9.3.0-linux-x64/bin/npm /usr/bin/npm

注意ln指令用于创建关联(类似与Windows的快捷方式)必须给全路径,否则可能关联错误。

5.测试

代码语言:javascript
复制
node -v
npm

如果正确输出版本号,则部署OK

这种安装的方法好处是比较干净,安装也比较快速。个人认为比较适合新手。但是如果遇到nodejs插件全局安装时,需要自行去创建关联。

这也是后面出问题的原因,当时没注意。

安装插件

在安装目录(以我的为例/webhook)下执行如下命令

代码语言:javascript
复制
npm init -f
npm i -S github-webhook-handler
npm i pm2 -g

添加关联

由于需要使用pm2命令进行进程守护,需要添加关联我之前忽略了这一步导致出现-bash: pm2: command not found报错。

执行如下命令即可添加

代码语言:javascript
复制
ln -s pm2 安装路径  系统环境路径$PATH
echo $PATH 即可查询系统环境路径例如/usr/local/sbin

构建 Webhook 服务

在服务器目录下创建webhook web两个文件夹备用,在webhook目录下新建webhook.js文件我使用vim webhook.js 创建并编辑写入以下内容:

javascript

代码语言:javascript
复制
var http = require('http')
var createHandler = require('github-webhook-handler')
var handler = createHandler({ path: '/', secret: 'secret' })
// 上面的 secret 保持和 GitHub 后台设置的一致文章后面会提到。
function run_cmd(cmd, args, callback) {
  var spawn = require('child_process').spawn;
  var child = spawn(cmd, args);
  var resp = "";
  child.stdout.on('data', function(buffer) { resp += buffer.toString(); });
  child.stdout.on('end', function() { callback (resp) });
}
http.createServer(function (req, res) {
  handler(req, res, function (err) {
    res.statusCode = 200
    res.end('gggggggggg')
  })
}).listen(7777)
handler.on('error', function (err) {
  console.error('Error:', err.message)
})
handler.on('push', function (event) {
  console.log('Received a push event for %s to %s',
    event.payload.repository.name,
    event.payload.ref);
    run_cmd('sh', ['./deploy.sh',event.payload.repository.name], function(text){ console.log(text) });
})

secret 字段为 Github 中设置的,需要与这里相对应

注意,在运行的时候如果提示 github-webhook-handler is not defined 未找到 ,可以在目录中执行 npm link github-webhook-handler

编写shell脚本

cd /web通过 git clone git page命令下载文件同时完成git 初始化。

然后在webhook目录下创建deploy.sh写入以下内容

shell

代码语言:javascript
复制
#!/bin/bash
#网站的根目录,用自己的目录。
WEB_PATH='/web/brqs.github.io'
echo "start deployment"
cd $WEB_PATH
echo "fetching from remote..."
#为了避免冲突,强制更新本地文件
git fetch --all
git reset --hard origin/master
echo "done"

由于 Linux 文件权限问题,可能无法执行,建议先执行 chmod 777 ./deploy.sh

运行webhook.js

代码语言:javascript
复制
pm2 start webhook.js

进入Gtihub后台进行设置

进入需要自动部署的项目的github地址添加webhook,进入Settings设置页面,点击左侧的 Webhooks

按图中填写即可,你自己的服务器ip加端口(记得云服务器开放安全组狗头),secret是创建时自己填写的。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CentOS安装NodeJS
  • 安装插件
  • 添加关联
  • 构建 Webhook 服务
  • 编写shell脚本
  • 进入Gtihub后台进行设置
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档