windows+jenkins
前言
因今年公司新产品线较多,为了降低耦合,达到业务分离、重用,提高内部开发效率的目的,采用了基于服务组件、前后端分离的架构体系。与之前传统单应用架构相比,系统部署、配置更加复杂,为了能够频繁地将软件的最新版本,及时、持续地交付给测试团队及质量控制团队,以供评审,所以引入持续集成工具Jenkins,从而实现公司新产品持续集成,自动化部署。
CI/CD介绍
互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段:
编码 → 构建 → 集成 → 测试 → 交付 → 部署
正如你在上图中看到,持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)有着不同的软件自动化交付周期。
持续集成(CI)
上面整个流程中最重要的组成部分就是持续集成(Continuous integration,简称CI)。
持续集成指的是,频繁地(一天多次)将代码集成到主干。将软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。
它的好处主要有两个:
1. 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易;
2. 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
持续集成并不能消除Bug,而是让它们非常容易发现和改正。持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
持续交付
持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。
持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。
持续部署(CD)
持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。
持续部署的前提是能自动化完成测试、构建、部署等步骤。
总的来说,持续集成、持续交付、持续部署提供了一个优秀的 DevOps 环境。对于整个开发团队来说,能很大地提升开发效率,好处与挑战并行。无论如何,频繁部署、快速交付以及开发测试流程自动化都将成为未来软件工程的重要组成部分。
Jenkins概念
Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。
官方文档:https://jenkins.io/doc/
安装Jenkins
环境准备
操作系统:Windows10
Java环境:下载 jdk-1.8.0-131-X64.zip,配置Java环境变量(参考:http://jingyan.baidu.com/article/02027811629b941bcc9ce521.html)
Maven环境:下载apache-maven-3.5.2-bin.zip,配置Maven环境变量(参考:http://wiki.jikexueyuan.com/project/maven/environment-setup.html)
Tomcat环境:下载apache-tomcat-8.5.20-windows-x64.zip,配置Tomcat环境变量(参考:http://jingyan.baidu.com/article/8065f87fcc0f182330249841.html)
Jenkins环境:下载Jenkins2.73.2 for Windows
安装Jenkins
运行下载好的Jenkins安装包jenkins.msi,选择安装路径,点击”安装“,等待安装完成;
安装完成以后,会自动启动浏览器,跳转到Jenkins登录页面。第一次启动Jenkins,出于安全考虑,Jenkins会生产一个随机口令文件,表单中会给出管理员口令文件存放的位置,通过Windows+R,调出运行窗口,将存放口令的文件路径粘贴到输入框,点击回车,快速打开文件,将文件中的口令输入到表单中,点“Continue”继续;
安装Jenkins官方建议的默认插件
创建第一个管理员用户,创建完成以后,就可以用这个用户登录到Jenkins系统中。
安装插件
下面介绍实际部署中所用到的几个插件,安装方法:系统管理->管理插件。
安装Deploy to container Plugin(自动化部署插件)
安装Maven Integration Plugin(Maven集成插件)
安装Publish Over SSH Plugin(SSH远程发布插件)
注意:因插件安装以后,需要重启Jenkins才能够使用。所以在安装插件时,可以勾选安装完成后重启Jenkins。如果不小心忘记勾选,也没有关系,可以在浏览器网址端口后面输入/restart来重启Jenkins,其它的命令,可参考系统管理->Jenkins CLI。
系统配置
插件安装完成以后,我们需要对系统进行配置。
首先进行全局配置,系统管理->系统设置:
Jenkins Location配置
Jenkins URL项保持默认即可,填写系统管理员邮件地址。(注意:这个如果不填写的是发送不了邮件的,测试邮件发送时会报:“553 Mail from must equal authorized user”错误。)
邮件通知配置
填写“SMTP服务器”、“用户默认邮件后缀”,然后点“高级”,勾选“使用SMTP认证”,填写邮箱用户名、密码和SMTP端口,接着勾选“通过发送测试邮件测试配置”,填写接收邮件的邮箱,点击“测试”,出现“Email was successfully sent”表明邮件通知配置成功。
SSH remote hosts配置
SSH远程主机配置,主要用来通过SSH方式远程发布。
Publish over SSH配置
主要是用来通过SSH方式远程发布。
然后,进入系统设置->Global Tool Configuration:
Maven配置
配置Maven主要是配置Maven的settings.xml文件,Jenkins在构建Maven项目时需要依靠该配置文件来执行Maven,其配置如下:
JDK配置
新建项目
新建一个Maven项目
项目配置
源码管理
构建触发器
Jenkins提供了6中构建触发器,分别是:
build whenever a snapshot dependency is built ,当job依赖的快照版本被build时,执行本job;
触发远程构建 (例如,使用脚本);
build after other projects are built 当本job依赖的job被build时,执行本job;
build periodically 隔一段时间build一次,不管版本库代码是否发生变化,通常不会采用此种方式;
GitHub hook trigger for GITScm polling 通过Github钩子触发;
poll scm 隔一段时间比较一次源代码,如果发生变更,那么久build。否则,不进行build,通常采用这种方式。
构建(Build)
调用Maven “clean install”命令。
增加一个构建后步骤(自动部署)
因在Windows环境下部署,所以选择Execute Windows batch command。
部署war思路
自动部署的思路:设置全局变量(项目名称,构建新包路径,配置文件路径,Tomcat路径等)->关闭Tomcat->删除Tomcat中旧版本包->拷贝新包到Tomcat应用目录->启动Tomcat(解压包)->关闭Tomcat->替换配置文件->删除War包->启动Tomcat,自己写的脚本代码如下:
部署war脚本
@echo off
rem 设置全局变量
set prj_name=estate
set package_path=D:\AutoDeployment\Package
set config_path=D:\AutoDeployment\config
set command_path=D:\AutoDeployment\command
set tomcat_home=D:\tomcat\apache-tomcat-7.0.59
set startup_command=%tomcat_home%\bin\startup.bat
set shutdown_command=%tomcat_home%\bin\shutdown.bat
rem 关闭tomcat
call %shutdown_command%
rem 暂停10s
ping -n 10 127.0.0.1
rem 删除旧包目录
rd /s /q %tomcat_home%\webapps\%prj_name%
rem 新包重命名
d:
cd D:\AutoDeployment\Package\estate
ren register-web.war %prj_name%.war
rem 拷贝新包到发布目录
copy %prj_name%.war %tomcat_home%\webapps
rem 启动tomcat
call %startup_command%
rem 暂停10s
ping -n 10 127.0.0.1
rem 关闭tomcat
call %shutdown_command%
rem 删除war包
rd /s /q %tomcat_home%\webapps\%prj_name%.war
rem 替换配置文件
copy %config_path%\%prj_name% %tomcat_home%\webapps\%prj_name%\WEB-INF\classes
rem 启动tomcat
call %startup_command%
rem 关闭窗口
exit
部署jar思路
自动部署的思路:设置全局变量)->关闭项目端口(XftmApp默认8767)->监测端口是否关闭成功->启动编译后的jar
部署jar脚本
构建测试
点击“立即”构建,maven 打包成功,执行脚本无误以后,整个自动化部署就成功了。
构建过程查看
如下图,鼠标悬浮在第几次构建,会出现一个倒三角,,点击倒三角
点击控制台输出,可以查看具体情况
总结
个人总结
Jenkins目前查阅资料下来,可以支持分布式构建,提供了200余种插件,提供可视化界面,减少运维操作。但,今天演示的只是入门级别,jenkins有很多操作,需要去研究,例如 :master/slave支持分布式的build。
个人建议
学习jenkins比较简单,但是建议使用人员学习一下shell脚本和windows的dos命令脚本。
学习一下docker,结合docker,操作更方便。
福利
链接:https://pan.baidu.com/s/1m73qtGWeBLwCrWcDRQJMhw
提取码:rshf