jenkins持续集成

247 篇文章 0 订阅
156 篇文章 0 订阅

2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)_软件测试刷题小程序-CSDN博客文章浏览阅读2.6k次,点赞85次,收藏12次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、app自动化测试、接口测试、性能测试、自动化测试、安全测试及一些常问到的人力资源题目。最主要的是他还收集了像阿里、华为这样的大厂面试真题,还有互动交流板块……_软件测试刷题小程序https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502jenkins持续集成

课程目标

  • 了解CI、CD的基本概念
  • 掌握Jenkins的主从集群搭建
  • 掌握Jenkins角色权限配置、分组配置、全局配置等核心配置的使用
  • 掌握Jenkins的持久化原理及目录结构、文件备份与恢复
  • 掌握pipeline声明式语法
  • 熟练使用pipeline语法配置进行微服务项目基于docker容器的持续集成部署

相关理论

基本概念
持续集成

(Continuous Intergration)

持续集成的重点在于构建编译及测试,开发人员每天要提交很多次代码到分支,在分支合并到主干前,需要通过编译和测试识别出问题。持续集成的流程就是通过自动化的构建(主要是构建编译、自动化测试)来验证,从而尽早地发现集成错误。

持续集成的核心意义:通过自动化测试尽早的发现代码的问题。

持续交付

(Continuous Delivery):

持续交付指的是将产品尽可能快的发布上线的过程。持续交付是在持续集成基础上的扩展,也就是说除了自动化编译、自动化测试,为了尽快上线我们还需要自动化发布流程,整个流程实现后,根据实际需要,可以周期性的进行产品上线发布,上线方式为人工点击部署实现快速上线。部署环境的先后部署顺序,一般在公司都是开发环境、测试环境、预发布环境(类生产环境)和正式生产环境,如果代码在预发布环境测试通过,那么就可通过手动的方式部署生产环境实现上线的目的。

持续交付的核心意义:尽快的将最终的产品发布到线上环境,给用户使用。持续交付是每个企业追求的目标,我们常说的CI/CD里的CD一般指的就是持续交付。

持续部署

(Continuous Deployment):

持续部署就是在持续交付的基础上,将编译、测试、打包部署到生产环境的过程做成自动化。

持续部署的核心意义:持续的将迭代的需求自动化的方式部署到生产环境。一般来说,非生产环境的持续部署基本都能实现。但生产环境的持续部署并不是每个企业都能做到,主要原因是受限于各种系统功能依赖、自动化测试不完善等因素,自动化一旦部署到生产,将可能造成严重生产事故。

image.png

说明:无论是持续集成、持续交付还是持续部署,如果要实现整个流程,基本上离不开CI服务器。

持续集成
特点
  • 快速定位错误,测试环节可以及时暴露问题;
  • 避免大幅度偏离主干,借助统一的代码库;
  • 减少不必要的成本投入,可以自动化解决重复乏味的事情,节省人力和时间;
工作流程

image.png

工作阶段

持续集成工作流程大体包括这么几个阶段:

  • 初始化CI流程

    基本的CI流程的配置,比如脚本、定时任务等。

  • 拉取最新代码

    从源码仓库拉取最新代码到构建服务器磁盘上。

  • 构建

    一般源码仓库自包含构建,可通过配置的脚本触发执行构建。比如Java的构建一般基于Maven或Gradle。

  • 执行测试

    测试阶段一般包含单元测试和集成测试。Java中的单元测试常指JUnit。

  • 结果处理

    CI流程执行的最后结果要么是成功,要么是失败,结果需要通知给对应的人员,一般的通知方式有邮件、钉钉、短信。

集成工具
  • Travis CI
  • Bamboo
  • TeamCity
  • CircleCI
  • Gitlab CI
  • Jenkins
DevOps
概念

DevOps这个词,其实就是Development(开发)和Operation(运维)两个词的组合。

DevOps 不是一项技术,也不是一套流程和方法论,更不是一套简单的工具产品。DevOps的维基百科定义是这样的:DevOps是一组过程、方法与系统的统称,用于促进开发、技术运营(运维)和质量保证(QA)部门之间的沟通、协作与整合。

通过实践 DevOps,可以将开发、测试、运维之间的工作串联起来,以持续构建、自动化测试、持续发布为目标,将所有流程全部自动化,最大化减少重复性的人力投入。同时,基础环境的自动化构建也降低了由于人的原因带来的意外风险。下图为DevOps所包含的流程:

image.png

DevOps 这个词是Patrick Debois 于2009 年创造的。出生于比利时的Patrick 先生曾经是一名苦闷的IT 咨询师,饱受开发和运维相互割裂及伤害之苦。2009 年他参加了一个技术大会,在会上听了名为10+ Deploys Per Day: Dev and Ops Cooperation at Flickr 的演讲,深受启发,并创造了DevOps 这个词。

目前,DevOps处于高速增长的阶段。尤其是在大企业中,DevOps受到了广泛的欢迎。越大的企业,越喜欢DevOps。包括Adobe、Amazon、Apple、Airbnb、Ebay、Etsy、Facebook、LinkedIn、Netflix、NASA、Starbucks、Walmart、Sony等公司,都在采用DevOps。

工具链

由于DevOps是一种跨职能的工作模式,因此实践过程需要使用不同的工具集(被称为 "工具链"),而不是单一的工具集。这些工具链应该符合以下一个或多个类别,这些类别反映了开发和交付过程中的关键环节:

  • 编码---代码开发和审查、源代码管理工具、代码合并
  • 构建---持续集成工具,构建状态
  • 测试---持续测试工具,提供快速、及时的业务风险反馈
  • 发布---变更管理、发布审批、发布自动化
  • 配置---基础设施配置和管理,基础设施作为代码工具的基础设施
  • 监控---应用性能监控、终端用户体验

DevOps生态圈工具链图:

image.png

常用工具

DevOps 需要要通过技术工具链完成持续集成、持续交付、用户反馈和系统优化的整合。工具链包括版本控制&协作开发工具、自动化构建和测试工具、持续集成&交付工具、部署工具、维护工具、监控,警告&分析工具等等。

  • 版本控制&协作开发:GitHub、GitLab、BitBucket、SubVersion、Coding、Bazaar
  • 自动化构建和测试:Apache Ant、Maven 、Selenium、PyUnit、QUnit、JMeter、Gradle、PHPUnit
  • 持续集成&交付:Jenkins、Capistrano、BuildBot、Fabric、Tinderbox、Travis CI、flow.ci Continuum、LuntBuild、CruiseControl、Integrity、Gump、Go
  • 容器平台:Docker、Rocket、Ubuntu(LXC)、第三方厂商如(AWS/阿里云)
  • 配置管理:Chef、Puppet、CFengine、Bash、Rudder、Powershell、RunDeck、Saltstack、Ansible
  • 微服务平台:OpenShift、Cloud Foundry、Kubernetes、Mesosphere
  • 服务开通:Puppet、Docker Swarm、Vagrant、Powershell、OpenStack Heat
  • 日志管理:Logstash、CollectD、StatsD
  • 监控,警告&分析:Nagios、Ganglia、Sensu、zabbix、ICINGA、Graphite、Kiban
DevOps的目标
  • 更快的上市时间
  • 提高部署频率
  • 更短的修复时间
  • 降低发布失败率
  • 更快的平均恢复时间

总结来说DevOps的目标是最大限度地提高运营流程的可预测性、效率、安全性和可维护性。

小结
两者关系
  • 由DevOps的流程和工具链我们可以得知,DevOps 是持续集成思想的延伸
  • 持续集成/部署是 DevOps 的技术核心,在没有自动化测试、持续集成/部署之下,DevOps就是空中楼阁。

jenkins环境搭建

Jenkins介绍
背景

Jenkins,之前叫做Hudson,由SUN公司启动,2010年oracle收购SUN导致hudson商标归oracle保留,hudson的主要贡献者基于hudson 更名为jenkins并持续更新。很长一段时间内Jenkins和Hudson继续作为两个独立的项目,每个都认为对方是自己的分支。目前Hudson已经停止开发,最新的版本发布于2016年,而Jenkins的社区和开发却异常活跃。Jenkins是目前市场上使用最多的CI/CD工具。

  • Jenkins是基于Java开发的一种持续集成工具。
  • Jenkins作为持续集成工具,持续集成是其核心功能,在核心功能基础之上可扩展实现强大的CD功能。
特点
  • 开源免费
  • 易于安装(基本上算是所有CI工具里安装配置最简单的)
  • 多平台支持(windows/linux/macos)
  • 主从分布式架构
  • 提供web可视化配置管理页面
  • 安装配置简单
  • 插件资源丰富
应用场景
  • 集成svn/git客户端实现源代码下载检出
  • 集成maven/ant/gradle/npm等构建工具实现源码编译打包单元测试
  • 集成sonarqube对源代码进行质量检查(坏味道、复杂度、新增bug等)
  • 集成SaltStack/Ansible实现自动化部署发布
  • 集成Jmeter/Soar/Kubernetes/…..
  • 可以自定义插件或者脚本通过jenkins传参运行
  • 可以说Jenkins比较灵活,插件资源丰富,日常运维工作都可以自动化
版本
  • Jenkins 1.x:不支持pipeline
  • Jenkins 2.x:支持pipeline(主流)
  • Jenkins X:基于k8s的持续集成(趋势)
主从集群

jenkins支持主从模式,这将会把构建任务分发到多个从节点去执行,这样就可以支撑起多个项目的大量构建任务,提升构建效率。同时,你可以提供多种环境(如:开发环境、生产环境)来对同一个项目进行测试和构建。

部署方式
  • 服务器直接运行war
  • 服务器通过 yum命令下载jenkins安装包进行安装运行
  • docker容器运行

本课程采用第一种方式,服务器直接运行war,因为它更符合我们的启动习惯。

环境说明
  • centos7
  • jdk1.8
  • maven3.x.x
  • git1.8.3
  • jenkins最新版本:mirrors.jenkins-ci.org/war/latest/
  • Master主机 : 假设主机名叫 linux30
  • Slave从机 : 假设主机名叫 linux31
安装Master

登录master服务器

环境准备

root用户执行命令

安装JDK

将压缩包上传到/opt目录下,进行解压

# 配置Java环境变量
[root@linux30 opt]# vi /etc/profile


# java环境变量
export JAVA_HOME=/opt/jdk1.8.0_301
export JRE_HOME=/opt/jdk1.8.0_301/jre


export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin


# 使用source命令,使其生效
[root@linux30 opt]# source /etc/profile


# 验证安装成功
[root@linux30 opt]# java -version
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)
[root@linux30 opt]# javac -version
javac 1.8.0_301

安装git

[root@linux30 opt]# yum install -y git


# 验证是否安装成功
[root@linux30 opt]# git --version
git version 1.8.3.1
安装sshpass

远程连接工具

[root@linux30 opt]# yum install sshpass -y

后续备份恢复会使用

安装wget
[root@linux30 opt]# yum install wget -y
安装axel(可选)

多线程下载工具

[root@linux30 opt]# wget http://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/a/axel-2.4-9.el7.x86_64.rpm 
[root@linux30 opt]# rpm -ivh axel-2.4-9.el7.x86_64.rpm
创建jenkins用户
# 创建jenkins用户
[root@linux30 opt]# useradd -d /home/jenkins -m -s /bin/bash jenkins


# 设置密码为12345678
[root@linux30 opt]# passwd jenkins
更改用户 jenkins 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
下载安装maven

maven下载页面:maven.apache.org/download.cg…

  1. 上传压缩包,解压到/opt目录下

# 配置maven环境变量
[root@linux30 opt]# vi /etc/profile


# java环境变量
export JAVA_HOME=/opt/jdk1.8.0_301
export JRE_HOME=/opt/jdk1.8.0_301/jre
# maven环境变量
export MAVEN_HOME=/opt/apache-maven-3.8.5
# path环境变量设置
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin


# 执行source命令,使其生效
[root@linux30 opt]# source /etc/profile


# 验证是否安装成功
[root@linux30 opt]# mvn -v
Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)
Maven home: /opt/apache-maven-3.8.5
Java version: 1.8.0_301, vendor: Oracle Corporation, runtime: /opt/jdk1.8.0_301/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.62.1.el7.x86_64", arch: "amd64", family: "unix"

配置镜像加速

maven下的 conf/settings.xml 找到和标签,在其中添加如下内容(镜像加速):

[root@linux30 opt]# vi /opt/apache-maven-3.8.5/conf/settings.xml


    <!-- 配置镜像加速 -->
    <mirror>
     <id>alimaven</id>
     <name>alimaven</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
     <mirrorOf>central</mirrorOf>
    </mirror>

注意,注意,注意:如果配置本地仓库的地址,譬如:/usr/local/maven/repository, 一定要赋予该目录其他用户可读写的权限

安装rsync(可选)

跨机器文件同步工具

[root@linux30 opt]# yum install rsync -y
关闭防火墙
[root@linux30 opt]# systemctl stop firewalld
# 永久关闭防火墙
[root@linux30 opt]# systemctl disable firewalld
安装Jenkins
创建安装目录

进入该目录后下载jenkins

# 创建jenkins安装目录
[root@linux30 opt]# mkdir /opt/jenkins


# 该目录为jenkins用户授权
[root@linux30 opt]# chown -R jenkins:jenkins /opt/jenkins


# 切换jenkins用户
[root@linux30 opt]# su jenkins
下载Jenkins

下载jenkins安装包,

下载页:www.jenkins.io/download/

各版本war索引页:mirrors.jenkins-ci.org/war/

  1. 最新版本安装下载

    # 下载最新版 [jenkins@linux30 jenkins]$ axel -n 20 http://mirrors.jenkins-ci.org/war/latest/jenkins.war

指定版本下载

# 指定版本
[jenkins@linux30 jenkins]$ axel -n 20 http://mirrors.jenkins-ci.org/war/2.345/jenkins.war
[jenkins@linux30 jenkins]$ ll
总用量 89220
-rw-rw-r-- 1 jenkins jenkins 91354985 4月  28 10:34 jenkins.war

下载不成功若报错:Too many redirects

使用如下方式下载,版本选择 > 2.340

[jenkins@linux30 jenkins]$ wget https://mirrors.jenkins-ci.org/war/2.355/jenkins.war --no-check-certificate
编辑启动脚本

登录jenkins用户后创建启动脚本

# 创建jenkins启动脚本 [jenkins@linux30 jenkins]$ vi jenkins.sh

脚本具体内容如下

#!/bin/bash
args=$1
#注意修改jenkinswar包的目录
jenkins_war_path="/opt/jenkins"
#jenkins开放端口
jenkins_http_port="8888"
#java安装路径
java_home="/opt/jdk1.8.0_301"
function isRuning(){
        local jenkinsPID=`ps -ef|grep jenkins.war|grep -v grep|awk '{print $2}'`
        if [ -z ${jenkinsPID} ];then
                echo "0"
        else
                echo ${jenkinsPID}
        fi
}


#停止jenkins
function stop(){
        local runFlag=$(isRuning)
        if [ ${runFlag} -eq "0" ];then
                echo "Jenkins is already stoped."
        else
                `kill -9 ${runFlag}`
                echo "Stop jenkins success."
        fi
}


#启动jenkins
function start(){
        local runFlag=$(isRuning)
        echo "${runFlag}"
        if [ ${runFlag} -eq "0" ];then
                `${java_home}/bin/java -jar ${jenkins_war_path}/jenkins.war --httpPort=${jenkins_http_port} &` > /dev/null
                if [ $? -eq 0 ];then


                        echo "Start jenkins success."
                        exit
                else
                        echo "Start jenkins fail."
                fi
        else
                echo  "Jenkins is running now."
        fi
}


#重启jenkins
function restart(){
        local runFlag=$(isRuning)
        if [ ${runFlag} -eq "0" ];then
                echo "Jenkins is already stoped."
                exit
        else
                stop
                start
                echo "Restart jenkins success."
        fi
}


#根据输入的参数执行不同的动作
#参数不能为空
if [ -z ${args} ];then
        echo "Arg can not be null."
        exit
#参数个数必须为1个
elif [ $# -ne 1 ];then
        echo "Only one arg is required:start|stop|restart"
#参数为start时启动jenkins
elif  [ ${args} = "start" ];then
        start
#参数为stop时停止jenkins
elif [ ${args} = "stop" ];then
        stop
#参数为restart时重启jenkins
elif [ ${args} = "restart" ];then
        restart
else
        echo "One of following args is required: start|stop|restart"
        exit 0
fi

启动jenkins

[jenkins@linux30 jenkins]$ sh jenkins.sh start

镜像加速

jenkins默认镜像地址:updates.jenkins.io/update-cent…

镜像地址列表

常见的jenkins镜像地址有以下地址

镜像名镜像地址
清华大学mirrors.tuna.tsinghua.edu.cn/jenkins/upd…
华为mirrors.huaweicloud.com/jenkins/upd…
xmissionmirror.xmission.com/jenkins/upd…

也可参见官方网站提供的可用镜像地址:mirrors.jenkins-ci.org/status.html

配置加速

修改jenkins配置(插件站点更新,加速联网)

[jenkins@linux30 ~]$ vi /home/jenkins/.jenkins/hudson.model.UpdateCenter.xml

将XML内的url的值替换为:mirror.xmission.com/jenkins/upd…

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>http://mirror.xmission.com/jenkins/updates/update-center.json</url>
  </site>
</sites>

image.png

也可进入到web-ui界面的Manage Jenkins->manage plugins->Advanced -> Update Site进行修改

image.png

访问Jenkins

浏览器访问jenkins,端口8888

http://192.168.10.30:8888/

获取管理员密码

登录后需要输入解锁密码才能够继续访问jenkins

通过如下命令可以从jenkins安装目录中获取管理员密码

[jenkins@linux30 ~]$ cat /home/jenkins/.jenkins/secrets/initialAdminPassword 2b10023d16a040729fa78b71d760a656

跳过插件安装

输入密码后点击继续,并跳过插件安装界面

进入jenkins主页

点击开始使用就会来到jenkins的主页面

image.png

修改管理员密码

修改管理员密码为123456,具体操作为点击页面左上角jenkins->people->admin->configure进行修改

image.png

点击save保存即可,回跳到登录页进行重新登录

image.png

安装插件

jenkins运行需要安装很多插件,下面我们介绍下如何安装插件,下面我们以Role-based Authorization Strategy插件为例介绍下如何安装插件

插件安装
  • 点击manage Jenkins-> manager Plugins 进入插件管理页面

  • 点击available进入可用的插件页面,搜索Role-based Authorization Strategy,点击下载后在重启

image.png

  • 进入下载插件界面,在该界面稍等就会出现下载完成信息

image.png

重启jenkins

这里我们使用手动重启jenkins,在jenkins用户下进行重启

如果有多个插件安装,可下载完所有插件后再重启

[jenkins@linux30 jenkins]$ sh jenkins.sh restart

验证插件安装成功

image.png

插件列表

本课程需要安装:ssh、Pipeline、Role-based Authorization Strategy、Git、Gitee、Git Parameter、thinBackup 鉴于课题下载速度比较慢,已提前安装完成

image.png

插件名作用
Pipeline流水线部署项目
Role-based Authorization Strategy提供了一种基于角色(Role)的用户权限管理策略,支持创建global角色、Project角色、Slave角色,以及给用户分配这些角色。这款插件是最常用的Jenkins权限策略和管理插件
Git支持使用Github、GitLab、Gerrit等系统管理代码仓库,创建普通job时会用到
GiteeGitee Jenkins Plugin 是Gitee基于 GitLab Plugin 开发的 Jenkins 插件。用于配置 Jenkins 触发器,接受Gitee平台发送的 WebHook 触发 Jenkins 进行自动化持续集成或持续部署,并可将构建状态反馈回Gitee平台。
Git Parameter可用于把git的tag branch当作构建参数传进来,方便使用branch构建
Extended Choice Parameter参数化构建
Maven Integration这个插件为Maven 2 / 3项目提供了高级集成功能
SonarQube Scanner代码扫描
Email Extension扩展了发送告警邮件的控制力度。可以定义邮件触发器、邮件内容、收件人
Workspace Cleanup每次build之前删除workspace目录下指定的文件
Monitoring监控Jenkins节点的CPU、系统负载、平均响应时间和内存使用
Build Monitor View将Jenkins项目以一块看板的形式呈现
ThinBackup备份与恢复
jacoco单元测试覆盖率
Generic Webhook Triggerwebohook

配置jenkins

上面我们已经完成了jenkins的插件安装以及访问,我们需要对jenkins做一些配置

前往 Jenkins -> Manage Jenkins -> Configure System 进入系统配置页面

image.png

配置码云地址

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 786229024,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值