一、環境準備
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的作用是集中化管理,可以在集羣中實現多臺機器同時部署。