python自动化(六)持续集成:2.Jenkins技术讲解

一.持续集成体系介绍

1.瀑布模型和敏捷模型

  • 瀑布模型:在之前我们项目的开发模式都是瀑布模式。项目生命周期按照需求分析>概要设计>详细设计>代码开发>测试>上线发布一步一步进行。这种模式文档完善,整个开发过程很严谨,相对比较可控。

  • 敏捷模式:敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
    python自动化(六)持续集成:2.Jenkins技术讲解_第1张图片

  • 敏捷开发导致代码提交频繁,也导致测试,部署频繁且周期更短。

2.持续集成出现背景

在这里插入图片描述
python自动化(六)持续集成:2.Jenkins技术讲解_第2张图片

3.持续集成流程

python自动化(六)持续集成:2.Jenkins技术讲解_第3张图片

4.CI,CD

  • CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时所引发的问题。
  • CI/CD 中的“CI”始终指持续集成,它属于开发人员的自动化流程。成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到共享存储库中。该解决方案可以解决在一次开发中有太多应用分支,从而导致相互冲突的问题。
  • CI/CD 中的“CD”指的是持续交付和/或持续部署,指的是自动将开发人员的更改从存储库发布到生产环境,以供客户使用。它主要为了解决因手动流程降低应用交付速度,从而使运维团队超负荷的问题。持续部署以持续交付的优势为根基,实现了管道后续阶段的自动化。

python自动化(六)持续集成:2.Jenkins技术讲解_第4张图片

5.持续集成工具

python自动化(六)持续集成:2.Jenkins技术讲解_第5张图片

推荐Jenkins

python自动化(六)持续集成:2.Jenkins技术讲解_第6张图片

二.jenkins搭建及配置

1.docker部署(推荐)

第一步:获取Jenkins镜像

docker pull jenkins/jenkins

第二步:启动Jenkins镜像创建容器

docker run -d --name=jenkins -p 8080:8080 -p5000:5000 -v /home/ouyi/jenkins:/var/jenkins_home jenkins/jenkins
# 8080端口是Jenkins对外提供服务的端口
# 5000端口是后续持续集成使用的端口

第三步:查看jenkins的Admin初始密码

方式一:查看日志
docker logs jenkins
方式二:查看初始密码文件
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword

python自动化(六)持续集成:2.Jenkins技术讲解_第7张图片

第四步:登录 http:docker宿主机ip:8080 访问Jenkins网站

2.手动部署

python自动化(六)持续集成:2.Jenkins技术讲解_第8张图片

3.配置Jenkins

python自动化(六)持续集成:2.Jenkins技术讲解_第9张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第10张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第11张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第12张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第13张图片

三.创建你的第一个job

python自动化(六)持续集成:2.Jenkins技术讲解_第14张图片

项目基本配置

包括任务名称,及任务风格

python自动化(六)持续集成:2.Jenkins技术讲解_第15张图片

General

General是构建任务的一些基本配置。名称,描述之类的
python自动化(六)持续集成:2.Jenkins技术讲解_第16张图片

源码管理

源码管理就是配置你代码的存放位置。Git支持主流的github 和gitlab代码仓库。
python自动化(六)持续集成:2.Jenkins技术讲解_第17张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第18张图片

构建触发器

构建触发器,顾名思义,就是构建任务的触发器。

在这里插入图片描述

构建环境

构建环境就是构建之前的一些准备工作,如指定构建工具。

python自动化(六)持续集成:2.Jenkins技术讲解_第19张图片

构建

构建时要执行的命令,可以使用shell,python等等
python自动化(六)持续集成:2.Jenkins技术讲解_第20张图片

构建后操作

​ 构建后操作,就是对project构建完成后的一些后续操作,比如生成相应的代码测试报告。

python自动化(六)持续集成:2.Jenkins技术讲解_第21张图片

任务创建完成

python自动化(六)持续集成:2.Jenkins技术讲解_第22张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第23张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第24张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第25张图片
这里我们只是演示一个demo,对于具体的参数配置,在后面详细讲解

四.Jenkins其他常用操作及配置

1.安装插件

Jenkins支持多种插件,可以自己安装插件来达到我们的需要

python自动化(六)持续集成:2.Jenkins技术讲解_第26张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第27张图片

2.Jenkins常见的插件介绍

  • 常用插件

BitKeeper Plugin — 为Jenkins添加BitKeeper(Linux 内核开发人员在全球使用的主要源代码工具)支持。

Visual SourceSafe Plugin — 该插件集成微软的VSS到Jenkins。

Git Plugin — 该插件允许使用GIT作为一个构建SCM(源代码控制管理系统),但必须使用Git 1.3.3及以上。

Team Foundation Server Plugin — 该插件集成了 MicrosoftTeam Foundation Server源码控制到Jenkins中。

CMVC Plugin — 该插件集成CMVC(IBM和许多跨国公司的缺陷管理工具。)到Jenkins。

File System SCM — Use File System as SCM.使用文件系统作为SCM。

StarTeam — 该插件把StarTeam(Starteam 是一个集合了版本控制和缺陷控制两种功能的软件,并且具有 CVS 没有的强大的图形界面,易学易用。2002年底被Borland公司收购。)和Jenkins集成在一起。

Subversion Plugin — 该插件增加Jenkins对svn(通过SVNKit)的支持。

Accurev Plugin — 该插件允许您在Jenkins中使用 AccuRev作为SCM。

Template Project Plugin — 该插件可以让您使用另一个项目中的构建人、发布人和SCM设置。

URL SCM — 该插件允许您使用URLs作为SCM。

Bazaar Plugin — 该插件集成Bazaar到 Jenkins,该插件需要确保Bazaar 库(bzr)已安装到目标机器上。

PVCS SCM — 该插件集成了Serena提供的PVCS SCM。

Mercurial Plugin — 该插件集成Mercurial version control system到Jenkins中。

Perforce Plugin — 该插件集成Perforce到Jenkins中。

Synergy Plugin — 该插件把CM/Synergy版本管理系统集成在Jenkins。

Dimensions — 该插件集成Dimensions SCM到Jenkins中。

ClearCase Plugin — 把ClearCase(IBM提供的版本控制系统)集成到Jenkins。

  • 跟SCM有关联的其它插件:

SVNCompat14 Plugin — 该插件强制内置SVNKit库使用Subversion 1.4工作拷贝格式(替代它最近支持的svn版本。)

Subversion Tagging Plugin —该插件在成功的构建中执行svn标签(也就是使用 svn copy)。

CVS Tagging Plugin — 该插件将在一个作业构建成功后执行cvs标签(也就是cvs rtag)。

  • 构建触发

Ivy Plugin — 该插件通过配置Apache Ivy自动化地配置一次构建并触发其有构建依赖的其他构建。

Join Plugin — 该插件允许一个作业在所有它下游的作业结束以后才开始运行它本身。

Log-Action plugin — 该插件在作业输出中按选定模式开始一系列动作,但这是一个统一的配置。

URL Change Trigger — 该网址变更触发器插件允许您当网址的内容发生变更时Jenkins触发一次构建。

Locks and Latches plugin —该插件允许你管理作业的并发执行。

IRC Plugin — 该插件在您选择的IRC 频道中安装Jenkins IRC 机器人,您可以通过IRC获得通知,并通过IRC与Jenkins互动。

Downstream-Ext Plugin — 该插件为下游触发器支持扩展配置。当前它增加一个选项,如果它们发生SCM改变时,仅仅触发下游的构建。

Jabber Plugin — 把Jabber即时消息协议集成在Jenkins中。注意您也需要安装instant-messaging 插件。

Naginator Plugin — 该插件允许您在一次构建失败后自动重建一次构建。

  • 构建工具
    Jenkins本身支持Maven、Ant、Shell脚本和Windows批处理命令。

Grails Plugin — 该插件允许Jenkins调用Grails 任务作为一个构建步骤。

PowerShell Plugin — 在Jenkins中集成Windows PowerShell。

Jython Plugin — 在JVM中增加执行Jython脚本的能力。

Post build task — 该插件允许用户依据构建日志的输出执行一个shell/批处理任务。

Ruby Plugin — 该插件允许用户在构建脚本中使用Ruby。

Gant Plugin — 该插件允许Jenkins调用Gant构建脚本作为主体构建的一个步骤。

Seleniumhq Plugin — 该插件允许您从Seleniumhq中运行和加载通过Selenium服务器生成的HTML Selenese套件结果。Jenkins将以此生成测试结果的趋势报告。

Groovy plugin — 该插件允许Jenkins直接执行Groovy代码。

Rake plugin — 该插件允许Jenkins调用Rake任务作为构建步骤。

NAnt Plugin — 该插件允许你在Jenkins中使用NAnt构建.NET项目。

Template Project Plugin — 该插件可以让您在Jenkins中使用另一个项目中的构建人、发布人和SCM设置。

Buckminster PlugIn — 该插件把Eclipse Buckminster做为一个新的构建步骤集成在Jenkins中。

Python Plugin — 添加执行Python脚本作为Jenkins的构建步骤。

SCons Plugin — 该插件允许Jenkins调用SCons构建脚本作为主体构建的步骤。

Selenium AES Plugin — 该插件能让Jenkins调用Selenium Auto Exec Server(AES) 来测试。

Kundo Plugin — 该插件允许你调用Kundo构建作为一个Jenkins构建步骤。

Gradle Plugin — 该插件允许Jenkins调用Gradle构建脚本作为主体构建的步骤。

EasyAnt Plugin — 该插件允许Jenkins调用EasyAnt构建脚本作为主体构建的步骤。.

RAD Builder Plugin — 该插件允许你调用IBM RAD7.0/7.5作为一个Jenkins构建步骤。

Phing Plugin — 该插件允许你在Jenkins中使用Phing构建PHP项目。

SCTMExecutor — 该插件允许您在Jenkins中使用Borland 的SilkCentral Test Manager 2008 R2 及以上版本。

MSBuild Plugin — 该插件允许您在Jenkins中使用MSBuild构建.NET项目。

Batch Task Plugin — 该插件增加一些不规律执行的批处理任务到项目中,诸如打包、集成、归档等等。

  • 构建封装

Xvnc Plugin — 该插件可以让您在一次构建时运行Xvnc会话。如果您的构建包括用户界面测试时需要一个可暴露的显示值这就非常方便。

ZenTimestamp Plugin — 该插件允许您在Jenkins BUILD_ID变量中自定义日期和时间模式。

VMware plugin — 该插件允许您在一次构建开始前启动VMware虚拟机,构建完成后又停止该虚拟机。

Build Secret Plugin — 让你通过一次构建上传可用的秘密文件。

M2 Release Plugin —这是一个能让您在Jenkins中使用maven-release-plugin 来执行发布功能的插件。

M2 Extra Steps Plugin — 该插件为Jenkins加入pre- 和post- 构建步骤到Maven 2类型的项目的能力。

Template Project Plugin — 该插件可以让您使用另一个项目中的构建人、发布人和SCM设置。

Locks and Latches plugin — 该插件允许您控制作业的并发执行。

Jenkins Distributed Workspace Clean plugin —该插件允许您在同一个隶属组中未使用的隶属机器来清理工作区。

Release Plugin — 该插件允许您在当一次发布构建是手动触发时,配置预前构建或后构建的执行动作。

Copy To Slave Plugin — This plugin allows to copy, to slave nodes running a job, a set of files that are required for the good execution of the job.

Setenv Plugin — 为一个项目设置环境变量,以备构建步骤引用。

  • 构建通知
    Jenkins本身支持电子邮件通知,但也有一个可扩展的电子邮件插件来支持扩展功能。

Status Monitor Plugin — 该插件能让您在Jenkins单独的屏幕上直观地显示您选定作业的状态。.

SameTime Plugin — 该插件允许您在Jenkins中使用SameTime作为构建通知。

Nabaztag Plugin — 该插件允许您在Jenkins中发布一次构建的结果到Nabaztag。

Google Calendar Plugin — 该插件允许Jenkins发布当前作业状态到谷歌日历。

JenkinsTracker — A cross-platform application that sits in your system tray and monitors Jenkins builds via its RSS feeds. See JenkinsTracker for more details. No Jenkins server config required!

TuxDroid Plugin — 该插件允许您在Jenkins发布一个构建的结果到TuxDroid(Tux Droid是一个强大的Linux玩具,它可以通过配套的软件与你电脑中的很多应用程序相关联)。

IRC Plugin — 该插件在您选择的IRC 频道中安装Jenkins IRC 机器人,您可以通过IRC获得通知,并通过IRC与Jenkins互动。

Email-ext plugin — This plugin allows you to configure every aspect of email notifications. You can customize when an email is sent, who should receive it, and what the email says.

Instant Messaging Plugin — This plugin provides generic support for IM notifications. This plugin itself is of no use. Please use one of the derived plugins like (at the moment only) Jabber !

Blame Upstream Commiters Plugin — This is a very simple plugin that adds a post build action to mail upstream commiters when a build fails.

Campfire Plugin — This plugin allows your team to setup build notifications to be sent to Campfire rooms.

The new EMailer — Merge of the Core EMailer and email-ext plugin

Twitter Plugin — This plugin posts build results to Twitter.该插件支持Jenkins发送构建报告到Twitter。

Jabber Plugin — 把Jabber即时消息协议集成在Jenkins中。注意您也需要把安装 instant-messaging plugin 。

  • 隶属(机器)激活和控制
    Jenkins本身支持通过JNLP或者命令启动隶属,以及支持尽可能保持隶属连接,或者按需连接。

SSH Slaves plugin — 该插件允许您在SSH外的隶属* nix机器上运行和管理Jenkins。

  • 构建报告
    Jenkins本身支持Junit报告和JavaDoc。

Serenitec Plugin — 在您的项目中执行Serenitec重构方案。

Violations — 该插件为checkstyle、 pmd、 cpd、 findbugs、 fxcop、 stylecop和simian等静态代码分析工具生成报告。

NUnit Plugin — 该插件允许你发布NUnit测试结果。

WebTest Presenter Plugin — This plugin publishes the reports generated by the Canoo WebTest tool for each build.

MSTest Plugin — 该插件允许您发布MSTest的测试结果。

Crap4J Plugin — This plugin reads the “crappy methods” report from Crap4J. Jenkins will generate the trend report of crap percentage and provide detailed information about changes.

FindBugs Plugin — 该插件主要收集项目模块中FindBugs(静态分析源代码中可能会出现的Bug的Eclipse插件工具)的分析结果,并以视图的方式呈现已发现的警告。

Seleniumhq Plugin — 该插件允许您从Seleniumhq中运行和加载通过Selenium服务器生成的HTML Selenese套件结果。Jenkins将以此生成测试结果的趋势报告。

Cppcheck Plugin — 该插件为CppCheck(静态的C/C++ 代码分析工具)生成趋势报告。

NCover Plugin — 该插件允许Jenkins从NCover中归档和发布.NET代码覆盖率的HTML 报告。

JDepend Plugin— 该JDepend插件是一个为构建生成JDepend 报告的插件。

Plot Plugin — 该插件为Jenkins提供通用的测绘(或图表)的能力。

Checkstyle Plugin — 该插件主要收集项目模块中Checkstyle (自动化代码检查工具)的分析结果,并以视图的方式呈现已发现的警告。

JavaNCSS+Plugin — 该插件允许您使用JavaNCSS构建报告工具。

SLOCCount Plugin — 该插件能为SLOCCount生成趋势报告,它是一个开源程序,能为超过25种不同的语言统计代码行的数量,包括C/C++、Ada、COBOL、 Fortran、SQL、 Ruby、 Python等等。

JavaTest Report Plugin — 该插件把JavaTest(一个通过Sun公司发布的TCK应用的 框架)中解析成XML结果文件,并以此方式显示它们。

Emma Plugin — 该插件在Jenkins中集成EMMA code coverage reports (检测和报告 JAVA 代码覆盖率的开源工具)。Jenkins will generate the trend report of coverage.

Warnings Plugin — This plugin generates the trend report for compiler warnings in the console log or in log files.

Gallio Plugin — 该插件允许您发布Gallio/MbUnit的测试结果。

Doxygen Plugin —该插件可发布通过Doxygen工具生成的报告。

Testability Explorer Plugin —该插件为Testability Explorer生成趋势报告,这是一个能使用字节码分析以在Java代码中寻找可测性缺陷的开放源码程序。

DRY Plugin — 该插件为像 CPD那样的重复代码检查器生成趋势报告。

Japex Plugin — 该插件为Jenkins 增加了Japex 支持,以使Jenkins 能够显示其趋势报告和其他有用的数据。

PMD Plugin — 该插件主要收集项目模块中PMD(程序代码检查工具)的分析结果,并以视图的方式呈现已发现的警告。

Selenium AES Plugin — 该插件调用Selenium Auto Exec Server(AES) 来测试。

Task Scanner Plugin — 该插件为开放任务扫描工作区文件,并生成一个趋势报告。

PureCoverage plugin — PureCoverage plugin reports coverage results from Rational PureCoverage tool (c++ coverage tool).

Gnat Plugin — 该插件允许Jenkins集成Gnat的功能来作为ADA(Ada是一种表现能力很强的通用程序设计语言,它是美国国防部为克服软件开发危机,耗费巨资,历时近20年研制成功的。)语言。

Grinder Plugin — 该插件从Grinder 执行测试中读取输出结果,并生成报告,其中包括显示每次构建的测试结果和对应的构建显示执行结果的趋势报告。

JSUnit plugin — This plugin allows you publish JSUnit test results

Cpptest Plugin — This plugin allows you publish Parasoft C++test test results.

Clover Plugin — 该插件是在Jenkins中集成 Clover code coverage reports(代码覆盖测试分析工具)。Jenkins will generate and track code coverage across time. This plugin can be used without the need to modify your build.xml.

Cobertura Plugin — 该插件允许您从Cobertura中获取代码覆盖率报告。Jenkins将生成覆盖率趋势报告。

eXtreme Feedback Panel Plugin — This plugin provides an eXtreme Feedback Panel that can be used to expose the status of a selected number of Jobs.

CppUnit Plugin — 该插件允许您发布CppUnit测试结果。

Ruby metrics plugin — 该插件添加Ruby统计报告( Rcov, Saikuro, Rails stats…)的捆绑包到Jenkins中。

  • 构件上传

SCP plugin — 该插件允许你使用SFTP (SSH)协议上传一些构件到仓库站点。

FTP-Publisher Plugin — 该插件能上传项目构件和整个目录到一个FTP服务器。

SFEE Plugin — 依赖于Collabnet Source Forge Enterprise Edition (SFEE是SourceForge发布的项目协作管理软件) 服务器验证用户并发布构件。

java.net uploader Plugin — 该插件使用java.net 任务库,以使Jenkins有能力发送构件到 java.net。

SVN Publisher — This plugin allows you to upload artifacts to a subversion repository. This is done via a delete/import of the items requested.

  • 其他构建后操作
    Parameterized Trigger Plugin — 该插件可以让你在构建完成后触发新的构建,并为这次新构建使用不同的方式指定一些参数。

Build Publisher Plugin — 该插件允许您把一个Jenkins的记录发布到另一个Jenkins中。

Post build task — 该插件允许用户依据构建日志的输出执行一个shell/批处理任务。Java regular expression are allowed.

Description Setter Plugin — 该插件为每次构建设置描述信息,它是一个基于正则表达式校验的构建日志文件。

Deploy Plugin — This plugin takes a war/ear file and deploys that to a running remote application server at the end of a build

DocLinks Plugin — 该插件允许您发布在构建步骤中创建的文档。

Subversion Tagging Plugin — This plugin performs subversion tagging (technically speaking svn copy) on successful build.

CVS Tagging Plugin — 该插件将在一个作业构建成功后执行cvs标签(也就是cvs rtag)。

CopyArchiver Plugin — 该插件的目标是从几个作业中把已归档的构件集中到一个共享目录。每个作业中只有最后一次成功构建的归档构件才会被复制。

Text-finder Plugin — 该插件是用来在工作区文件中搜索字符串。这个搜索结果可以用来标记该构建是正常或者失败。

3.设置Jenkins时区

Jenkins默认使用美国时区,我们需要更改为中国上海时区。

第一步:删除原有的Jenkins容器

docker rm jenkins

第二步:重新创建Jenkins容器,并同时指定时区

docker run -d --name=jenkins -p 8080:8080 -p50000:50000 -v /home/ouyi/jenkins:/var/jenkins_home -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai jenkins/jenkins
# -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai 指定使用亚洲上海时区

五.节点管理

python自动化(六)持续集成:2.Jenkins技术讲解_第28张图片

  • 子节点可以是Linux,Windows,mac
  • 子节点上需要配置Java运行环境

1.使用web代理方式创建子节点

python自动化(六)持续集成:2.Jenkins技术讲解_第29张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第30张图片
在这里插入图片描述
python自动化(六)持续集成:2.Jenkins技术讲解_第31张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第32张图片

启动子节点服务器

方式1
在这里插入图片描述
python自动化(六)持续集成:2.Jenkins技术讲解_第33张图片

在子节点下,双击运行.jnlp文件

方式2
python自动化(六)持续集成:2.Jenkins技术讲解_第34张图片

在子节点执行以下命令:
python自动化(六)持续集成:2.Jenkins技术讲解_第35张图片

可以看到子节点启动成功了

在这里插入图片描述

2.使用ssh代理的方式创建子节点(推荐)

前面我们讲解的是使用Java web的方式来建立节点和Jenkins的通信。这种方式不太方便,我们更多的是使用ssh的方式来连接。

我们先在Jenkins中添加子节点的用户名和密码,作为连接凭证

python自动化(六)持续集成:2.Jenkins技术讲解_第36张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第37张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第38张图片

使用ssh的方式创建节点

python自动化(六)持续集成:2.Jenkins技术讲解_第39张图片

3.使用子节点执行任务

python自动化(六)持续集成:2.Jenkins技术讲解_第40张图片

4.常见问题

节点创建好,启动节点时可能会报错,不能找到/usr/local/bin/java

在这里插入图片描述

这是因为Jenkins连接节点需要jdk,且默认认为节点的jdk目录为/usr/local/bin/java。所以我们需要检查一下节点中java的路径,并关联到/usr/local/bin/java

which java
ln -s 实际Java路径 /usr/local/bin/java

六.Jenkins权限管理

1.用户管理

Jenkins在初始化时,会有一个admin用户。后续也可以自己添加用户

第一步:设置用户数据库
python自动化(六)持续集成:2.Jenkins技术讲解_第41张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第42张图片

第二步:新增用户
python自动化(六)持续集成:2.Jenkins技术讲解_第43张图片

2.用户权限管理

python自动化(六)持续集成:2.Jenkins技术讲解_第44张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第45张图片

七.Jenkins邮件报警机制

1.下载相关插件

  • 下载Email Extension 和Email Extension Template

这两个插件是方便用户设置格式化邮件

2.系统设置邮件配置

2.1 设置jenkins地址和管理员邮箱地址

python自动化(六)持续集成:2.Jenkins技术讲解_第46张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第47张图片

2.2 设置发件人信息

python自动化(六)持续集成:2.Jenkins技术讲解_第48张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第49张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第50张图片

补充:qq邮箱获取授权码操作

python自动化(六)持续集成:2.Jenkins技术讲解_第51张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第52张图片

2.3 配置构建后发送邮件

python自动化(六)持续集成:2.Jenkins技术讲解_第53张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第54张图片

这样我们就完成了最基本的邮件发送配置,但是这种方式并不灵活,所以我们会使用邮件模板配置的方式来构建邮件发送

3.邮件模板配置方式

扩展邮件功能有两种方式:

  1. 自定义邮件模板
  2. 使用Jenkins内置模板

3.1 自定义邮件模板

  1. 先完成HTML模板文件

<html>
<head>
    <meta charset="UTF-8">
    <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志title>
head>

<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
      offset="0">
<table width="95%" cellpadding="0" cellspacing="0"
       style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
    <tr>
        <td>
            <h2>
                <b>来自Jenkins的邮件通知b>
            h2>
        td>
    tr>
    <tr>
        <td>
            <br/>
            <b style="color:#0B610B;">构建信息:b>
            <hr size="2" width="100%" align="center"/>
        td>
    tr>
    <tr>
        <td>
            <ul>
                <li>项目名称  ${PROJECT_NAME}li>
                <li>触发原因 :${CAUSE}li>
                <li>构建日志  <a href="${BUILD_URL}console">${BUILD_URL}consolea>li>
                <li>单元测试报告 <a href="${BUILD_URL}allure/">${BUILD_URL}allureReport/a>li>
                <li>工作目录  <a href="${PROJECT_URL}">${PROJECT_URL}a>li>
                <li>测试报告下载  <a href="${PROJECT_URL}">${PROJECT_URL}lastSuccessfulBuild/artifact/allure-report.zipa>li>
            ul>
        td>
    tr>
    <tr>
        <td><b style="color:#0B610B;">构建日志:b>
            <hr size="2" width="100%" align="center"/>
        td>
    tr>
    <tr>
        <td><textarea cols="80" rows="30" readonly="readonly"
                      style="font-family: Courier New;width: 500px;max-width: 1000px;">${BUILD_LOG}textarea>
        td>
    tr>
table>
body>
html>

python自动化(六)持续集成:2.Jenkins技术讲解_第55张图片

  1. 配置系统管理员邮件地址
    python自动化(六)持续集成:2.Jenkins技术讲解_第56张图片
    python自动化(六)持续集成:2.Jenkins技术讲解_第57张图片

  2. 配置Extended E-mail Notification

img

  1. 现在在你的job中的配置中,构建后的操作中添加Editable Email Notification:

python自动化(六)持续集成:2.Jenkins技术讲解_第58张图片

python自动化(六)持续集成:2.Jenkins技术讲解_第59张图片

python自动化(六)持续集成:2.Jenkins技术讲解_第60张图片

python自动化(六)持续集成:2.Jenkins技术讲解_第61张图片

python自动化(六)持续集成:2.Jenkins技术讲解_第62张图片

八.Jenkins中配置git

我们在构建Jenkins任务时,可以使用git实现源码管理。及每一次运行任务都会从git上拉取我们的代码。git实现需要条件:

节点机上安装git并完成密钥配置

Jenkins上安装git插件并完成密钥配置

1.配置git密钥认证

要从git拉取代码,必须要跟git实现密钥认证。Jenkins中也是一样,我们如果想要执行Jenkins任务时,自动从git拉取代码。必须要满足一下条件:Jenkins与git实现认证,对应执行任务的节点机也需要与git实现认证。

(1)节点机配置git密钥

第一步:安装git

yum install -y git

第二步:配置密匙

  • 回到用户的主目录下,编辑文件.gitconfig

python自动化(六)持续集成:2.Jenkins技术讲解_第63张图片

  • 使用命令生成密钥
ssh-keygen -t rsa -C "[email protected]" 
# -C 后面为github邮箱
# 命令执行中间需要按几次回车键
  • 进入用户主目录下的.ssh目录,查看密钥

在这里插入图片描述

  • 将公钥添加到github网站上

登录github》settings》SSH and GPG keys》new ssh keys

python自动化(六)持续集成:2.Jenkins技术讲解_第64张图片

这样我们这台机器就能跟github交互了。

(2)Jenkins中配置密钥

第一步:Jenkins中安装git插件

第二步:在任意一台机器上生成对应GitHub的密钥(公钥和私钥)

第三步:将私钥添加到Jenkins中
python自动化(六)持续集成:2.Jenkins技术讲解_第65张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第66张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第67张图片

第四步:将对应的公钥配置到github中

2.构建任务时,使用git管理源码

python自动化(六)持续集成:2.Jenkins技术讲解_第68张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第69张图片

九.矩阵job和父子job

1.父子job

python自动化(六)持续集成:2.Jenkins技术讲解_第70张图片

设置父子job

python自动化(六)持续集成:2.Jenkins技术讲解_第71张图片

十.Jenkinsfile语法讲解

对于比较简单的Jenkins任务构建,我们直接在Jenkins界面设置构建配置流程即可。但是对于比较复杂的任务,这种方式将十分繁琐且难以维护。这时将Jenkins任务中的配置及流程,使用Jenkinsfile语法写入代码中,然后在git等仓库中维护我们的代码。这样可以大大方便我们维护持续集成任务。

python自动化(六)持续集成:2.Jenkins技术讲解_第72张图片

1.declarative pipeline语法

python自动化(六)持续集成:2.Jenkins技术讲解_第73张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第74张图片

1.1 agent字段

在这里插入图片描述
python自动化(六)持续集成:2.Jenkins技术讲解_第75张图片

1.2satges,stage和step字段

python自动化(六)持续集成:2.Jenkins技术讲解_第76张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第77张图片

1.3 post

python自动化(六)持续集成:2.Jenkins技术讲解_第78张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第79张图片

1.4 environment

python自动化(六)持续集成:2.Jenkins技术讲解_第80张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第81张图片

1.5 options

python自动化(六)持续集成:2.Jenkins技术讲解_第82张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第83张图片

1.6 parameters

在这里插入图片描述
python自动化(六)持续集成:2.Jenkins技术讲解_第84张图片

1.7 triggers

python自动化(六)持续集成:2.Jenkins技术讲解_第85张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第86张图片

2.scripts pipeline语法

python自动化(六)持续集成:2.Jenkins技术讲解_第87张图片

python自动化(六)持续集成:2.Jenkins技术讲解_第88张图片
在这里插入图片描述
python自动化(六)持续集成:2.Jenkins技术讲解_第89张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第90张图片

十一.pipeline的使用

1.简介

python自动化(六)持续集成:2.Jenkins技术讲解_第91张图片

2.使用Jenkins任务页面输入pipeline命令

python自动化(六)持续集成:2.Jenkins技术讲解_第92张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第93张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第94张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第95张图片

3.使用源码管理的方式获取pipeline命令文件

python自动化(六)持续集成:2.Jenkins技术讲解_第96张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第97张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第98张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第99张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第100张图片

十二.blue ocean介绍

1.介绍

python自动化(六)持续集成:2.Jenkins技术讲解_第101张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第102张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第103张图片

2.实战

第一步:安装blue ocean插件

python自动化(六)持续集成:2.Jenkins技术讲解_第104张图片

第二步:选择打开blue ocean。就可以使用blue ocean来美观的显示我们的任务界面
python自动化(六)持续集成:2.Jenkins技术讲解_第105张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第106张图片
python自动化(六)持续集成:2.Jenkins技术讲解_第107张图片

十三.Jenkins api接口

1.简介

python自动化(六)持续集成:2.Jenkins技术讲解_第108张图片

2.常用接口

2.1 Jenkins启动任务接口

python自动化(六)持续集成:2.Jenkins技术讲解_第109张图片

第一步:创建一个项目

第二步:使用python脚本调用Jenkins接口,启动任务

import requests
url = 'http://用户名:密码@192.168.1.104:8080/job/automated_test_appsample/build'
res = requests.post(url)
print(res.text)

注意:使用Jenkins的post类型接口,需要在启动Jenkins时关闭csrf防御

2.2 Jenkins获取最新的任务编号

python自动化(六)持续集成:2.Jenkins技术讲解_第110张图片

import requests
# 格式:http://用户名:密码@ip地址:端口号/job/需要查询的job名字/lastBuild/buildNumber
url = 'http://用户名:密码@192.168.1.104:8080/job/automated_test_appsample/lastBuild/buildNumber'
res = requests.get(url)
print(res.text)

结果如下:

python自动化(六)持续集成:2.Jenkins技术讲解_第111张图片

我们看到返回了当前任务最新一次构建的编号

python自动化(六)持续集成:2.Jenkins技术讲解_第112张图片

2.3 Jenkins查询任务状态接口

python自动化(六)持续集成:2.Jenkins技术讲解_第113张图片

import requests
# 格式:http://用户名:密码@Jenkinsip:端口号/job/需要查询的job名/需要查询job执行的任务编号/api/json
url = 'http://用户名:密码@192.168.1.104:8080/job/automated_test_appsample/3/api/json'
res = requests.get(url)
print(json.dumps(res.json(),indent=2))

结果如下:
python自动化(六)持续集成:2.Jenkins技术讲解_第114张图片
更多常用的api方法可以自行百度

你可能感兴趣的:(python自动化,python,jenkins,软件测试)