溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Jenkins中的一鍵部署與版本更新

發(fā)布時(shí)間:2020-06-11 17:27:07 來(lái)源:網(wǎng)絡(luò) 閱讀:3398 作者:Q_skyworker 欄目:建站服務(wù)器

Jenkins作為一款持續(xù)集成,持續(xù)部署的軟件,是由java編寫的一款開源軟件

?  作為一款非常流行的CI(持續(xù)集成)工作,用于構(gòu)建和測(cè)試各種項(xiàng)目

?  Jenkins 的主要功能是監(jiān)視重復(fù)工作的執(zhí)行,例如軟件工程的構(gòu)建或在 cron下設(shè)置的 jobs


DEV  ---> GIT  ---->CI(持續(xù)集成) ----->CD(持續(xù)部署)

Jenkins中的一鍵部署與版本更新

使用過(guò)程:

Dev客戶端

1.搭建好git服務(wù)器,并使用git add . +git commit -m ‘project’  上傳至本地文件

2.Git tag v 1.0 ----打標(biāo)簽  git push,git push --tag推上去

 Git端

3.登錄到github服務(wù)器,新建項(xiàng)目與群組,并將客戶端的git倉(cāng)庫(kù)使用http推到項(xiàng)目中

 Jenkins服務(wù)端

4.在jenkins服務(wù)器上,建立自己的工程,其中添加git-parameter,并輸入gitlab相關(guān)url使其能夠與gitlab的項(xiàng)目通信,

 

5.可以在主菜單后會(huì)可以在build with parameter中看到各種上傳到gitlab上的版本,通過(guò)開始構(gòu)建,將gitlab上的項(xiàng)目下載到j(luò)enkens上,搭建web,將文件打包放在web上方便分發(fā)


6.編寫腳本,實(shí)現(xiàn)Jenkins中文件的自動(dòng)部署,版本更新


本篇主要對(duì)步驟5,6進(jìn)行自動(dòng)管理:

步驟5:將Jenkins上的文件一鍵部署至http共享

Jenkins的http自動(dòng)分發(fā):在工程設(shè)置中,添加構(gòu)建步驟

Jenkins中的一鍵部署與版本更新

Jenkins中的一鍵部署與版本更新

newcodes_${freetag} :路徑是/var/lib/jenkins/workspace/freesttle

#將版本文件從newcodes_${freetag}放到deploy_dir

 ------------------------------------------------------------------------

shell代碼

deploy_dir= /var/www/html/deploy/packages/  

cp -r newcodes_${freetag} $deploy_dir

rm -rf $deploy_dir/newcodes_${freetag}/.git  #刪除拷貝后原版本文件中的.git文件

cd $deploy_dir

在新的路徑下打包拷貝過(guò)來(lái)的版本文件

tar czf newcodes_${freetag}.tar.gz  newcodes_${freetag}

rm -rf newcodes_${freetag}  #刪除拷貝過(guò)來(lái)的源文件,只留tar

md5sum newcodes_${freetag}.tar.gz | awk '{print $1}' > newcodes_${freetag}.tar.gz.md5

#md5計(jì)算出tar包校驗(yàn)值,存放在對(duì)應(yīng)文件下

 -------------------------------------------------------------------------------

 新建立一個(gè)  mp_live_version 版本更新功能

#新版本(live_version,上一個(gè)版本(lastest_version

#[ -e 存在這個(gè)路徑] && 則將live_version內(nèi)容寫入lastest_version

#將新的輸入內(nèi)容寫如新版本

[ -e /var/www/html/deploy/live_version ] && cat /var/www/html/deploy/live_version >  /var/www/html/deploy/last_version

echo ${mp_live_ver} > /var/www/html/deploy/live_version


 

步驟6:從jenkins上下載最新的版本文件并自動(dòng)完成部署(web網(wǎng)頁(yè)部署)

#服務(wù)器/var/www/html下提供live_version(最新版本),lastest_version(上一版本)版本文件。提供packages/XXX_1.tar.gz文件

import requests
from urllib import request
import hashlib
import os
import tarfile


def get_data(url): #負(fù)責(zé)將遠(yuǎn)端的文件打開text的格式
   
r = requests.get(url)  #下載當(dāng)?shù)氐刂?br/>     return r.text  #返回文本格式


def download(url,fname): #下載文件,前面的download腳本
   
html = request.urlopen(url) #下載最新的tar
   
with open(fname, 'wb') as fobj:
       
while True:
            data = html.read(
1024)
           
if not data:
               
break
           
fobj.write(data)


def check_md5(fname):  #校驗(yàn)md5數(shù)值,求fname文件的md5數(shù)值
   
m = hashlib.md5()
   
with open(fname, 'rb') as fobj:#打開文件逐步讀取
       
while True:
            data = fobj.read(
1024)
           
if not data:
               
break
           
m.update(data)  #將每次的md5數(shù)值更新
   
return m.hexdigest()   #md5數(shù)值轉(zhuǎn)化成可讀的形式


def deploy(app):  #部署,先切到目錄,解壓tar,創(chuàng)建快捷方式
   
os.chdir('/var/www/packages') #cd 到這個(gè)路徑下
    
tar = tarfile.open(app, 'r:gz') #對(duì)app路徑的文件進(jìn)行解包
   
tar.extractall()
    tar.close()
    src = app.replace(
'.tar.gz',''#.tar.gz 替換為''/var/www/html/packages
   
dst = '/var/www/html/mysite' #創(chuàng)建快捷方式的路徑
   
if os.path.exists(dst):  #創(chuàng)建的路徑是否已經(jīng)存在,若存在則刪除路徑后,再次創(chuàng)建
       
os.unlink(dst)
    os.symlink(src,dst) 
#創(chuàng)建快捷方式



if __name__ == '__main__':
    ver = get_data(
'http://192.168.122.59/deploy/live_version') #版本信息在/var/www/html/
   
app_name = 'myproject_%s.tar.gz' %ver  #壓縮包的文件名
   
app_url =  'http://192.168.122.59/packages/' + app_name  #壓縮包的網(wǎng)絡(luò)文件路徑
   
app_path = os.path.join('/var/www/packages',app_name) #完整的下載到本機(jī)路徑
   
download(app_url,app_path) #下載到本的
   
locals_md5 = check_md5(app_path)
    remote_md5 = get_data(app_url+
'.md5').strip() #下載遠(yuǎn)程的md5文件,并將內(nèi)容后面的/n去掉
   
if locals_md5 == remote_md5:
        deploy(app_path) 
#md5校驗(yàn)沒(méi)有問(wèn)題,則解壓這個(gè)版本的文件,并創(chuàng)建快捷方式



向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI