1. 程式人生 > >雲端計算之gitlab+jenkins持續整合持續開發

雲端計算之gitlab+jenkins持續整合持續開發

開發運維一體化,網站軟體等都在不斷的更新升級,沒個新版本的出現就意味著要部署新的環境,替換老的環境,如果這一步不能實現自動化,那麼工作會非常繁忙,在此,結合公司需求,搭建了gitlab+jenkins實現持續開發持續整合。

步驟1:部署開發人員寫的程式碼到程式碼管理伺服器

程式碼管理平臺還是比較多的,如github,gitlab 和 svn,github是儲存在國外網站平臺上,上傳下載都需要頻寬,每天都要上傳下載,使用不划算,所以可以選擇gitlab或者svn,此處使用gitlab做原生代碼管理伺服器。

1) 配置git

 yum -y install git

git –version        #檢視版本

git config --global user.name "MX-Steve"

git config --global user.email "[email protected]"

git config --global core.editor vim

mkdir /devops

cd devops/

echo 'print("hello world!")' > hello.py

git init #初始化本地倉庫資訊

git status #檢視倉庫裡檔案狀態

git add hello.py

git commit -m "hello.py"

2) 自建gitlab伺服器

網上下載gitlab中文版軟體包,此處將gitlab搭建在docker上

docker load < /path/to/gitlab_zh.tar

docker run -d -h gitlab --name gitlab -p 443:443 -p 80:80 -p 22:22 --restart always -v /srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /srv/gitlab/data gitlab_zh:latest

注意:物理機的443,80和22埠供docker容器gitlab使用,物理機地址為192.168.1.200

瀏覽器開啟http://192.168.1.200,建立工作組devops,根據開發人員名稱建立使用者,建立專案,並將使用者加入到專案中,此處管理員root,密碼12345678

將gitlab容器中生成的祕鑰匯入到gitlab網頁中

git remote add origin [email protected]::devops/core_py.git

git push origin master # 可以將本地git與gitlab程式碼管理伺服器管理上傳即成功

步驟2:安裝配置使用jenkins,伺服器ip地址為192.168.1.201,jenkins預設啟動8080埠

yum -y install jenkins

systemctl start jenkins

systemctl enable jenkins

瀏覽器開啟http://192.168.1.201:8080

cat /var/lib/Jenkins/secrets/initialAdminPassword

登入輸入管理員祕鑰

選擇外掛git安裝,使用admin賬戶繼續操作,在管理員->設定裡面可以修改管理員密碼

因為此處為非工作環境,因此使用wordpress作為開發人員寫的軟體,下載wordpress-4.8和wordpress-5.0兩個版本,模擬專案開發過程中的軟體升級操作

unzip wordpress-4.8-zh_CN.zip

cd wordpress/ 

git init

git add .

git commit -m "wordpress-1.0"

git tag v1.0

git push

第一個開發版本上傳到gitlab中

cd ..

unzip wordpress-5.0-zh_CN.zip #將第一個版本覆蓋掉

git add .

git commit -m "wordpress-2.0"

git tag v2.0

git push

第二個開發版本上傳到gitlab中

在gitlab上建立遠端倉庫wordpress

步驟3:構建工程

新建任務=>選擇自由風格=>新增Git Parameter引數=>原始碼管理採用git

1)原始碼採用git

2)將原始碼checkout到子目錄

構建工程,構建tag為v1.0的原始碼

1)構建工程

2)選擇指定的標籤

檢驗結果

1)選擇指定標籤

2)檢視日誌輸出

3)檢視本地結果,構建好的專案出現在/var/lib/jinkens目錄下

修改構建工程,編寫插入shell腳步,實現自動部署

建立版本檔案,便於區分當前版本與上一個版本,有利於版本回滾

步驟4:釋出應用

vim deploy_web.py

import requests

import os

import hashlib

import tarfile

from urllib import request

 

#使用url進行get請求,獲取網站文字資訊,獲取當前版本

def get_webdata(url):

r = requests.get(url)

return r.text

#將網址內容下載到fname檔案中

def download(url, fname):

html = request.urlopen(url)

with open(fname, 'wb') as fobj:

while True:

data = html.read(1024)

if not data:

break

fobj.write(data)

 

#檢查檔案MD5值

def check_md5(fname):

m = hashlib.md5()

 

with open(fname, 'rb') as fobj:

while True:

data = fobj.read(4096)

if not data:

break

m.update(data)

 

return m.hexdigest()

 

#部署版本,應用釋出程式碼

def deploy(app): # /var/www/packages/myproject_2.0.tar.gz

#切換路徑到/var/www/packages路徑下

os.chdir('/var/www/packages')

#解壓縮myproject_2.0.tar.gz檔案

tar = tarfile.open(app, 'r:gz')

tar.extractall()

tar.close()

#將.tar.gz替換成空字串

src = app.replace('.tar.gz', '')

#建立/var/www/html/mysite軟連結

dst = '/var/www/html/mysite'

if os.path.exists(dst):    #如果檔案存在

os.unlink(dst)            #刪除

os.symlink(src, dst)        #否則建立軟連結

 

if __name__ == '__main__':

#呼叫get_webdata()函式,目的是以釋出伺服器'http://192.168.1.201/live_version'網址為引數獲取當前版本,ver結果為2.0

ver = get_webdata('http://192.168.1.201/live_version').strip()

app_name = 'myproject_%s.tar.gz' % ver

#app_url為下載myproject_2.0.tar.gz檔案網址

app_url = 'http://192.168.1.201/packages/' + app_name

#目標檔案

app_path = os.path.join('/var/www/packages', app_name)

#呼叫download()函式,目的是從app_url網址讀取資料存入目標檔案

download(app_url, app_path)

#呼叫check_md5()函式,目的是計算目標檔案MD5值

local_md5 = check_md5(app_path)

#呼叫get_webdata()函式,目的從釋出伺服器網址獲取md5值

remote_md5 = get_webdata(app_url + '.md5').strip()

#如果目標檔案md5值和釋出伺服器提供的md5值相等,確認下載的檔案無誤,呼叫deploy()函式,以目標檔案作為引數進行部署

if local_md5 == remote_md5:

deploy(app_path)

步驟5:配合週期性計劃任務實現自動運維