自動化部署有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
當服務器上部署多個網站就能夠判斷這兩個 來分辨如今改執行什麼腳本服務器