CI/CD(Jenkins)

 

CI ----持续集成         /CD---持续交付
开发---Git------        Jenkins---{web1,web2}
测试脚本---封装脚本---发布脚本
Jenkins下载代码,打包,编译,测试,上线服务器
工具集
Git    Gitlab     jenkins   ansible


CI ----持续集成 
首先將所有虚拟机防火墙设置为宽松模式,SELinux设置为宽松模式
  firewall-cmd --set-default-zone=trusted
  setenforce 0
在Jenkins主机安装依赖软件
dnf -y install git    版本控制软件
[root@jenkins ~]# dnf -y install postfix   邮件服务器
[root@jenkins ~]# dnf -y install mailx     邮件客户端
[root@jenkins ~]# dnf -y install java-11-openjdk     JavaJDK工具
systemctl enable postfix --now 开机自启邮件服务器
 在4.30安装Jenkins (软件包在真机linux二阶段
先传到虚拟机,然后下载
   dnf -y install jenkins-2.263.1-1.1.noarch.rpm
systemctl enable jenkins   开机自启
systemctl start jenkins      启动服务
ss -ntulp |  grep 8080 查看服務是否开启
访问192.168.4.30:8080  输入密码
 cat /var/lib/jenkins/secrets/initialAdminPassword 此路径下复制随机密码
efc18e7d8e2242368aa3bf68097a2569
不创建用户,继续使用admin 保存
然后修改密码

拷贝插件文件到Jenkins目录  /var/lib/jenkins/plugins/。
:jenkins_plugins.tar.gz。插件

tar -xf jenkins_plugins.tar.gz  解压
[root@jenkins ~]# cp -rp jenkins_plugins/* /var/lib/jenkins/plugins/ 拷贝到Jenkins目录
[root@jenkins ~]# systemctl restart jenkins 重启服务
刷新网页--看到插件已安装

Jenkins项目管理
git服务器
1.命令行: git init /var/lib/git/myporject --bare (服务器 空仓库)
客户端:gitclone 服务器:/目录
cd myproject 进入仓库
写一个网页
git add. 保存到暂存区
git commit -m  保存到本地
git push 推到远程服务器
git tag  v1  打上标签
图形版
2, podman load -i < 镜像   导入镜像
touch /etc/resolv.conf
podman images 查看镜像
podman run -d -h --name -p -p -p -v -v -v --restart=always gitlab_zh 开启容器
podman ps  查看容器

程序类型
   解释型 Python,JavaScript,shell(源代码)执行脚本依赖计算机有解释器
需要翻译
  编译型 C ,C++ ,Go (编译)不需要解释器--直接运行 不需要翻译

修改项目配置(192.168.4.30)
 默认文件下载到
  ls /var/lib/jenkins/workspace/myweb/此路径(所有文件默认都到一个目录里                                                                             会产生数据覆盖)
将此路径的文件删除
rm -rf /var/lib/jenkins/workspace/myweb/*

  项目-->配置-->Additional Behaviours-->检出到子目录-->myweb-$web
拉取不同代码会自动创建子目录

          当拉取代码出现红球发邮件提示
myweb -->配置-->构建后操作--> e-mail -- root@localhost   每次构建不稳定时发邮件

CD---持续交付
思路:
Jenkins已经从git拉取代码到本地
jenkins 主机部署vsftpd(/var/ftp)
把上面拉取代码拷贝到ftp共享目录
tar -cf 打包  MD5sum 哈希值
cp  /var/lib/jenkins/workspace/myweb/  /var/ftp

首先將虚拟机防火墙设置为宽松模式,SELinux设置为宽松模式
  firewall-cmd --set-default-zone=trusted
  setenforce 0
安装ftp 启动服务
 dnf -y install vsftpd
vim /etc/vsftpd/vsftpd.conf
12行  no 改为yes
[root@jenkins ~]# mkdir -p /var/ftp/deploy/packages
[root@jenkins ~]# chown -R :jenkins /var/ftp/deploy/
[root@jenkins ~]# chmod -R 775 /var/ftp/deploy/
[root@jenkins ~]# systemctl enable vsftpd --now
浏览器访问ftp://192.168.4.30
 项目-->配置-->构建-->构建shell            
脚本如下:
pkg_dir=/var/ftp/deploy/packages 定义变量
cp -r myweb-$web $pkg_dir  
rm -rf $pkg_dir/myweb-$web/.git 删除隐藏目录下历史记录
cd $pkg_dir/ 进入目录
tar czf myweb-$web.tar.gz myweb-$web  打包
rm -rf myweb-$web  删除原来文件
md5sum myweb-$web.tar.gz | awk '{print $1}' > myweb-$web.tar.gz.md5                                                                                计算MD5哈希值
cd ..  回到上层目录
echo -n $web > ver.txt    当前版本写到ver.txt中

查看ftp 目录里是否有东西
 
在web1 安装软件
首先將虚拟机防火墙设置为宽松模式,SELinux设置为宽松模式
  firewall-cmd --set-default-zone=trusted
  setenforce 0
在web1 安装软件
     dnf -y install httpd wget tar
     systemctl enable httpd --now
      ss -ntulp | grep httpd
编写脚本
#!/bin/bash
#定义变量,指定FTP共享路径
ftp_url=ftp://192.168.4.30/deploy
#定义变量,指定网页根路径
web_dir=/var/www/html
#定义函数,行数名为down_file,该函数的作用是从FTP服务器下载代码数据到网站根目录
down_file(){
#获取FTP服务器上面最新构建的代码版本号
#curl是基于命令行的浏览器,-s选项为静默访问,不显示下载过程(可以自己对比不是用-s的差异)

  version=$(curl -s $ftp_url/ver.txt)
#将服务器上面的版本文件下载到web服务器的/var/www/html/目录下
#wget为下载工具(如果没有则需要安装),-q选项为静默模式下载,不显示下载过程
#-O选项可以指定将文件下载到哪里,这里是下载到/var/www/html/ver.txt

  wget -q $ftp_url/ver.txt -O $web_dir/ver.txt
#下载代码数据的打包文件,根据前面获取的版本号,下载对应的版本数据打包文件
  wget -q $ftp_url/packages/myweb-$version.tar.gz -O $web_dir/myweb-$version.tar.gz
#对下载下来的数据打包文件计算HASH值(哈希值),awk过滤仅显示第一列数据结果
  hash=$(md5sum $web_dir/myweb-$version.tar.gz| awk '{print $1}')
#使用curl访问ftp服务器上面的HASH值
  ftp_hash=$(curl -s $ftp_url/packages/myweb-$version.tar.gz.md5)
#对比本地和FTP服务的HASH值是否一致,如果不一致代表数据损坏了
#如果一致就可以解压该数据包,将数据解压到网站根目录下/var/www/html/

  if [ "$hash" == "$ftp_hash" ];then
     tar -xf $web_dir/myweb-$version.tar.gz -C $web_dir
  fi
}
#判断如果本地没有/var/www/html/ver.txt文件,则直接调用前面的函数下载代码数据
if [ ! -f $web_dir/ver.txt ];then
  down_file
fi
#盘如果本地有/var/www/html/ver.txt文件,则判断本地版本文件和FTP版本文件是否一致
#一致就不再下载FTP的数据,如果不一致则调用前面的函数下载新的代码数据包

if [ -f $web_dir/ver.txt ];then
  ftp_ver=$(curl -s $ftp_url/ver.txt)
  local_ver=$(cat $web_dir/ver.txt)
  if [ "$ftp_ver" != "$local_ver" ];then
      down_file
  fi
fi
chmod +x web.sh  添加X权限
[root@web1 ~]# ls /var/www/html 
[root@web1 ~]# ./web.sh 运行脚本
[root@web1 ~]# ls /var/www/html

修改代码 上传测试(4.10)
 cd myproject                   #进入仓库目录
[root@develop myproject]# vim  index.html                #修改首页文件第4行内容
<title>Tarena</title>
[root@develop myproject]# git add .                       #添加修改记录
[root@develop myproject]# git commit -m "modify index"      #提交修改  
[root@develop myproject]# git tag  v2                         #添加代表版本标签
[root@develop myproject]# git push origin master             #推送数据到服务器
[root@develop myproject]# git push origin v2                 #推送数据到服务器
然后到Jenkins服务器重新构建
myweb --->Build with Parameters  --> 看到有v2--> 开始构建
到web1 上执行脚本
./web.sh 测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值