Golang實現自動化部署工具

golang 實現自動化部署的實例

自動化部署有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

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", 這個是項目的地址api

當服務器上部署多個網站就能夠判斷這兩個 來分辨如今改執行什麼腳本服務器

這個系統是否是很是簡單啊!

相關文章
相關標籤/搜索