2020年前端必须掌握的自动化部署(webhooks)

2024-05-09 09:58

本文主要是介绍2020年前端必须掌握的自动化部署(webhooks),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

缘起

最近用Gatsby 写了一个个人blog,link =>  http://new.ruoduan.cn/

Github Star

发现 build 后体积太大,FTP 发文件 都要10几分钟,挑选来下自动化部署工具 ,本打算用jenkins 感觉有点重,而且学习成本较高。 看了一下觉得 使用 github的webHooks 是最合适的

Graph

大致流程是这样的:

 

 

  • 话不多说直接上代码 代码分为三个部分
  • Nodejs => Server
  • Shell 脚本
  • 插件

install

我的环境是 CentOS

服务器 应具备 nodejs && git

  • 首先先安装 github-webhooks的插件和pm2 服务器上npm install -g github-webhook-handler pm2

nodejs 服务

webhooks.js

var http = require('http')
// github-webhook-handler 的绝对路径
var createHandler = require('/usr/lib/node_modules/github-webhook-handler')
var handler = createHandler({ path: '/', secret: 'xxx' })
// 上面的 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 = 404res.end('no such location')})
}).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', ['./webhooks.sh',event.payload.repository.name], function(text){ console.log(text) });
})

shell

webhooks.sh

#!/bin/bash
WEB_PATH='/root/githubWebhook/warehouse/my-Gatsby-Blog'echo "开始执行shell"
cd $WEB_PATH
echo "pulling source code..."
git pull
echo "changing permissions..."
#chown -R $WEB_USER:$WEB_USERGROUP $WEB_PATH
echo " git pull 完成. 开始 build"
yarn run gatsby build
echo "build 完成"

到这里 我们服务端需要准备的东西就差不多了 Nginx 就不放出来

Github Settings

放一张图吧

 

 

start

接下来 pm2 启动服务

pm2 start webhooks.js -o ./webhooks.log

pm2的一些基本命令

写在最后

接下来 我还会更新一篇 长文 Gatsby 的文章 详细指出 其中的利弊,无论你是 新手还是想使用现代框架 ——— React 来维护我自己的blog 的老手 都非常适合

我的 New Blog => http://new.ruoduan.cn/

年后想换个工作,求内推!求内推!求内推! Live:杭州

我的一些信息 可查看我的 Blog about 部分 http://new.ruoduan.cn/about

这篇关于2020年前端必须掌握的自动化部署(webhooks)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973095

相关文章

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Python自动化批量重命名与整理文件系统

《Python自动化批量重命名与整理文件系统》这篇文章主要为大家详细介绍了如何使用Python实现一个强大的文件批量重命名与整理工具,帮助开发者自动化这一繁琐过程,有需要的小伙伴可以了解下... 目录简介环境准备项目功能概述代码详细解析1. 导入必要的库2. 配置参数设置3. 创建日志系统4. 安全文件名处

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

如何在Ubuntu 24.04上部署Zabbix 7.0对服务器进行监控

《如何在Ubuntu24.04上部署Zabbix7.0对服务器进行监控》在Ubuntu24.04上部署Zabbix7.0监控阿里云ECS服务器,需配置MariaDB数据库、开放10050/1005... 目录软硬件信息部署步骤步骤 1:安装并配置mariadb步骤 2:安装Zabbix 7.0 Server

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)