「自动化运维」从0到1 CICD自动化部署落地分享

「自动化运维」从0到1 CICD自动化部署落地分享,第1张

目录

一、CICD简介

二、CICD实践过程

三、含泪踩坑

四、 历史 文章指路

一、CICD简介

1、CICD定义

2、DevOps定义

DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

DevOps的基础核心是CICD。

CICD的基础核心是自动化。

二、CICD实践过程

1、起因

在我之前的团队,因为要切换全新业务线,需要为新业务搭建一套全新的环境,所有东西从0开始。

原先只是用于部署测试环境,后面决定一起部署生产环境,这个过程中我还造成了一个严重生产环境问题,好在当时的生产环境还未正式使用,未造成严重影响。

在当时挺害怕也挺有压力的,但是后面项目完整落地,平稳运行,我还是挺有成就感的,接下来我将整个项目过程完整的分享出来。

2、技术栈选型

首先进行技术栈选型,我们选择的是Jenkins,Jenkins当属业内持续集成老大哥,有着非常丰富的插件,也可以选择gitlab集成的CICD,因为我们还有其它的测试脚本需要集成,所以Jenkins对于我们来说是最优的选择;

Ansible是批量运维工具,通过编写yaml脚本,可以方便实现批量管理多台机器,并且Ansible是比较轻量级应用,很容易上手;

shell脚本可以用于执行一系列命令。

其它的就结合团队项目情况进行搭建。

3、Jenkins应用部署实现流程

首先来梳理下整个项目的实现流程,主要分为Jenkins主节点和应用服务器,是一对多的关系。

Jenkins主节点的主要负责项目部署前的工作,主要包含拉取代码,前端打包,后端打包,快照版检测,将压缩包和部署脚本发送到目标机器(即应用服务器),远程调用目标机器上的部署脚本进行代码替换。

应用服务器部署脚本执行过程有:解压压缩包,停止服务,覆盖代码,拉取disconf,应用目录分组赋权,重启服务,检查服务是否有进程,查看启动日志,删除/tmp目录下旧压缩包。

Jenkins应用部署流程图

4、任务计划

41、搭建环境

Jenkins

指路Jenkins系列如何搭建Jenkins环境。

Ansible

Git

GitLab

因为这个我没有实践成功的教程,所以在这里就不贴啦~

Nodejs

Maven

JDK

Nginx

2、编写前置脚本

3、编写应用部署脚本

4、Jenkins配置

指路Jenkins系列如何构建Jenkins Job。

新增Job,主要用于拉取代码,执行Maven编译,执行app_buildsh,将压缩包通过ssh发送到目标机器,远程调用目标机器的deploysh。

三、含泪踩坑

踩坑1

问题描述:在错误的路径拉取配置,原因是未成功解压压缩包。

解决方案:校验压缩包是否解压成功解压成功,并且在cd到正确的路径后添加&&(&&表示上一条命令执行成功再执行下一条命令)才进行拉取配置。

踩坑2

问题描述:项目没有正常停止,导致无法重新启动。

解决方案:虽然执行kill -9,但是未找到根本原因,因此加了一个检测机制,如果检测没有正常停止服务,则退出程序。

踩坑3

问题描述:生产部署脚本拉取了开发环境的的jdbc配置,原因是生产部署脚本写错了开发环境disconf的域名,当时我同时在搞开发生产环境的脚本,开发和生产是两套不同的脚本,一时混乱写错了,吓得一批,好在当时生产环境还没投产使用。

解决方案:为了避免后续这种情况的发生,而且是必须避免的,我们通过环境名称来判断走开发还是生产域名,这样就能保证脚本一致性了。

在这个项目实际遇到的问题远不止上面这几个,在这个实践过程中,我对整个应用部署流程有了更深的理解,平时方方面面的学习终于集中化起来进行实践了。

我习惯将学到的知识和遇到的问题记录起来,在写这篇文章的过程回过头来看,五味杂陈,原来我都经历了这些哈哈哈

踩过的坑终究使我更加强大,带你见证呱呱本呱成长为参天大呱~

搞测试,不迷路

呱呱大王本呱带你飞!

本文主要记录Jenkins+Rancher+k8s自动化部署相关配置说明,不涉及rancher和jenkins安装部署,包含java server项目、WAR项目、前端VUE项目部署配置介绍。

服务器环境信息:

需要在安装jenkins服务上部署下面相应的软件,请注意软件版本,如已经安装相关软件,可跳过此章节。

需要安装rancher-cli,并且使用jenkins用户预先登录rancher平台:命令参考:

--token:这个用户的token建议设置为永不过期,在rancher管理端 -> api&key > 添加。

建议安装阿里镜像,提高编译速度:

jenkins启动用户需要添加到docker组中:

项目主要是java和vue开发的,所以需要安装Maven Integration plugin插件。

spring boot或者spring cloud自带容器,以及其它服务类型的java后端应用部署。

1、填写项目名称,选择"构建一个maven项目"

点击下面"OK"按钮

2、填写项目描述信息

3、输入项目地址,并选择用户凭证

本文通过condingnet作为代码管理平台,点击"Add"添加自己账号凭证(输入codingnet平台登陆账号密码即可)。

4、配置maven编译脚本

5、编写rancher部署脚本

Dockerfile参数说明:FROM:选择基础镜像包,该项目是用java语言开发需要jdk18所以选择openjdk:8ADD:将bRule-deploy-100targz文件解压并上传到镜像的brule目录EXPOSE:容器内部启动2002端口,根据自身项目填写指定端口,多个端口填写多行EXPOSE标签ENTRYPOINT:容器启动时执行的命令,执行多条命令使用&&拼接,命令行中带&需要加上转移符\&,使用tail -fn监听应用日志,以便容器日志查看。

用于创建docker镜像,就好比创建一个已经安装并且配置好了应用程序的操作系统镜像。

参数说明:19216810021:5000:为本地docker镜像服务器地址brule:latest:应用名称,根据自身项目名称修改

利用上面创建好的操作系统镜像启动一个vmware虚拟机,创建k8s容器。

参数说明:brule:应用名称,根据自身项目名称修改,应用名称规范()image:刚才创建的docker镜像containerPort:容器启动端口,多个端口使用多行containerPort标签声明,端口限制在30000-32000

前面vmware虚拟机创建好后,怎么能让别人访问?这个时候就需要创建一个网络服务,用于打通路由器与vmware本地虚拟机的网络。

参数说明:brule:应用名称,根据自身项目名称修改port:容器启动端口nodePort:对外提供服务端口,外部机器访问

将上面配置好的shell脚本复制到Post Steps -> 执行shell文本域中,并点击"保存" -> "立即构建"即可部署。

1、进入刚才创建好的jenkins任务,点击立即构建

2、点击左下角构建任务,选择"Console Output",查看构建日志

3、登录rancher管理平台,查看构建好的应用

基于J2EE项目的war包部署,前面操作都一致,只是shell部署脚本稍有不同,这里主要详细说明rancher部署脚本。

Dockerfile参数说明:FROM:选择基础镜像包,war统一使用tomcat容器部署,tomcat:85-jre8-slimADD:将operationwar文件解压并上传到镜像的/usr/local/tomcat/webapps/目录EXPOSE:容器内部启动8080端口,根据自身项目填写指定端口,多个端口填写多行EXPOSE标签

这里不需要配置ENTRYPOINT标签,因为tomcat镜像包中已经有了。

用于创建docker镜像,就好比创建一个已经安装并且配置好了应用程序的操作系统镜像。

参数说明:19216810021:5000:为本地docker镜像服务器地址operation:latest:应用名称,根据自身项目名称修改

利用上面创建好的操作系统镜像启动一个vmware虚拟机,创建k8s容器。

参数说明:operation:应用名称,根据自身项目名称修改image:刚才创建的docker镜像containerPort:容器启动端口,多个端口使用多行containerPort标签声明,端口限制在30000-32000

前面vmware虚拟机创建好后,怎么能让别人访问?这个时候就需要创建一个网络服务,用于打通路由器与vmware本地虚拟机的网络。

参数说明:operation:应用名称,根据自身项目名称修改port:容器启动端口nodePort:对外提供服务端口,外部机器访问

将上面配置好的shell脚本复制到Post Steps -> 执行shell文本域中,并点击"保存" -> "立即构建"即可部署。

基于webpack构建的VUE项目部署,前面操作都一致,只是shell部署脚本稍有不同,这里主要详细说明rancher部署脚本。

Dockerfile参数说明:FROM:选择基础镜像包,前端统一使用tomcat容器部署,tomcat:85-jre8-slimCOPY:将/dist目录上传到镜像的/usr/local/tomcat/webapps/fastquery/目录EXPOSE:容器内部启动8080端口,根据自身项目填写指定端口,多个端口填写多行EXPOSE标签

这里不需要配置ENTRYPOINT标签,因为tomcat镜像包中已经有了。

用于创建docker镜像,就好比创建一个已经安装并且配置好了应用程序的操作系统镜像。

参数说明:19216810021:5000:为本地docker镜像服务器地址operation:latest:应用名称,根据自身项目名称修改

利用上面创建好的操作系统镜像启动一个vmware虚拟机,创建k8s容器。

前面vmware虚拟机创建好后,怎么能让别人访问?这个时候就需要创建一个网络服务,用于打通路由器与vmware本地虚拟机的网络。

参数说明:shutcm-fastquery-web:应用名称,根据自身项目名称修改port:容器启动端口nodePort:对外提供服务端口,外部机器访问

将上面配置好的shell脚本复制到Post Steps -> 执行shell文本域中,并点击"保存" -> "立即构建"即可部署。

因为项目需要(实际是没有人手。。。),需要搞开发的我自己来搭建服务器集群环境,并完成软件服务的自动化部署。本文及后续文章,记录运维部署自动化实践中的每一步工作,便于以后追踪参考。

本文先完成第一步工作:远程自动化安装Linux系统

技术方案选择:PXE+dhcp+tftp+kickstart 安装ubuntu1604 server

宿主机:ubuntu1604 desktop

目标服务器:(1)Dell Poweredge R540

(2)VMware虚拟机

安装镜像: ubuntu-16045-server-amd64iso

安装isc-dhcp-server

sudo apt-get install isc-dhcp-server

修改/etc/default/isc-dhcp-server

修改/etc/dhcp/dhcpdconf,添加如下配置:

运行dhcp服务

sudo service isc-dhcp-server start

安装tftpd-hpa

sudo apt-get install tftpd-hpa

修改/etc/default/tftpd-hpa

创建tftp目录

sudo mkdir /var/lib/tftpboot

sudo chmod 777 /var/lib/tftpboot

运行tftp

sudo service tftp-hpa start

安装apache2

sudo apt-get install apache2

apache 默认的根目录是/var/www/html ,使用默认配置启动apache

sudo service apache2 start

通过浏览器访问http://1921681110 测试http服务已开启

从修改内容看出,主要是为了添加pxe服务器的地址,以便目标机能够找到对应的kscfg以及seed文件。

将kscfg文件拷贝至http根目录

sudo cp kscfg /var/www/html/

Dell服务器与虚拟机均可自动开启安装过程,虚拟机全程无干扰安装完毕。

Dell服务器安装过程中报错:

the partition table format in use on your disks normally requires you to create a separate partition for boot loader code this partition should de marked for use as a "reserved bios boot area" and should de at least 1 mb in size note that this is not same as a partition mounted in /boot

if you do not go back to the partitioning menu and correct,boot loader installation may fail later,although it may still be possible to install the loader to a partition

在这一步卡住后安装程序无法自动执行,我手工点击忽略后系统也能够继续安装完毕。

网上各种搜,看到一些评论说debian系的linux不建议用kickstart安装,建议直接使用preseed配置来安装,接下来研究下看看能不能解决问题。

问题链接: https://serverfaultcom/questions/658070/kickstarting-ubuntu-14-04-how-do-i-create-an-efi-boot-partition-from-my-ks-cf

下一章: 运维部署自动化实践(二)PXE+Preseed自动安装Ubuntu1604 server

一、证实你的应用程序是否兼容

微软应用程序兼容性工具包(ACT)是微软提供的一款免费工具,旨在帮助管理员们在部署Windows 7之前,确认有没有应用程序兼容性问题。这款工具还可以确定运行不兼容的应用程序会有什么后果。

二、证实所有硬件是否兼容

微软评估和规划工具包(MAP)这款工具包用来评估及清查你的网络上所有电脑上的硬件和设备。然后,它会报告哪些系统硬件状况良好,适合安装Win7。设备驱动程序一直是Windows升级的症结。

三、迁移用户设置

用户状态迁移工具(USMT)这款工具可以帮助你把用户设置和功能特性,从旧的个人电脑迁移到安装了Windows 7的新电脑上。这款可以编制脚本的命令行工具用起来还很容易。

四、让部署工具自动化

面向Windows 7的Windows自动化安装工具包(WAIK)是一套工具和文档,可以帮助管理员们自动部署Windows 7。它可以配置应答文件(answer file)、获取Windows映像,然后配置或改动这些映像。

五、将自动化提升到下一个阶段

部署映像服务和管理(DISM)是一款命令行工具,它结合了WAIK中的一些管理功能,让你在映像的整个生命周期期间内,可以配置映像的特性包和更新程序。它是微软之前的几款部署工具:包管理器(Package Manager)、PEimg和Intlcfg的下一代产品。

六、不用理会那个客户端

微软部署工具包(MDT)这款工具包提供了一个部署工作台,可用于配置操作系统、应用程序和用户设置。如果结合使用系统中心配置管理器2007(System Center Configuration Manager 2007),它就能够实现全自动化的部署。

七、你在睡眠时部署Windows 7

Windows部署服务(WDS)是一个服务器角色,让你可以通过网络,从某个集中位置,自动部署Windows7。WDS支持组播部署和无人值守的安装。不过,不是所有客户端都能与WDS兼容。

1:Jenkins秘钥查看

需要查看秘钥,

然后在 1620022和1620028服务器的目录下面将Jenkins秘钥放到~/ssh/authorized_keys文件里。

3:Jenkins自动化部署到多台服务器脚本

library 'lib-base@master'

def map = [:]

//######传参########

mapput('GIT_URL','http://1721601/FN-PM0091/cddgit')

mapput('GIT_BRANCH','master')

mapput('GIT_CRED_ID','jenkins')

def archivelist=[]

archivelistadd('job-excutor/target/cdd1jar')

mapput('ARCHIVE_FILE',archivelist)

// skywalking 服务目录

def SKYWALKING_DIR = '/usr/local/apps/apache-skywalking-apm-bin-es7'

// skywalking oap 服务地址

def SKYWALKING_OAP_IP = '1721620054'

def SKYWALKING_OAP_PORT = 11800

def deploylist=[]

deploylistadd("runjar -f 'cdd-service/target/cdd1jar' -v '/data/cddm'  -j '-Xms512m -Xmx512m' -h 1620028")

deploylistadd("runjar -f 'report-executor/target/cdd1jar' -v '/data/cddm' -j '-Dnacosloggingdefaultconfigenabled=false -Xms512m -Xmx512m' -h 1620022")

mapput('DEPLOY_RUN',deploylist)

//################

DockerBuild("maven",map);

Cobbler装机平台,不同版本的多系统的安装

Cobbler简介

• 基本概念

– Cobbler是一款快速的网络系统部署工具,

–  集中管理所需服务,如DHCP、DNS、TFTP、Web

– Cobbler内部集成了一个镜像版本仓库

– Cobbler内部集成了一个ks应答文件仓库

– Cobbler还提供了包括yum源管理、Web界面管理、API接口、电源管理等功能

手动安装有图形环境的虚拟机                               

  1操作系统为:CentOS 75

  2内存大小:2G 

  3磁盘空间:50G

  4虚拟机网络类型为:private1

5软件包选择 "带GUI的服务器"

6分区选择 "自动分区"

7管理员root密码为 1

8创建普通用户lisi

####################################################

一  具备一个CentOS虚拟机                               

[root@svr7 ~]# cat /etc/redhat-release

CentOS Linux release 751804 (Core)

二、虚拟机设置                                     

  1设置防火墙为trusted

  ]# firewall-cmd  --set-default-zone=trusted

  2当前及永久设置SELinux状态为permissive

  ]# setenforce 0      #当前临时设置为宽松模式

  ]# getenforce

  ]# vim /etc/selinux/config

  SELINUX=permissive

  3配置IP地址为:1921684123/24

  4配置主机名:cobblerteducn

  5构建Yum仓库:以真机FTP服务器作为Yum源

[root@cobbler /]# cd /etc/yumreposd/

[root@cobbler yumreposd]# mkdir  repo

[root@cobbler yumreposd]# mv repo    repo

[root@cobbler yumreposd]# ls

[root@cobbler yumreposd]# vim  dvdrepo

[dvd]

name=dvd

baseurl=ftp://1921684254/centos-1804

enabled=1

gpgcheck=0

[root@cobbler yumreposd]# yum -y install xeyes

##################################################

三、利用scp真机传递cobblerzip包到虚拟机1921684123中

# scp /home/student/桌面/cobblerzip  root@1921684123:/root/

##################################################

四、搭建Cobbler装机平台

  Cobbler概述软件,管理dhcp、tftp、Web服务

    自由的导入镜像与ks应答文件

1解压cobblerzip包

]# yum -y install unzip

]# unzip /root/cobblerzip  -d  /

]# ls /cobbler/

cobbler_boottargz  cobbler_webpng

cobbler_rpmzip

]# unzip /cobbler/cobbler_rpmzip  -d  /opt/

]# ls /opt/cobbler/

#####################################################

五、安装cobbler主程序、工具包等

]# yum -y install  dhcp  httpd  mod_ssl

]# yum -y install  /opt/cobbler/rpm 

]# rpm -q cobbler

cobbler-282-1el7x86_64

####################################################

cobbler网络装机部署

1安装软件 cobbler cobbler-web dhcp tftp-server pykickstart httpd 

cobbler        #cobbler程序包

cobbler-web    #cobbler的web服务包

pykickstart    #cobbler检查kickstart应答文件语法错误

httpd          #Apache web服务

dhcp            #dhcp服务

tftp-server    #tftp服务

2配置cobbler

[root@svr7 /]# vim  /etc/cobbler/settings

next_server:  1921684123  #设置下一个服务器还为本机

server:  1921684123        #设置本机为cobbler服务器

manage_dhcp:  1              #设置cobbler管理dhcp服务

pxe_just_once:  1            #防止客户端重复安装操作系统

开机启动项: 匹配及停止 

    1硬盘启动    2光驱设备    3U盘    4网络引导 

3配置cobbler的dhcp                             

[root@svr7 /]# vim  /etc/cobbler/dhcptemplate

  :%s  /旧/新/g              #全文替换

  :%s  /1921681/1921684/g    #全文替换

    5 次替换,共 4 行 

4绝对路径解压cobbler_boottargz    #众多的引导文件

# tar -tf  /cobbler/cobbler_boottargz  #查看包里面内容

# tar -xPf  /cobbler/cobbler_boottargz  #绝对路径释放

# ls  /var/lib/cobbler/loaders/

5启动相关服务

  ]# systemctl restart cobblerd   

  ]# systemctl enable cobblerd

  ]# systemctl restart httpd

  ]# systemctl enable httpd

  ]# systemctl restart tftp               

  ]# systemctl enable tftp

  ]# systemctl restart rsyncd  #同步服务

  ]# systemctl enable rsyncd

6同步刷新cobbler配置

[root@svr7 /]# cobbler sync    #检测所有配置是否正确

TASK COMPLETE

]# firefox https://1921684123/cobbler_web  #了解

  用户名:cobbler

  密码:cobbler                                       

##########################################################################################################

cobbler应用

cobbler import  --path=挂载点  --name=导入系统命名(随意起)

导入安装镜像数据

# mkdir /dvd

# mount /dev/cdrom  /dvd

# ls /dvd/

# cobbler import --path=/dvd  --name=CentOS7

cobbler导入的镜像放在:/var/www/cobbler/ks_mirror

[root@cobbler /]# cobbler list    #查看有哪些系统

distros:

  CentOS7-x86_64        #安装客户端至少2G内存

profiles:

  CentOS7-x86_64

##############################################

删除

# cobbler list

# cobbler profile remove --name=CentOS7-x86_64  #删除菜单信息

# cobbler distro remove --name=CentOS7-x86_64  #删除镜像信息

###########################################

# umount /dvd/

# mount /dev/cdrom  /dvd  #将光盘换成RHEL7

# ls /dvd/

  安装完成机器 默认root  密码  cobbler

############################################################################################################

自定义应答文件:开头注释行删除

[root@cobbler ~]# system-config-kickstart  #生成ks文件

必须默认kickstart文件存放位置:/var/lib/cobbler/kickstarts/

[root@cobbler ~]# cobbler list

修改kickstart文件:

[root@cobbler ~]# cobbler profile edit --name=CentOS7  --kickstart=/var/lib/cobbler/kickstarts/自定义cfg

[root@cobbler ~]# cobbler profile report

[root@cobbler ~]# cobbler sync  #同步配置

###########################################################################################################

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 「自动化运维」从0到1 CICD自动化部署落地分享

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情