「自动化运维」从0到1 CICD自动化部署落地分享
目录
一、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 #同步配置
###########################################################################################################
0条评论