瀑布模型:在之前我们项目的开发模式都是瀑布模式。项目生命周期按照需求分析>概要设计>详细设计>代码开发>测试>上线发布一步一步进行。这种模式文档完善,整个开发过程很严谨,相对比较可控。
敏捷模式:敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
敏捷开发导致代码提交频繁,也导致测试,部署频繁且周期更短。
推荐Jenkins
第一步:获取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
第四步:登录 http:docker宿主机ip:8080 访问Jenkins网站
项目基本配置
包括任务名称,及任务风格
General
源码管理
源码管理就是配置你代码的存放位置。Git支持主流的github 和gitlab代码仓库。
构建触发器
构建触发器,顾名思义,就是构建任务的触发器。
构建环境
构建环境就是构建之前的一些准备工作,如指定构建工具。
构建
构建后操作
构建后操作,就是对project构建完成后的一些后续操作,比如生成相应的代码测试报告。
任务创建完成
这里我们只是演示一个demo,对于具体的参数配置,在后面详细讲解
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。
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 — 该插件允许您在一次构建失败后自动重建一次构建。
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 — 为一个项目设置环境变量,以备构建步骤引用。
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 。
SSH Slaves plugin — 该插件允许您在SSH外的隶属* nix机器上运行和管理Jenkins。
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.
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 — 该插件是用来在工作区文件中搜索字符串。这个搜索结果可以用来标记该构建是正常或者失败。
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 指定使用亚洲上海时区
启动子节点服务器
在子节点下,双击运行.jnlp文件
可以看到子节点启动成功了
前面我们讲解的是使用Java web的方式来建立节点和Jenkins的通信。这种方式不太方便,我们更多的是使用ssh的方式来连接。
我们先在Jenkins中添加子节点的用户名和密码,作为连接凭证
使用ssh的方式创建节点
节点创建好,启动节点时可能会报错,不能找到/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在初始化时,会有一个admin用户。后续也可以自己添加用户
这两个插件是方便用户设置格式化邮件
补充:qq邮箱获取授权码操作
这样我们就完成了最基本的邮件发送配置,但是这种方式并不灵活,所以我们会使用邮件模板配置的方式来构建邮件发送
扩展邮件功能有两种方式:
<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>
Editable Email Notification
:我们在构建Jenkins任务时,可以使用git实现源码管理。及每一次运行任务都会从git上拉取我们的代码。git实现需要条件:
节点机上安装git并完成密钥配置
Jenkins上安装git插件并完成密钥配置
要从git拉取代码,必须要跟git实现密钥认证。Jenkins中也是一样,我们如果想要执行Jenkins任务时,自动从git拉取代码。必须要满足一下条件:Jenkins与git实现认证,对应执行任务的节点机也需要与git实现认证。
第一步:安装git
yum install -y git
第二步:配置密匙
ssh-keygen -t rsa -C "[email protected]"
# -C 后面为github邮箱
# 命令执行中间需要按几次回车键
登录github》settings》SSH and GPG keys》new ssh keys
这样我们这台机器就能跟github交互了。
第一步:Jenkins中安装git插件
第二步:在任意一台机器上生成对应GitHub的密钥(公钥和私钥)
第四步:将对应的公钥配置到github中
设置父子job
对于比较简单的Jenkins任务构建,我们直接在Jenkins界面设置构建配置流程即可。但是对于比较复杂的任务,这种方式将十分繁琐且难以维护。这时将Jenkins任务中的配置及流程,使用Jenkinsfile语法写入代码中,然后在git等仓库中维护我们的代码。这样可以大大方便我们维护持续集成任务。
第一步:安装blue ocean插件
第二步:选择打开blue ocean。就可以使用blue ocean来美观的显示我们的任务界面
第一步:创建一个项目
第二步:使用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防御
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)
结果如下:
我们看到返回了当前任务最新一次构建的编号
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))