【Python自動化運維】一個簡單的jenkins發佈教程(jenkins + svn + saltstack + python)

一、環境準備

1、安裝JDK插件,略。
2、安裝tomcat,略。
3、搭建jenkins,略。
3、saltstack master 和minion環境搭建,略。
4、file_roots設置。
在這裏插入圖片描述

二、jenkins項目配置。

1、新建一個jenkins項目。
2、項目配置。
啓用參數化構建過程。
在這裏插入圖片描述
配置svn代碼地址
在這裏插入圖片描述

構建操作,只需要運行腳本就行。
在這裏插入圖片描述

三、腳本製作

release.py(部署操作)

#!/usr/bin/python3
# author wugf

import os
import salt.client

workspace = os.getenv("WORKSPACE")
build_id = os.getenv("BUILD_ID")
pkgn = os.getenv("pkg_name")

def re_cmd(minion, tomcat_home, tgt_name, minion_type):
    ## 路徑拼接
    tomcat_home = "/opt/" + tomcat_home
    war_name = tgt_name + ".war"
    bak_src = tomcat_home + "/webapps/"
    bak_dest = "/tmp/" + build_id + tgt_name + ".tar"
    upload_src = "salt://" + workspace + "/" + pkgn + "/target/" + war_name
    ## 命令拼接
    shutdown = [tomcat_home + "/bin/shutdown.sh"]
    backup = ["tar --remove-files -cvf " + bak_dest + " " + tgt_name + " " + war_name, bak_src]
    upload = [upload_src, bak_src]
    startup = [tomcat_home + "/bin/startup.sh"]
    
    ## 執行命令,輸出結果
    client = salt.client.LocalClient()
    print(client.cmd(minion, "cmd.run", shutdown, tgt_type=minion_type))
    print(client.cmd(minion, "cmd.run", backup, tgt_type=minion_type))
    print(client.cmd(minion, "cp.get_file", upload, tgt_type=minion_type))
    print(client.cmd(minion, "cmd.run", startup, tgt_type=minion_type))

rollback.py(回滾操作)

#!/usr/bin/python3
# author wugf

import os
import salt.client

rollb = os.getenv("rollback")

def rb_cmd(minion, tomcat_home, tgt_name, minion_type):
    ## 路徑拼接
    tomcat_home = "/opt/" + tomcat_home
    war_name = tgt_name + ".war"
    drc = tomcat_home + "/webapps/"

    ## 命令拼接
    shutdown = [tomcat_home + "/bin/shutdown.sh"]
    startup = [tomcat_home + "/bin/startup.sh"]
    remove = ["rm -fr " + tgt_name + " " + war_name, drc ]
    revert = ["tar -vxf /tmp/" + rollb + tgt_name + ".tar", drc]

    ## 執行命令,輸出結果
    client = salt.client.LocalClient()
    print(client.cmd(minion, "cmd.run", shutdown, tgt_type=minion_type))
    print(client.cmd(minion, "cmd.run", remove, tgt_type=minion_type))
    print(client.cmd(minion, "cmd.run", revert, tgt_type=minion_type))
    print(client.cmd(minion, "cmd.run", startup, tgt_type=minion_type))

test_carloan.py(發佈腳本)

#!/usr/bin/python3
# author wugf
 
import os
import release
import rollback
 
pkgn = os.getenv("pkg_name")
rollb = os.getenv("rollback")
build_id = os.getenv("BUILD_ID")
 
 ## 參數配置,"包名":["salt-minion目標", "Tomcat根目錄", "war包名" ,"salt-minion目標類型"]
test_dict = {
    "carloan-web":["10.1.1.98", "tomcat_web", "web", "glob"],
}
 
test_list = test_dict[pkgn]
 
def test_build():
    build = "mvn clean install -PUAT"  ## maven多配置化打包
    if pkgn in test_dict.keys():
        result = os.system(build)  ## 打包並對退出代碼進行判斷
        if result != 0:
            exit(1)
        release.re_cmd(test_list[0], test_list[1], test_list[2], test_list[3])  ## 部署操作調用
    else:
        print("請選擇發佈的包名!! ")
 
def test_rollback():  ## 回滾操作調用
    rollback.rb_cmd(test_list[0], test_list[1], test_list[2], test_list[3])
 
 ## 發佈與回滾操作選擇判斷
if rollb == "Release":
    test_build()
elif int(rollb) > 0 and int(rollb) < int(build_id):
    test_rollback()
else:
    print("回滾編號錯誤")
    exit(1)

四、發佈操作。

1、rollback的值默認是Release,即爲發佈狀態
每次發佈前備份的都是上次的代碼
在這裏插入圖片描述2、控制檯查看發佈狀態。
打包成功
在這裏插入圖片描述
saltstack命令執行情況:
在這裏插入圖片描述
3、回滾操作
回滾到發佈前的代碼,上次發佈的構建編碼是7,輸入構建編號,7,然後點擊"Build"即可。
在這裏插入圖片描述

五、教程結束。

寫在後面:該教程爲了照顧基礎不怎麼好的朋友,教程中代碼部分簡化的比較多,也爲寫慣shell腳本想試下python的老司機提供一個參考。
saltstack的作用是集中化管理,可以在集羣中實現多臺機器同時部署。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章