首页
旅行足迹
友链
留言
关于
壁纸
Search
1
小米12Pro为例,新版小米手机安装magisk获取root教程
2,683 阅读
2
在html中通过vue3-sfc-loader引用.vue文件
1,864 阅读
3
vscode+docker开启Xdebug3功能调试PHP
1,801 阅读
4
目前贼拉好用的ChatGPT应用
1,461 阅读
5
Windows系统删除资源管理器侧边的3D对象等
1,420 阅读
玩机教程
软件设计师
前端
Vue
JavaScript
后端
Python
java
Search
标签搜索
python
flask
Django
爬虫
软件设计师
数据结构
Scrapy
玩机教程
PHP
LNMP
Ubuntu
Hexo
算法
ROOT
刷机
前端
JavaScript
webhook
自动化部署
binscor
累计撰写
43
篇文章
累计收到
4
条评论
首页
栏目
玩机教程
软件设计师
前端
Vue
JavaScript
后端
Python
java
页面
旅行足迹
友链
留言
关于
壁纸
搜索到
1
篇与
的结果
利用webhook实现代码自动化部署
2023年06月12日
394 阅读
0 评论
0 点赞
2023-06-12
前言修改完代码后直接提交代码然后解放双手,懒得再手动上传打包部署,那就试试webhook,只需要搞一次以后就可以修改完代码无需再去手动部署,提高你的上线效率。什么是webhookWebhook(网络钩子)是一种用于实现应用程序之间实时通信的方式。它允许一个应用程序通过简单的HTTP请求向另一个应用程序发送数据或触发事件。Webhook通常用于集成不同系统、自动化流程以及实现应用程序之间的实时更新。以下是典型的Webhook工作方式:一个应用程序,称为“发起方”,将一个HTTP请求发送到另一个应用程序,即“接收方”,并指定一个特定的URL作为目标。接收方应用程序在其服务器上设置一个称为“终端点”的URL,用于接收来自发起方的请求。发起方应用程序将请求发送到接收方的终端点URL,并携带所需的数据和参数。接收方应用程序接收到请求后,可以执行相应的操作,例如处理数据、更新数据库、发送通知等。接收方应用程序可以对处理结果进行响应,将响应发送回发起方应用程序,以便发起方可以得知请求的处理情况。Webhook提供了一种方便而灵活的方式,使得应用程序能够实时地传递信息和触发操作。它可以用于各种场景,如通知、数据同步、自动化流程等。准备及安装1.下载webhook在服务器上下载webhook,然后解压。比如在/home/www目录下载,本文以该目录为例,写这篇文章时最新版本为2.8.1下载,注意系统类型wget https://github.com/adnanh/webhook/releases/download/2.8.1/webhook-linux-amd64.tar.gz解压并且将文件夹改名,文件夹名根据自己需求来tar -zxvf webhook-linux-amd64.tar.gz && mv webhook-linux-amd64 webhook2.8.12.新建hook.json文件(或者hook.yaml,支持json和yaml两种类型的文件,本文以json文件为例)cd webhook2.8.1 && touch hook.json3.往hook.json文件中写入配置信息[ { "id": "demo2023", "execute-command": "/home/www/webhook2.8.1/demo2023.sh", "command-working-directory": "/home/www/webhook2.8.1", "pass-arguments-to-command": [{ "source":"payload", "name": "ref" }], "response-message": "执行成功" } ]参数说明id: 指定钩子的ID。此值用于创建 HTTP 端点 (http://yourserver:port/hooks/your-hook-id)execute-command: 指定触发钩子时应执行的命令,就是进行代码拉取等操作的脚本command-working-directory: 指定执行脚本时将用于脚本的工作目录pass-arguments-to-command: 指定将传递给命令的参数列表。 检查引用请求值页面以了解如何从请求中引用值。 如果要将静态字符串值传递给命令,可以将其指定为 { "source": "string", "name": "argumentvalue" }response-message: 指定将返回给钩子发起者的字符串,就是响应的内容想要了解更多配置及参数说明可以查看原文档4.编写拉取的脚本touch demo2023.sh #注意这个文件名和上面的json文件中execute-command参数的文件一致脚本内容示例(根据自己项目实际情况编写):#!/bin/sh branch="master" if [[ $1 = "refs/heads/$branch" ]];then # mylog 是当前站点的拉取日志位置 mylog="/home/www/webhook2.8.1/logs/demo2023.log" # mygitroot 是当前站点的拉取目录,即源码目录 mygitroot="/home/www/demo2023" # echo "--------------------------------------------------------" >> $mylog # echo "开始:" date --date='0 days ago' "+%Y-%m-%d %H:%M:%S" >> $mylog cd $mygitroot && git checkout $branch >> /dev/null && git fetch && git reset --hard HEAD && git clean -df && git merge '@{u}' && git pull >> /dev/null 2>&1 # echo "本地仓库(不包含未合并内容)简洁最新记录:" >> $mylog # echo "" >> $mylog cd $mygitroot && git log --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%C(cyan)%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit -2 >> $mylog # echo "dev拉取完成" >> $mylog echo "" >> $mylog echo "--------------------------------------------------------" >> $mylog exit; else echo "当前推送的非$branch分支,不进行拉取" fi exit注意这个示例里面有一个日志目录,记得去新建日志目录或者自行调节脚本内容5.生成公钥,然后将当前用户的公钥添加到github、gitlab等存储库,建议使用web程序运行的用户的公钥,拉取的时候使用该用户可避免拉取失败以及文件权限等问题6.启动webhook程序测试的时候可以用这种方式启动,在/home/www/webhook2.8.1底下执行./webhook -port 9999 -hooks ./hook.json -verbose -hotreload能正常使用没问题了可以通过守护进程的方式启动nohup /home/www/webhook2.8.1/webhook -port 9999 -logfile /home/www/webhook2.8.1/nohup.out -hooks /home/www/webhook2.8.1/hook.json -verbose -hotreload &关于启动命令的参数看文档如果是root用户想要指定其他用户启动可以用这个命令:# 使用www用户启动这个脚本 sudo -H -u www bash -c "nohup /home/www/webhook2.8.1/webhook -port 9999 -logfile /home/www/webhook2.8.1/nohup.out -hooks /home/www/webhook2.8.1/hook.json -verbose -hotreload &"注意:服务器防火墙关闭webhook启动时的端口或者添加ip白名单启动的时候是用的web程序目录,即第5步中提到的用户,否则拉取的时候会拉取失败,因为公钥用的是该用户的公钥7.测试在浏览器中访问http://域名:端口/hooks/demo2023,如果能够成功访问那就成功大半了8.添加webhooks在github、gitlab等存储库中的项目里面的设置功能,找到webhooks,填写步骤7里面的地址,然后保存,可以点击一下测试,看看响应是否成功,如果失败,查看哪一步出了问题,一定记住打开防火墙端口然后就可以修改一下代码,提交并推送看看是否成功最后整体的搭建就是这些的,细节比较多,出问题了多查查日志、官方文档等,本文章涉及到的日志文件如下:/home/www/webhook2.8.1/nohup.out 启动命令里面的参数控制,主要是webhook的运行日志/home/www/webhook2.8.1/logs/demo2023.log 脚本里面,git拉取后存储库的提交日志相关文档:项目地址:https://github.com/adnanh/webhook下载地址:https://github.com/adnanh/webhook/releases启动命令参数: https://github.com/adnanh/webhook/blob/master/docs/Webhook-Parameters.mdhook.json配置及参数说明:https://github.com/adnanh/webhook/blob/master/docs/Hook-Definition.md