自动化部署有Jenkins为什么我还要写这篇文件,应为公司服务器太菜了,装上jenkins服务器炸了。
所以想用golnag撸一了自动化部署工具 每次更新程序都scp太痛苦了
实践完成的自动化部署工具
自动化部署的实现思路
看了这个图 大家应该发现这实践起来并不困难
就是收到 请求 后去 调用 git pull 就行
下面是程序分析
# devops生成文件 请填写完成检查确认后 再 运行啊 (每次运行会重写sh模块)
# 这devops系统配置
app:
host: "0.0.0.0:8083"
debug: true
max_request: 1000
task_num: 10
# 要自动化部署应用的配置
devops:
node:
- port: "8081" # 程序运行端口
full_name: "dollarkillerx/easyutils" # 名称 例如 dollarkillerx/easyutils
branch: "master" # 分支
giturl: "https://github" # git pull url 地址 (你要先配置一下秘钥啊!)
runname: "api" # 运行程序的name
dirpath: "/home/s" # 绝对路径
secondarydirectory: "" # 如果有二级目录 就填写在这里
- port: "8082"
full_name: ""
branch: "es"
giturl: ""
runname: ""
dirpath: ""
secondarydirectory: ""
用户填写 yaml文件 node部分是一个[]slice
当系统初始化的时候 我获取读这个文件
这边有一个问题,让脚步运行程序 but这个二级制的程序 可能不在 这个项目的最外层目录上 就需要一个secondarydirectory来指引
var sh1 = `
#! /bin/sh
lsof -i :%s | awk '{print $2}'> tmp
pid=$(awk 'NR==2{print}' tmp);
kill -9 $pid
# 如果文件不存在 git clone
if [ ! -d "%s" ];then
cd %s
git clone -b %s %s
cd %s
./%s &
else
# 如果文件存在
cd %s
git pull
./%s &
fi
`
var sh2 = `
#! /bin/sh
lsof -i :%s | awk '{print $2}'> tmp
pid=$(awk 'NR==2{print}' tmp);
kill -9 $pid
# 如果文件不存在 git clone
if [ ! -d "%s" ];then
cd %s
git clone -b %s %s
cd %s
cd %s
./%s &
else
# 如果文件存在
cd %s
git pull
cd %s
./%s &
fi
这边写了两个sh的模板 初始化系统的时候 读取config.yml 然后生成对应的sh
github 当pull发送的数据分析
{
"ref": "refs/heads/master",
"before": "b61cd27c0bfe30cbac7a731a6ce22790d9e1f6f7",
"after": "05300bfb10912f370ac74a5cbc2ed2095a60466c",
"repository": {
"id": 208684536,
"node_id": "MDEwOlJlcG9zaXRvcnkyMDg2ODQ1MzY=",
"name": "Cartoon5",
"full_name": "dollarkillerx/Cartoon5",
当pull触发的时候 返回的数据
我们这里主要看
"ref": "refs/heads/master", 这个是分支
"full_name": "dollarkillerx/Cartoon5", 这个是项目的地址
当服务器上部署多个网站就可以判断这两个 来分辨现在改执行什么脚本