IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> CI/CD概述 -> 正文阅读

[系统运维]CI/CD概述

jenkins简介

持续集成(ci)是当下最为流行的应用程序开发实践方式

程序员在代码仓库中集成了修复bug,新特性开发或是功能更新

ci工具通过自动构建和自动测试来验证结果,这可以检查程序代码的问题,迅速提供反馈

程序员提交代码更新到软件仓库svn/git ,ci服务器基于计划任务查询仓库,并下载代码,ci服务器

运行构建过程并生成软件包,ci服务器进行单元和集成测试存储测试结果,向开发团队发送构建通

知。

特点:简单,可扩展,用户界面友好

支持各种scm软件配置管理工具,如svn,git,cvs等

能够构建各种风格的项目

可以选择安装多种插件

跨平台,几乎可以支持所有的平台

安装jenkins

rpm -qa? |? grep? java-*? ? ? ? //安装java-*jdk

http://jenkins:io? ? ? ? ? ? ? ? ? ? //下载国外镜像速度慢

Index of /jenkins/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror? //国内镜像下载快

rpm? -ivh? jenkins-2.204.5-1.1.noarch.rpm

yum -y install? ?wget

wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/epel-release-7-11.noarch.rpm //下载依赖

yum? -y? install??epel-release-7-11.noarch.rpm

yum? -y? install? daemonize

systemctl? ?start? jenkins

systemctl? ?enable jenkins? ? ? ? ? ? ? ? ?//注意旧版本

curl? ?http://192.168.1.100:8080? ? ? ?//访问

cat? ?/var/lib/jenkins/secrets/initalAdminpassword? ? ?//复制密码

自定义jenkins

选择插件来安装(无)

选择admin登录找到账户下configure更改密码

jenkins配置

插件管理

点击jenkins左上角找到manage jenkins菜单manage plugins

sed ?-i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json? ? ? ?

?&&

sed ?-i ?'s/http:\/\/www.google.com/https:\/\/www.baidu.com/g' ?/var/lib/jenkins/updates/default.json

grep? ?-o? ? tsinghua? ? ?/var/lib/jenkins/updates/default.json

systemctl? restart? jenkins

修改配置国内站点更快部署插件

Git? Parameter

Localization? Chinese(simplified)

Dingtalk

钉钉机器人网址:https://im.dingtalk.com/

登录进入钉钉群里点击右上机器人管理

设置:

webhook:复制网址

安全设置:自定义关键字

登录jenkins进入configsystem找到钉钉配置新增添加名称和webhook,关键字

安装git

yum -y install git

提交代码到远程仓库

jenkins新建一个任务:输入一个名称

选择This project? is parameterized

添加参数git parameter:

name:xxxx(变量)

parameter type:branch or tag

default value:origin/master

//选上可以选择不同版本

源码管理

Git

repositories url:https://gitee.com/...

指定分支:$namexxxx

additional behaviours :? check out to sub-directory

仓库本地子目录:? ?mysite-$myweb??

构建:选择Execte shell

pkgs_dir=/var/www/html/deploy/pkgs
cp -r  mysite-$myweb  $pkgs_dir
cd  $pkgs_dir
rm -rf  mysite-$myweb/.git
tar czf mysite-$myweb.tar.gz    mysite-$myweb
rm  -rf  mysite-$myweb
md5sum  mysiet-$myweb.tar.gz | awk '{print $1}' > mysite-$myweb.tar.gz.md5
cd  ../
[ -f  live_ver ]  &&  cat  live_ver > last_ver
echo -n $myweb >  live_ver

自动化部署框架

为了方便版本切换,可以规划如下目录

/var/www/download用于存储下载的应用

/var/www/deploy用于存储解压的应用

创建/var/www/html/current软链接,指向需要部署对应用版本

编写下载应用的功能代码

通过位置参数指定要下载的版本

位置参数是live下载当前版本

位置参数是last下载前一个版本

如果已经下载则不要重复下载

编写校验文件代码

计算机指定文件的md5值

将md5值发布服务器提供的md5值进行比较。确认无误

编写自动部署功能python程序,判断服务器上是否有新版本,在deploy_web.py上操作

import os             #导入os模块,用于对系统文件的管理
import requests        #导入requests模块
import wget           #导入wget模块,下载软件包到目标目录下
import hashlib        #计算文件的md5值
import tarfile
#声明函数has_new_ver(),功能:当服务器上有新版本时返回True, 否则返回False
def has_new_ver(ver_fname, ver_url):
    #ver_fname 为应用服务器pycharm主机的当前版本文件路径
    #如果文件不存在,返回True, 提示没有新版本
    if not os.path.exists(ver_fname):
        return True
    #当ver_fname存在时,先获取当前应用的版本号
    with open(ver_fname) as  fobj:
        local_ver = fobj.read()
    #r 通过requests获取jenkins服务器上的最新版本号    
    r = requests.get(ver_url)
    #当应用服务器上的版本号和Jenkins服务器上的版本号不相等时,返回True, 即有新的版本,可以校验文件完整性和下载更新了
    if local_ver != r.text:
        return True
    else:
        return False
#声明函数file_ok(), 功能:如果下载的包文件未损坏,则返回True,否则返回False
def file_ok(fname, md5url):
	#先声明一个空的md5值对象m
    m = hashlib.md5()
    #每次从文件中取出4096(4k),更新对象m的md5值,最后计算出整个文件的md5值
    with open(fname, 'rb') as fobj:
        while 1:
            data = fobj.read(4096)
            if not data:
                break
            m.update(data)        #更新文件md5值
    #md5rul 为jenkins服务器上的压缩包的md5值文件链接地址
    #r 通过requests获取jenkins服务器上,代码压缩包的md5值文件内容
    r = requests.get(md5url)
    #将m转换为16进制m.hexdigest(); 
    #r.text.strp() jenkins服务器上,代码压缩包的md5值文件的内容,strip()去做文件最后的‘\n’
    if m.hexdigest() == r.text.strip():
        return  True            #相等,代表文件未损坏,返回True
    else:
        return False
#声明函数deploy(), 功能:用于部署软件到 web 服务器
def deploy(app_fname, deploy_dir, dest):
    tar = tarfile.open(app_fname)       		#打开压缩包app_fname
    tar.extractall(path=deploy_dir)     		#解压到deploy_dir目录下
    tar.close()                        	 	#关闭tar
    
    #拼接出解压后目录的绝对路径
    #获取app_dir变量中,最后一个'/',右边的内容
    app_dir = os.path.basename(app_fname)
    #将app_dir的后缀'.tar.gz',替换为空,赋值给变量app_dir
    app_dir = app_dir.replace('.tar.gz', '')
    #将变量deploy_dir和变量app_dir拼接在一起
    app_dir = os.path.join(deploy_dir, app_dir)
    #创建链接,如果软链接dest存在,删除软连接,然后为app_dir创建新的软链接
    if os.path.exists(dest):
        os.remove(dest)       
    os.symlink(app_dir, dest)     #为app_dir创建软链接

#路径拼接的演示
if __name__ == '__main__':
	###判断jenkins服务器上是否有新版本
	#ver_url 为jenkins服务器的当前版本文件路径
	#ver_fname 为应用服务器pycharm主机的当前版本文件路径
 ver_url = 'http://192.168.1.137/deploy/live_ver'
    ver_fname = '/var/www/deploy/live_ver'
    if not has_new_ver(ver_fname, ver_url):
        print('未发现新版本')
        exit(1)
#如果服务器上有新版本,则下载新版本
	#r 为jenkins服务器的当前版本内容
	#app_url 为jenkins服务器上的压缩包链接地址
	#app_fname 为应用服务器pycharm主机的压缩包路径
	#wget.download 将jenkins服务器上的压缩包,下载到pycharm主机上
    r = requests.get(ver_url)
    app_url = 'http://192.168.1.137/deploy/pkgs/mysite-%s.tar.gz' % r.text
    app_fname = '/var/www/download/mysite-%s.tar.gz' % r.text
    wget.download(app_url, app_fname)
    
    #校验下载的软件包是否损坏,如果损坏则删除 os.remove()
    #md5rul 为jenkins服务器上的压缩包的md5值文件链接地址
    md5url = app_url + '.md5'
    if not file_ok(app_fname, md5url):
        print('文件已损坏')
        os.remove(app_fname)
        exit(2)
        
    #如果软件包没有损坏,则继续部署软件deploy()
    #deploy_dir 为应用服务器pycharm主机上的代码路径
    #dest 为最终被普通用户所访问的代码路径
    deploy_dir = '/var/www/deploy'
    dest = '/var/www/html/current' 
    deploy(app_fname, deploy_dir, dest)
    
    #更新本地的版本文件
    if os.path.exists(ver_fname):
        os.remove(ver_fname)
    wget.download(ver_url, ver_fname)

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 13:06:47  更:2021-11-11 13:08:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:44:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码