Linux云计算 |【第二阶段】AUTOMATION-DAY3

主要内容:

Jenkins项目管理、构建分发服务器、自动化上线的案例部署

补充:yum与dnf只是做了快捷方式,用法一样

[root@node1 ~]# ll /bin/yum
lrwxrwxrwx. 1 root root 5 Feb 18  2020 /bin/yum -> dnf-3
[root@node1 ~]# ll /bin/dnf
lrwxrwxrwx. 1 root root 5 Feb 18  2020 /bin/dnf -> dnf-3

补充:wget常用下载选项

[-q]  静默模式下载,不显示下载过程

[-O]  指定将文件下载到哪里


一、CI/CD工作介绍

持续集成(CI):

① Develop开发者写代码(push推送到GitLab)

② Jenkins构建项目(从GitLab下载代码)

构建过程可定义任务:发邮件、打包代码(maven:tar/jar)、编译/测试代码

持续部署(CD):

③ 上线应用服务器(如web服务器)

开发者编写代码的程序类型:

- 编译型,编译器(如C、C++)

编译器是把源代码转换成即翻译低级语言的程序(生成一个独立的程序)

- 解释型,解释器(如Python、JavaScript)

解释器是直接执行用编程语言编写的指令的程序,解释的程序总是需要解释器来运行

编译器与解释器区别:

  • 主要区别:程序运行时需要解释器边解释边执行,而编译器则在运行时是完全不需要的
  • 解释器的优点:比较容易让用户实现自己跨平台的代码,比如java,php等,同一套代码可以在几乎所有的操作系统上执行,而无需根据操作系统做修改,但需要解释器解释;
  • 编译器的目的:生成目标代码再由连接器生成可执行的机器码,需要根据不同的操作系统重新编制代码可执行文件,但其执行效率要远远高于解释器运行的程序;


案例1:Jenkins项目管理

案例要求:创建Jenkins项目、修改Jenkins项目配置

环境准备:(沿用DAY02的实验环境:已部署GitLab、Jenkins):

  • 1)5台RHEL8虚拟机,主机名分别为develop、git、jenkins、web1和web2;
  • 2)develop主机的IP地址为192.168.4.10;
  • 3)git主机的IP地址为192.168.4.20;
  • 4)jenkins主机的IP地址为192.168.4.30;
  • 5)web1和web2主机的IP地址分别为192.168.4.100和192.168.4.200;
  • 6)所有主机都需要配置可用的系统YUM源,设置防火墙信任所有,SELinux放行所有

步骤1:Jenkins创建项目

1)浏览器访问Jenkins服务器8080端口:http://192.168.4.30:8080

创建Jenkins项目,登录后,点击【新建任务】创建

创建任务,填写任务(工程)名称:myweb(可任意),选择任务风格(下载代码就为一个任务)

① 设置Git参数-【参数化构建过程】

默认Jenkins会拉取最新版本的代码,设置让Jenkins拉取指定分支或标签(tag)的代码;

Git参数名称/描述:web(定义参数变量),参数类型(分支或标签)、默认值:origin/master

② 设置Git参数-【源码管理】

定义Git仓库的URL路径:http://192.168.4.20/devops/myproject.git

指定下载克隆的版本或分支:$web(调用Git参数变量web,参数类型已定义分支或标签)

2)构建Jenkins项目

选择创建的任务myweb

项目菜单选择【Build with Parameters】

Jenkins会自动连接GitLab服务器获取仓库数据

选择一个版本(分支或标签),点击【开始构建】

可在控制台中查看构建日志(#1)及查看构建过程(控制台输出)

3)查看Jenkins拉取的代码数据(Jenkins主机,192.168.4.30)

默认Jenkins会加拉取的代码数据保存到/var/lib/Jenkins/workspace/目录(该过程即克隆)

[root@jenkins ~]# ls /var/lib/jenkins/workspace/
myweb
[root@jenkins ~]# ls /var/lib/jenkins/workspace/myweb/
'#U8bf4#U660e.txt'   blog.html      images       myweb-origin   single.html404.html            contact.html   index.html   myweb-v1       work.htmlabout.html          css            js           myweb-v2

4)修改项目配置

假设代码有多个版本或分支,每次都将代码拉取到相同位置会产生数据覆盖;可以修改项目配置,实现将不同的版本和分支数据保存到不同子目录下;

重新修改项目配置,为Jenkins项目添加附加动作行为,将代码拉取输出到子目录;点击【配置】,在项目菜单【Additional Behaviours】,【新增】,【检出到子目录】,仓库的本地子目录:myweb-$web。注意myweb-$web必须要用变量,否则使用常量,下次拉取数据依旧会覆盖

设置邮件通知,在构建失败时可以给特定人员发送邮件,【构建后操作】,【E-mai Notification】:root@localhost

再次构建项目,并查看数据

5)Jenkins服务器查看数据(在192.168.4.30主机操作)

默认Jenkins会加拉取的代码数据保存到/var/lib/Jenkins/workspace/目录,myweb为任务名,myweb-v1为子目录名(V1是根据参数变量$web决定,例如:选择标签V1构建)

[root@jenkins ~]# ls /var/lib/jenkins/workspace/myweb/myweb-v1
'#U8bf4#U660e.txt'   about.html   contact.html   images       js            work.html404.html            blog.html    css            index.html   single.html

注意:GitLAB访问级别设为公开(公有),否则定义Git仓库的URL路径报错;


案例2:构建分发服务器

案例要求:安装、配置vsftpd、修改项目配置、重新构建项目

步骤1:安装、配置FTP共享服务器(仅在192.168.4.30主机操作)

1)设置防火墙、SELinux

[root@jenkins ~]# firewall-cmd --set-default-zone=trusted
[root@jenkins ~]# setenforce 0
[root@jenkins ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config

2) 安装配置vsftpd、启动服务

[root@jenkins ~]# dnf -y install vsftpd    //安装FTP软件
[root@jenkins ~]# vim /etc/vsftpd/vsftpd.conf      //修改vsftpd配置文件
anonymous_enable=YES      //修改12行,允许匿名访问ftp
[root@jenkins ~]# mkdir -p /var/ftp/deploy/packages    //创建目录,jenkins将拉取的代码数据拷贝到该目录并共享给FTP应用服务器
[root@jenkins ~]# chown -R :jenkins /var/ftp/deploy/   //修改目录所属组为jenkins,让Jenkins执行脚本时有执行权限
[root@jenkins ~]# chmod -R 775 /var/ftp/deploy/   //修改权限让Jenkins组对该目录有读写权限
[root@jenkins ~]# ls -ld /var/lib/deploy/
drwxrwxr-x. 3 root jenkins 22 Apr 24 09:48 /var/lib/deploy/
[root@jenkins ~]# systemctl enable vsftpd --now   //设置开机自启,并立刻启动

测试:使用浏览器访问:ftp://192.168.4.30

步骤2:修改GitLab项目配置

1)修改项目配置,添加构建步骤:执行Shell

2)编写构建脚本,脚本内容:(由Jenkins运行此脚本,前提需要对FTP目录有权限)

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
cd ..
echo -n $web > ver.txt

注释说明:

第一行,定义变量pkg_dir,变量值为ftp共享目录/var/ftp/deploy/packages。

第二行,将jenkins拉取到/var/lib/Jenkins/workspace/myweb-$web目录的数据拷贝到ftp共享目录(Jenkins默认拉取到workspace下,所以myweb-$web相对路径)

第三行,上一步拷贝过来的数据目录下包含一个隐藏.git目录,由Jenkins做构建时拉取的,删除该git仓库目录。

第四行,cd到ftp共享目录下。

第五行,将ftp共享目录下的代码数据打包。

第六行,将ftp共享目录下的代码数据目录删除(上一步已经打包数据,所以目录可删除)。

第七行,校验打包文件的HASH值(哈希值),并将结果写入到一个文件中。

第八行,返回上一级目录。

第九行,将当前Git版本信息写入ver.txt文件。

3)重新构建项目,查看数据

重新构建项目

使用浏览器访问FTP服务,查看数据。浏览器访问 ftp://192.168.4.30/deploy/packages/


案例3:自动化上线

整体思路:安装配置httpd、编写上线脚本、完成整个工作流程

步骤1:部署Web服务器

1)设置防火墙和SELinux(Web1和Web2)

[root@web1 ~]# firewall-cmd --set-default-zone=trusted
[root@web1 ~]# setenforce 0
[root@web1 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config[root@web2 ~]# firewall-cmd --set-default-zone=trusted
[root@web2 ~]# setenforce 0
[root@web2 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config

2)安装、配置httpd、安装Wget、tar(Web1和Web2)

[root@web1 ~]# yum -y install httpd
[root@web1 ~]# yum -y install wget tar
[root@web1 ~]# systemctl enable httpd --now   //设置开启自启,并立刻启动[root@web2 ~]# yum -y install httpd
[root@web2 ~]# yum -y install wget tar
[root@web2 ~]# systemctl enable httpd --now   //设置开启自启,并立刻启动

步骤2:编写自动化上线脚本

1)web1和web2自动从jenkins共享服务器下载代码实现持续部署

以web1为例编写脚本,可以结合计划任务实现周期性自动上线持续部署

[root@web1 ~]# vim web.sh
#!/bin/bash
ftp_url=ftp://192.168.4.30/deploy   ## 定义变量,指定FTP共享路径
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.txtwget -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" ];thentar -xf $web_dir/myweb-$version.tar.gz -C $web_dirfi
}## 判断如果本地没有/var/www/html/ver.txt文件,则直接调用前面的函数下载代码数据
if [ ! -f $web_dir/ver.txt ];thendown_file
fi## 如果本地有/var/www/html/ver.txt文件,则判断本地版本文件和FTP版本文件是否一致,一致就不再下载FTP的数据,如果不一致则调用前面的函数下载新的代码数据包
if [ -f $web_dir/ver.txt ];thenftp_ver=$(curl -s $ftp_url/ver.txt)local_ver=$(cat $web_dir/ver.txt)if [ "$ftp_ver" != "$local_ver" ];thendown_filefi
fi
[root@web1 ~]# chmod +x web.sh       //添加可执行权限
[root@web1 ~]# ./web.sh            //执行脚本
[root@web1 ~]# ls /var/www/html/
myweb-v1  myweb-v1.tar.gz  ver.txt     //按照脚本解压
[root@web1 html]# cd myweb-v1/
[root@web1 myweb-v1]# ls
'#U8bf4#U660e.txt'   about.html   contact.html   images       js            work.html404.html            blog.html    css            index.html   single.html

2)查看Jenkins的FTP共享目录(Jenkins主机,192.168.4.30)

[root@jenkins ~]# cat /var/ftp/deploy/ver.txt
v1
[root@jenkins ~]# ls /var/ftp/deploy/packages/
myweb-v1.tar.gz  myweb-v1.tar.gz.md5

测试:通过浏览器访问:http://192.168.4.100/myweb-v1/

步骤3:完成整理工作流程

工作流程:开发人员编写代码,将代码上传到GitLab服务器,Jenkins从GitLab服务器上面拉取最新代码数据到本地,根据Jenkins项目配置,将代码拉取到本地后,可以进行编译、测试、打包等工作,最后将数据包写入到共享服务器,应用服务器最后从共享服务器拉取数据实现上线功能;

1)开发人员修改代码、上传代码(Develop主机,192.168.4.10)

[root@develop ~]# cd myproject        //进入仓库目录
[root@develop ~]# vim  index.html       //修改首页文件第4行内容
修改前:
<title>Home</title>
修改后:
<title>Tarena</title>
[root@develop ~]# git add .            //添加修改记录到缓存区
[root@develop ~]# git commit -m "modify index"    //提交修改  
[root@develop ~]# git tag v2                 //添加代表版本标签V2
[root@develop ~]# git push origin master    //推送数据到服务器
[root@develop ~]# git push origin v2         //推送标签到服务器

2)Jenkins重新构建项目-V2(Jenkins主机,192.168.4.30)

3)在web1服务器执行上线脚本完成持续部署(Web1主机,192.168.4.100)

[root@web1 ~]# ./web.sh
[root@web1 ~]# ls /var/www/html/
myweb-v1  myweb-v1.tar.gz  myweb-v2  myweb-v2.tar.gz  ver.txt

验证:通过浏览器访问:http://192.168.4.100/myweb-v2/

验证:查看Jenkins的FTP共享目录(Jenkins主机,192.168.4.30)

[root@jenkins ~]# ls /var/ftp/deploy/packages/
myweb-v1.tar.gz  myweb-v1.tar.gz.md5  myweb-v2.tar.gz  myweb-v2.tar.gz.md5
[root@jenkins ~]# cat /var/ftp/deploy/ver.txt
v2

 

思维导图:

小结:

本篇章节为【第二阶段】AUTOMATION-DAY3 的学习笔记,这篇笔记可以初步了解到 Jenkins项目管理(创建Jenkins项目)、构建分发服务器(部署FTP共享服务器)、自动化上线(部署web服务器)的案例部署。


Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3266878.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

deepseek-vl 论文阅读笔记

目录 一、已有模型性能差距分析 二、创新点 数据集构建 模型架构 训练策略 实验与评估 三、细节 数据构建 内部SFT数据的分类体系 模型架构 训练流程包括三个阶段 系统包含三个模块 混合视觉编码器 视觉-语言适配器 语言模型 训练策略 阶段一&#xff1a;训练…

基于MediaPipe的手部特征点识别

基于MediaPipe的手部特征点识别 MediaPipe简介 MediaPipe Solutions 提供了一套库和工具&#xff0c;可以在安卓或者windows应用中快速应用人工智能 (AI) 和机器学习 (ML) 技术。 MediaPipe 手部地标任务可检测图片中手部的特征点。识别效果如下 环境配置 python -m pip ins…

PandasDataFrame知识点(巨详细)

15.Pandas&#xff1a; Pandas是基于NumPy的一种工具&#xff0c;该工具是为解决数据分析任务而创建的&#xff0c;Pandas提供了大量能使我们快速便携地处理数据的功能。Pandas的主要数据结构是Series与DataFrame。 16.Series&#xff08;可以看作有序的字典&#xff09; 类…

函数图像是如何画出来的(LiveCharts2)

大火的人工智能本质上就是一些简单的函数的组合&#xff0c;比如f(x)kxb&#xff0c;只是可能不只有x,还会x1&#xff0c;x2&#xff0c;…xn&#xff0c;只是维数不同&#xff0c;当维数很多的时候自然就需要方程组才能求解&#xff0c;维数越多自然需要的算力就越多。于是就有…

使用python中的特殊字典——defaultdict

专栏总目录 一、defaultdict说明 在Python中是一个特殊类型的字典&#xff0c;它是collections模块中的一个类defaultdict的实例。这个字典与普通的字典dict不同之处在于&#xff0c;当你试图访问一个不存在的键时&#xff0c;defaultdict会自动创建一个新条目&#xff0c;其值…

9步带你完全了解FPC柔性电路板,一文搞懂什么是FPC!

FPC你所要了解的— 01 FPC软板&#xff0c;是一种神奇的电子元件&#xff0c;它能够随心所欲地弯曲、折叠、缠绕&#xff0c;像一条灵活的蛇&#xff0c;在狭小的空间里穿梭自如。它是怎么做到的呢&#xff1f; 随着社会的不断进步&#xff0c;电子行业的不断更新换代&#xff…

02 USB_JTAG驱动安装

1 概述 一般安装vitis(vivado)的过程中勾选了安装JTAG cable驱动就会默认安装好JTAG驱动&#xff0c;但是如果vivado无法正确识别到JTAG&#xff0c;那么可以试下重新手动安装驱动 2 准备工作 安装驱动前&#xff0c;必须关闭所有的vivado,vitis-sdk并且拔掉USB JTAG 以免导…

【机器学习】用Jupyter Notebook实现并探索单变量线性回归的代价函数以及遇到的一些问题

引言 在机器学习中&#xff0c;代价函数&#xff08;Cost Function&#xff09;是一个用于衡量模型预测值与实际值之间差异的函数。在监督学习中&#xff0c;代价函数是评估模型性能的关键工具&#xff0c;它可以帮助我们了解模型在训练数据上的表现&#xff0c;并通过优化过程…

OLLaMA搭建本地大模型

LLMChain是一个简单的链&#xff0c;接受一个提示模板&#xff0c;使用用户输入格式化它并从LLM返回响应。 其中&#xff0c;prompt_template是一个非常关键的组件&#xff0c;可以让你创建一个非常简单的链&#xff0c;它将接收用户输入&#xff0c;使用它格式化提示&#xff…

Mybatis(三) 查询不同数据封装的方式

实体类&#xff1a; 数据库&#xff1a; 1、查询一个实体类对象 /** * 根据用户id查询用户信息* param id * return */User getUserById(Param("id") int id);<select id"getUserById" resultType"User">select * from t_user where id …

【数据结构初阶】单链表经典算法题十二道——得道飞升(上篇)

目录 1、移除元素 2、反转链表 3、链表的中间节点 4、合并两个有序链表 Relaxing Time&#xff01;&#xff01;&#xff01; ———————————————— 天气之子幻 ———————————————— 1、移除元素 思路&#xff1a; 创建一个新链表&#xff0…

<PLC><HMI><汇川>在汇川HMI画面中,如何为UI设置全局样式?

前言 汇川的HMI软件是使用了Qt来编写的,因此在汇川的HMI程序编写过程,是支持使用qt的样式来自定义部件样式的,即qss格式。 概述 汇川的软件本身提供三个系统的style样式,我们可以直接使用,但是,如果系统提供的样式不符合你的需求,那么你可以对其进行修改,或者自己新建…

IC秋招RTL代码合集

一 全加器和半加器 全加器 module full_adder1(input Ai, Bi, Ci,output So, Co);assign So Ai ^ Bi ^ Ci ;assign Co (Ai & Bi) | (Ci & (Ai | Bi)); endmodule module full_adder1(input Ai, Bi, Cioutput So, Co);assign {Co, So} Ai Bi Ci ; endm…

常见CSS属性(二)——浮动

一、浮动简述 浏览器在解析html文档时&#xff0c;正常的顺序是从上往下、从左往右解析。这个正常的解析过程&#xff0c;叫做正常文档流(标准文档流)&#xff0c;而浮动就是使得元素脱离文档流&#xff0c;“浮”在浏览器上。 浮动会使元素脱离文档流&#xff0c;不占位置&…

切换数据失败0x1671分析

1、问题背景 切换双卡数据开关&#xff0c;无法切换成功&#xff0c;且单机必现该问题 2、问题分析 搜索Log发现相关拨号无法建立成功&#xff0c;返回0x1671&#xff0c;无法建立PDN连接。 相关拨号上层未下发相关AT命令&#xff0c;属于上层报错&#xff0c;并非网络问题&…

leetcode日记(53)有效数字

一看题目就感觉好复杂&#xff01;试着写了一下&#xff0c;因为题目描述不清晰所以中途按照错误示例反复修改了很多次&#xff1a; class Solution { public:bool isNumber(string s) {if(s.size()0) return 0;if(s[0]||s[0]-){string sss.substr(1);if(s[1]!&&s[1]!…

【微软蓝屏】微软Windows蓝屏问题汇总与应对解决策略

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

全方位数据管理:一站式爬虫服务解决方案

摘要 面对互联网信息爆炸的时代&#xff0c;如何高效地收集、整理并分析海量数据&#xff0c;成为企业与开发者面临的一大挑战。本文将深入探讨一站式爬虫服务解决方案&#xff0c;揭示如何通过全方位数据管理策略&#xff0c;助力企业轻松驾驭大数据海洋&#xff0c;实现数据…

【教程】微信扫描二维码进入小程序指定页面并携带参数

功能描述 打开微信扫一扫&#xff0c;扫描产品上的二维码&#xff0c;弹出小程序&#xff0c;跳到“邀请用户”页面。解析二维码中的参数&#xff0c;自动填充到页面中的“邀请码”输入框。 操作步骤 首先&#xff0c;要到微信公众平台对扫普通链接二维码打开小程序功能进行配…

在WPF中使用WebView2详解

Microsoft Edge WebView2 Microsoft Edge WebView2 控件允许在本机应用中嵌入 web 技术(HTML、CSS 以及 JavaScript)。 WebView2 控件使用 Microsoft Edge 作为绘制引擎&#xff0c;以在本机应用中显示 web 内容。 使用 WebView2 可以在本机应用的不同部分嵌入 Web 代码&…