Gogs Webhook Deploy
通过Gogs内置的Webhook,实现自动部署项目。
🔨 步骤
1 安装
在需要实现自动部署的机器上安装本项目。
1.1 构建
# clone至本地
git clone https://git.lolli.tech/lollipopkit/gogs-webhook
# 构建
go build
1.2 开机自启
1.2.1 适用于root用户的操作
点击查看
在/etc/systemd/system
目录下创建一个文件,命名为gogs-webhook-deploy.service
,内容如下:
[Unit]
Description=Gogs Webhook Deploy Service
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart={ABSOLUTE_PATH_TO_GOGS_WEBHOOK_DIR}/gogs-webhook -a ":3001"
WorkingDirectory={ABSOLUTE_PATH_TO_GOGS_WEBHOOK_DIR}
[Install]
WantedBy=multi-user.target
{ABSOLUTE_PATH_TO_GOGS_WEBHOOK_DIR}
为Clone的目录绝对路径
然后执行:
systemctl enable --now gogs-webhook-deploy.service
1.2.2 适用于非root用户
在~/.config/systemd/user/
目录下创建一个文件,命名为gogs-webhook-deploy.service
,内容如下:
[Unit]
Description=Gogs Webhook Deploy Service
After=network.target
[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart={ABSOLUTE_PATH_TO_GOGS_WEBHOOK_DIR}/gogs-webhook -a ":3001"
WorkingDirectory={ABSOLUTE_PATH_TO_GOGS_WEBHOOK_DIR}
[Install]
WantedBy=multi-user.target
{ABSOLUTE_PATH_TO_GOGS_WEBHOOK_DIR}
为Clone的目录绝对路径
然后执行:
systemctl --user enable --now gogs-webhook-deploy.service
如果需要在系统启动但用户未登录时就自动启动,请执行:
sudo loginctl enable-linger {USER}
{USER}
为你在系统中的用户名
2 配置
2.1 Gogs Git 钩子
在Gogs中创建一个Git项目,并为其设置Webhook。
进入你的项目https://git.lolli.tech/{USER}/{PROJECT}/settings/hooks/gogs/new
,填写相关信息。
2.2 项目
在需要自动部署的项目里添加自动部署脚本(默认是deploy.py
,示例)。
2.3 Gogs-Webhook-Deploy
在clone本项目的目录内添加config.json
[
{
// 名称:git用户名/项目名(需要实现自动部署的项目),不可为空
"repo": "lollipopkit/example",
// 项目的父文件夹路径,默认“~”,可以是相对路径
"path": "/home/lolli/pro",
// 脚本文件名,默认“deploy.py”
"script": "deploy.py",
// 信号:commit messgae里包含信号,则执行脚本,默认“{D}”
"signal": "{D}"
}
]
更改本配置后,不需要重启服务,会自动加载最新配置。
3 尝试自动部署
⚠️ 注意,请仔细阅读下一节要求,然后尝试自动部署。
在需要部署的项目内,新建commit,commit message内需要包含刚在config.json
内配置的signal
(默认{D}
),然后push。
如果未能成功,请查看clone的本项目内的.log
文件夹内的日志。
🔖 要求
- 在仓库的webhook页面正确配置
- 部署机器上项目文件夹名与Git项目名一致
- 部署过程需要有相应权限(不可sudo,除非以root权限运行本项目)
- 部署时,需要在commit message中包含
{D}
字符(可以通过config.json
参数自定义字符) - 如果要部署非默认分支,需要手动切换到对应的git分支
🔍 CLI
Usage of gogs-webhook:
-a string
Address to listen on (default ":3001")
📝 License
LGPL LollipopKit 2022
Description
Languages
Go
81.5%
Python
10.5%
Dockerfile
7%
Shell
1%