jenkins部署與CI/CD


一.jenkins簡介

jenkins是一款由java編寫的軟件

CI/CD :持續集成,持續交付,持續部署,持續開發

開發部(編寫代碼)-->交付給測試部-->測試部反饋給開發部-->沒問題后交付給運維部

程序語言:

解釋型語言:python/shell/php

編譯型語言:C/C++ /Java          不能直接運行需要編譯(gcc)

程序員上傳到-->gitlab--->運維人員在jenkins下載gitlab上的代碼--->批量部署代碼

2.安裝jenkins並啟動服務

yum -y install  jenkins-2.190.1-1.1.noarch.rpm       #這個包可以在網上下,也可以在本地傳過來,華為雲家目錄下有

yum -y install java-1.0.8-openjdk    #這一步必須做,不然jenkins啟動不起來

systemctl enable jenkins

systemctl restart jenkins

3.訪問jenkins圖形化界面

瀏覽器輸入:192.168.1.30:8080     #默認8080端口

 

復制紅色部分到終端,cat一下將密碼粘貼在上面位置.點擊確定出現下面的頁面

 

 

4.安裝jenkins插件

第一步: 點擊選擇插件來安裝(選擇推薦的插件比較慢)-->選擇無后安裝  -->創建第一個管理員,選右下角的admin繼續登錄-->保存並完成-->開始使用

第二步:修改管理員密碼   admin -->configure->password-->save--admin和新修改的用戶密碼來登錄

第三步:安裝插件,將插件的地址改為國內鏡像站點,點擊老頭頭像-->Manage jenkins-->advance-->Update site :使用清華大學鏡像站點https://mirrors.tuna.tsinghua.edu.cn/jenkins/

avilable -->搜索 Localization:Chinse(simplified) 和Git Parameter --> Install without start --> restart jenkins when installation complete and no jobs are running

第四步: 安裝過程中可能會超時,刷新一下就好,登錄進去

5.CI/CD流程

 

 

1.程序員在自己的電腦上編寫代碼(客戶端操作)

 [root@client ~]# git init website   #創建初始化website目錄
初始化空的 Git 版本庫於 /root/website/.git/
[root@client ~]# ls
website
[root@client ~]# cd website/
[root@client website]# echo "this is my site " > idnex.html   #在目錄里新建一個文件,上傳到倉庫
[root@client website]# git add .
[root@client website]# git commit -m "mysite 1.0"   
[root@client website]# git tag 1.0    #打標簽,也就是版本號
[root@client website]# echo "this is my site 2.0" >> idnex..html  #追加一行代碼
[root@client website]# git add .
[root@client website]# git commit -m "my site 2.0"   #
[root@client website]# git tag 2.0

2.管理員在gitlab上創建名為website的項目,類型為公開,為組創建,添加昨天創建的普通用戶為該項目的主程序員.

 

 3.程序員上傳代碼到gitlab服務器

[root@client website]# git remote add origin git@192.168.1.20:devops/website.git
[root@client website]# git push -u origin --all
[root@client website]# git push -u origin --tags
Total 0 (delta 0), reused 0 (delta 0)
To git@192.168.1.20:devops/website.git
 * [new tag]         1.0 -> 1.0
 * [new tag]         2.0 -> 2.0

4.配置jenkins下載代碼

    首先在jenkins服務器上安裝git

     yum -y install git

    jenkins主頁面點擊創建一個新項目-->任務名稱 website -->選擇 free style -->勾選 this project is parameterized-->git parameter-->

    name:webver/parameter type:tag -->源碼管理:Git -->Repository URL:http://192.168.1.20/devops/website.git  

    Branches to build  :$ webver-->保存

構建:

 點擊 bulid with parameter --> 選擇相關的tag進行構建,構建完成的內容自動放到了jenkis主機的/var/libjenkins/workspace目錄下

 [root@jenkins ~]# cd /var/lib/jenkins/workspace/
 [root@jenkins workspace]# ls
 website
 [root@jenkins workspace]# cd website/
 [root@jenkins website]# ls
 idnex.html
5.修改工程,將程序下載到子目錄中.配置->源碼管理->addtional behaviours->checkout to a sub-directory(檢出到子目錄):web-$webserver-> 保存后構建測試
 

 

 

 

 

 

 點擊開始構建夠,在jenkins服務器目錄上查看

[root@jenkins ~]# cd /var/lib/jenkins/workspace/
[root@jenkins workspace]# ls
website
[root@jenkins workspace]# cd website/
[root@jenkins website]# ls
website-1.0  website-2.0

6.進一步修改工程:

  1.將軟件目錄拷貝到/var/www/html/deploy/.pkgs

  2.將軟件目錄下的.git隱藏目錄刪除

  3.將軟件目錄打包,便於下載

  4.刪除軟件目錄

  5.計算壓縮包的md5值

  6.生成/var/www/html/deploy/{last_ver,live_ver}兩個文件,分別記錄前一版本號和當前版本號
第一步

 

將軟件目錄拷貝到/var/www/html/deploy/.pkgs

[root@jenkins website]# systemctl restart httpd
[root@jenkins website]# systemctl enable httpd
[root@jenkins website]# mkdir -p /var/www/html/deploy/pkgs
[root@jenkins website]# chown -R jenkins.jenkins /var/www/html/deploy/   #注意別寫錯路徑

 

 excecute shell中添寫的腳本代碼:

deploy_dir=/var/www/html/deploy/pkgs  # 定義變量
cp -r website-$webver $deploy_dir  # 拷貝軟件目錄到web目錄
cd $deploy_dir   # 切換到web目錄
rm -rf website-$webver/.git  # 刪除版本庫文件
tar czf website-$webver.tar.gz website-$webver   # 打包壓縮
rm -rf website-$webver   # 刪除軟件目錄,只保留壓縮包
# 計算壓縮包的md5值
md5sum website-$webver.tar.gz | awk '{print $1}' > website-$webver.tar.gz.md5
# 生成last_ver和live_ver文件
cd ..
[ -f live_ver ] && cat live_ver > last_ver
echo $webver > live_ver

 

 

 開始構建

點擊 build with parameter->工程1.0開始構建-->jenkins機器上 cd  /var/www/html/deploy,查看一下代碼是都創建並打包

 [root@jenkins html]# cd deploy/
[root@jenkins deploy]# ls
last_ver  live_ver  pkgs
[root@jenkins deploy]# cd pkgs/
[root@jenkins pkgs]# ls
website-1.0.tar.gz      website-2.0.tar.gz
website-1.0.tar.gz.md5  website-2.0.tar.gz.md5

 自動部署代碼

/var/www/download  保存下載軟件包

/var/www/deploy  保存live_ver文件的解壓目錄

/var/www/html/nsd1906   

 回滾思路

取出last_ver版本號

構建本地目錄'/var/www/deploy/website-%s' % ver

把 /var/www/html/nsd1906 刪除

創建軟連接

import wget
import os
import requests
import hashlib
import tarfile

def has_new_ver(ver_url, ver_fname):
    '有新版本返回True,否則返回False'
    # 如果本地沒有版本文件,則為True
    if not os.path.isfile(ver_fname):
        return True

    # 取出本地版本
    with open(ver_fname) as fobj:
        local_ver = fobj.read()

    # 本地版本與網上版本比較,如果不一致返回True
    r = requests.get(ver_url)
    if local_ver != r.text:
        return True
    else:
        return False

def file_ok(md5_url, fname):
    '如果文件已損壞返回False,否則返回True'
    # 計算本地文件的md5值
    m = hashlib.md5()
    with open(fname, 'rb') as fobj:
        while 1:
            data = fobj.read(4096)
            if not data:
                break
            m.update(data)

    # 取出網上的md5值,進行比較
    r = requests.get(md5_url)
    if m.hexdigest() == r.text.strip():
        return True
    else:
        return False

def deploy(app_fname):
    '部署軟件'
    deploy_dir = '/var/www/deploy'
    dest = '/var/www/html/nsd1906'
    # 解壓
    tar = tarfile.open(app_fname)
    tar.extractall(path=deploy_dir)
    tar.close()

    # 取出軟件目錄名
    app_dir = app_fname.split('/')[-1]
    app_dir = app_dir.replace('.tar.gz', '')
    app_dir = os.path.join(deploy_dir, app_dir)

    # 如果目標鏈接文件已存在,先刪除
    if os.path.exists(dest):
        os.remove(dest)

    # 創建軟鏈接
    os.symlink(app_dir, dest)


if __name__ == '__main__':
    # 判斷是否有新版本,沒有則退出
    ver_url = 'http://192.168.4.6/deploy/live_ver'
    ver_fname = '/var/www/deploy/live_ver'
    if not has_new_ver(ver_url, ver_fname):
        print('未發現新版本。')
        exit(1)

    # 下載新版本軟件
    r = requests.get(ver_url)
    ver = r.text.strip()  # 把額外的\n刪除,得到版本
    app_url = 'http://192.168.4.6/deploy/pkgs/website-%s.tar.gz' % ver
    down_dir = '/var/www/download'
    wget.download(app_url, down_dir)

    # 校驗。如果下載的文件已損壞,刪除它
    md5_url = app_url + '.md5'
    app_fname = app_url.split('/')[-1]
    app_fname = os.path.join(down_dir, app_fname)
    if not file_ok(md5_url, app_fname):
        os.remove(app_fname)
        print('文件已損壞。')
        exit(2)

    # 部署軟件
    deploy(app_fname)

    # 更新live_ver文件的版本
    if os.path.exists(ver_fname):

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM