自动化部署有Jenkins为何我还要写这篇文件,应为公司服务器太菜了,装上jenkins服务器炸了。
因此想用golnag撸一了自动化部署工具 每次更新程序都scp太痛苦了node
https://github.com/dollarkill...git
看了这个图 你们应该发现这实践起来并不困难
就是收到 请求 后去 调用 git pull 就行github
# 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
当系统初始化的时候 我获取读这个文件golang
这边有一个问题,让脚步运行程序 but这个二级制的程序 可能不在 这个项目的最外层目录上 就须要一个secondarydirectory来指引shell
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 而后生成对应的shjson
{ "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", 这个是项目的地址api
当服务器上部署多个网站就能够判断这两个 来分辨如今改执行什么脚本服务器