Jenkins学习之旅

学习博客:http://www.cnblogs.com/zz0412/tag/jenkins/html

       https://jenkins.io/doc/java

       http://www.cnblogs.com/horizonli/tag/jenkins/node

1. 传统网站部署的流程

传统的网站部署,你们在运维过程当中,网站部署是运维的工做之一,网站部署的流程大体分为:python

需求分析—原型设计—开发代码—提交测试—内网部署—确认上线—备份数据—外网更新-最终测试,若是发现外网部署的代码有异常,须要及时回滚。(以下图所示)linux

案例演示:部署LAMP网站,同时更新网页内容,检查效果!

更新完后的网站内容:

1. 目前主流网站部署的流程

目前主流网站部署方法,经过Hudson/Jenkins工具平台实现全自动部署+测试,是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins很是易于安装和配置,简单易用。

简单来讲方便以下人员:

1) 开发人员:写好代码,不须要本身进行源码编译、打包等工做,直接将代码分支存放在SVN、GIT仓库便可。

2) 运维人员:减轻人工干预的错误率,同时解放运维人员繁杂的上传代码、手动备份、更新。

3) 测试人员:能够经过jenkins进行简单的代码及网站测试。

1. Jenkins持续集成简介

持续集成(Continuous Integration)是一种软件开发实践,对于提升软件开发效率并保障软件开发质量提供了理论基础。Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能。本文正是从持续集成的基本概念入手,经过具体实例,介绍了如何基于 Jenkins 快速搭建持续集成环境。

Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins很是易于安装和配置,简单易用。web

2. 持续集成意义

1) 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减小重复过程以节省时间、费用和工做量;shell

2) 持续集成保障了每一个时间点上团队成员提交的代码是能成功集成的。换言之,任什么时候间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;apache

3) 持续集成还能利于软件自己的发展趋势,这点在需求不明确或是频繁性变动的情景中尤为重要,持续集成的质量能帮助团队进行有效决策,同时创建团队对开发产品的信心。tomcat

3. 持续集成组件

1) 一个自动构建过程,包括自动编译、分发、部署和测试;bash

2) 一个代码存储库,即须要版本控制软件来保障代码的可维护性,同时做为构建过程的素材库,例如SVN、GIT代码库;

3) 一个jenkins持续集成服务器(123.57.11.203服务器就是一个配置简单和使用方便的持续集成服务器)

4. Jenkins安装部署

地址http://mirrors.jenkins-ci.org/下载适合的Jenkins版本。

Linux稳定版的Jenkins地址为:http://ftp.yz.yamagata-u.ac.jp/pub/misc/jenkins/war-stable/1.651.2/jenkins.war 

因为Jenkins属于一个JAVA 代码,须要java容器才能运行jenkins,因此须要安装JDK+Tomcat,方法以下:

1) JAVA JDK安装

#下载相应的jdk软件包,而后解压安装,我这里包名称为:jdk-7u25-linux-x64.tar.gz

tar -xzf  jdk-7u25-linux-x64.tar.gz  ;mkdir -p /usr/java/ ;mv jdk1.7.0_25/ /usr/java/

#而后配置环境变量,这样能够任何地方引用jdk,以下配置:

#vi /etc/profile 最后面加入如下语句:

export JAVA_HOME=/usr/java/jdk1.7.0_25

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

#source /etc/profile   #使环境变量立刻生效

#java  --version    #查看java版本,看到jdk1.7.0_25版本即表明java jdk安装成功。

2) Tomcat安装配置

#官方网站下载tomcat 6.0.30或者其余版本:

wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-6/v6.0.45/bin/apache-tomcat-6.0.45.tar.gz 

tar xzf  apache-tomcat-6.0.45.tar.gz

#直接解压就可使用,解压完成执行:

mv apache-tomcat-6.0.45  /usr/local/tomcat

把获得的war包直接扔到tomcat下webapps/ROOT/下,启动tomcat,Jenkins就安装完毕!

rm  -rf  /usr/local/tomcat/webapps/* ;

mkdir  -p /usr/local/tomcat/webapps/ROOT/;

mv jenkins.war /usr/local/tomcat/webapps/ROOT/;

 

5. Jenkins配置演示

在学习Jenkins以前咱们先来了解几个经常使用的开发代码、构建代码的几个名词:MAKE、ANT、MAVEN、Eclipse、Jenkins

1) Make工具

Linux或者Windows最原始的编译工具,在linux下编译程序经常使用make(Windows下对应的工具为nmake)。它负责组织构建的过程,负责指挥编译器如何编译,链接器如何链接,最后生成一个可用的文件。

2) Ant工具

Make编译一些比较复杂的工具使用起来不灵活,语法很难理解,延伸出ant工具。

3) Maven工具

Maven工具是对ant工具的进一步改进,在make工具中,若是咱们要编译某些源文件,首先要安装编译器等工具。有时候须要不一样版本的编译器,在java的编译器须要不一样的各类包的支持,若是把每一个包都下载下来,在makefile中进行配置制定,当须要的包很是多时,很难管理。

Maven像make同样,是个构建(build)工具,它如何调用各类不一样的编译器链接器等呢?使用Maven plugin (maven 插件)。

4) Jenkins工具

Maven已经很强大了,那Jenkins是个什么东西?

其实Maven仍是不够强大。Maven能够控制编译,控制链接,能够生成各类报告,能够进行代码测试。

但是如何控制这个流程呢? 编译仍是先链接?先进行代码测试,仍是先生成报告?可使用脚原本对maven进行控制,实现这些流程的控制。

5) Eclipse工具

 

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其自己而言,它只是一个框架和一组服务,用于经过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

6) Maven项目对象模型POM (Project Object Model),能够经过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具Maven 除了以程序构建能力为特点以外,还提供高级项目管理工具。

7) POMMaven项目中的文件,使用XML表示,名称叫作pom.xml。在Maven中,当谈到Project的时候,不只仅是一堆包含代码的文件。一个Project每每包含一个配置文件,包括了与开发者有关的,缺陷跟踪系统,组织与许可,项目的URL,项目依赖,以及其余。它包含了全部与这个项目相关的东西。事实上,在Maven世界中,project能够什么都没有,甚至没有代码,可是必须包含pom.xml文件。

8) 因为 Maven 的缺省构建规则有较高的可重用性,因此经常用两三行 Maven 构建脚本就能够构建简单的项目。因为 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,并且公司项目采用 Maven 的比例在持续增加。

安装JDK及MAVEN工具,并在Jenkins平台进行设置,以下步骤

wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz 

tar -xzf apache-maven-3.3.9-bin.tar.gz ;mv apache-maven-3.3.9 /usr/maven/

而后设置以下:

9) 返回首页,第一次进入里面没有数据,咱们须要建立项目工程job。 

10) 点击左上角的new job,在new job页面须要选择job的类型,Jenkins支持几种类型,咱们选择“构建一个maven项目”,Job名为:jfedu,如图所示:

11) 点击OK按钮后,进会进入详细配置界面,详细配置界面的配置项不少,不过不用怕,大部分使用默认配置就能够了,下面就说说咱们须要修改的几个地方:

12) Source Code Management

由于咱们使用SVN管理源码,因此这里选择Subversion,并在Repository URL中输入咱们的SVN地址:

 

svn://123.57.11.203:8801/edu/

输入SVN库的URL地址后,Jenkins会自动验证地址,并给予提示。

 

若是须要SVN用户名和密码:

用户名:xxxxx

密码:xxxxxxxx

 

13) 配置自动构建的计划,假设咱们想让项目晚上8点自动构建一次,只须要在Build Triggers中选择Build periodically,并在Schedule中输入 0 20 * * *,我配置的是每晚8点自动构建:

 

注:Schedule的配置规则是有5个空格隔开的字符组成,从左到右分别表明:分 时 天 月 年。*表明全部,0 20 * * * 表示“在任何年任何月任何天20点0分”进行构建。

14) 配置到这里,可能有人发如今Build配置节点,有红色错误信息,提示

Jenkins needs to know where your Maven2 is installed. 
Please do so from the system configuration.

如图所示:

 

这是由于Jenkins找不到maven的缘由,点击"system configuration",是system configuration的maven配置中添加maven目录就OK,以下图:

我设置了JRE 7MAVEN的安装目录。

点击左下角的SAVE按钮,保存设置,保存好全部配置后,咱们第1个job就算是完成了。

8. Jenkins手动构建

在通过上面的配置后,回到Jenkins首页,在首页能够看到刚才添加的1job,以下图

 

点击某1个job后后面的"Schedule a build"图片手动构建,点击完后,会在左边的Build Queue或者Build Executor Status 显示正在构建的任务,在自动构建完后,刷新页面,就能够看到构建结果了,如何某个项目构建失败,点击项目后面的构建数字(从1开始递增)进入项目的"Console Output "能够查看项目构建失败的缘由。固然咱们也能够配置把构建失败的结果发到邮箱。

构建完成

 

9. Jenkins脚本自动化

1)点击工程名称-配置-构建后操做-设置Jenkins编译打包完后,war包存放的位置,以下图:

 

2) 而后输入以下配置:**/target/*.war

 

3) 如上-构建触发器-一个构建步骤,选择Add-post-build step-Excute shell

 

4) 而后把脚本内容写入便可

 

代码以下:

1 rm -rf  /root/.jenkins/workspace/jfedu/target/edu.war
2 cp /root/.jenkins/workspace/jfedu/target/edu.war  /root/.jenkins/jobs/jfedu/builds/lastSuccessfulBuild/archive/target/
3 ssh  root@121.42.183.93  'bash -x -s' < /data/sh/auto_deploy.sh
4 #for  I  in  `cat ip.txt`;do ssh  root@${I}  'bash -x -s' < /data/sh/auto_deploy.sh ;done
View Code

10. 自动部署脚本

 1 #!/bin/bash
 2 #Auto deploy Tomcat for jenkins perf
 3 #by author wugk 2016-07-06 
 4 export JAVA_HOME=/usr/java/jdk1.6.0_25
 5 TOMCAT_PID=`/usr/sbin/lsof -n -P -t -i :8081`
 6 TOMCAT_DIR="/usr/local/tomcat/"
 7 FILES="jfedu.war"
 8 DES_DIR="/export/data/tomcatRoot/ptest.jd.com/"
 9 DES_URL="http://123.57.11.203:8080/job/Ptest_Online/lastSuccessfulBuild/target"
10 BAK_DIR="/export/backup/`date +%Y%m%d-%H%M`"
11 [ -n "$TOMCAT_PID" ] && kill -9 $TOMCAT_PID
12 cd $DES_DIR
13 rm -rf $FILES
14 mkdir -p $BAK_DIR;\cp -a $DES_DIR/* $BAK_DIR/
15 rm -rf $DES_DIR/*
16 wget $DES_URL/$FILES
17 /usr/java/jdk1.6.0_25/bin/jar  -xvf  $FILES
18 ####################
19 cd $TOMCAT_DIR;rm -rf work
20 /bin/sh $TOMCAT_DIR/bin/start.sh
21 sleep 10
22 tail -n 50 $TOMCAT_DIR/logs/catalina.out
View Code

提示:若是有多台,怎么去部署,能够发散思惟哟!!!能够考虑结合底层SSH+FOR、PSSH、saltstack、Ansible工具去实现。

 

11. Jenkins插件安装

jenkins页面系统管理”-->“管理插件”-->"可选插件"中搜索email-ext-plugin插件选择并安装,也能够点击“高级”-而后手动上传安装。

 

注:也能够手动下载插件安装,到官网下载插件,而后将下载的插件传到服务器jenkins根目录下的plugins目录~/.jenkins/plugins目录,重启jenkins便可

官网插件下载地址https://wiki.jenkins-ci.org/display/JENKINS/Plugins

以下咱们来安装Email-ext-Plugin邮件插件包,安装方法以下:

首先去Jenkins插件官网下载email-exttoken-macroemail-template

能够搜索某个插件,输入插件名称便可:

分别从以下地址下载三个插件,而后上传到Jenkins,实现安装:

https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin 

https://wiki.jenkins-ci.org/display/JENKINS/Token+Macro+Plugin 

https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+Template+Plugin 

以下图,先安装token插件:

而后安装email插件

最终以下三个插件安装成功:

安装完成后,刷新Jenkins WEB界面便可。

安装完email插件,打开系统管理-咱们能够看到多了一个extended-E-mail-Notification菜单选项

如上是安装Jenkins插件的方法,其余GIT插件、Publish Over插件安装方法同样。

12. Jenkins邮件设置

Jenkins持续集成,当咱们自动打包部署完,咱们能够发送一封邮件给相关的负责人,接下来带你们一块儿来看一下Jenkins持续集成邮件设置,邮件设置分为以下几个步骤:

构建完成后,告知构建信息及结果。主要使用到两个插件:Email Extension PluginEmail Extension Template Plugin(上一章,咱们已经安装完这3个插件,这里能够忽略不须要再次安装)

 

常见参数以下:

SMTP server:设置邮件提供商的SMTP地址,mail.jfedu.net
Default Content Type:内容展示的格式,通常选择HTML
Default Recipients:默认收件人
Use SMTP Authentication:使用SMTP身份验证,点开Default user E-mail suffix下面的高级按钮才能看到,选中。
User Name:邮件发送帐户的用户名。
Password:邮件发送帐户的密码。
SMTP portSMTP端口。

1) 首先要设置Jenkins发送邮件的发送者

2) 而后选择Jenkins Location设置以下:(添加系统管理员邮件)

 

3) 设置发送邮件的SMTP、邮箱后缀,发送类型html、接收者或者抄送者

 

4) 设置邮件的标题

Default Subject内容以下:

构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS

5) 设置邮件的内容

Default Content内容以下:

 1 <hr/>
 2 <h3>(本邮件是程序自动下发的,请勿回复!)</h3><hr/>
 3 
 4 项目名称:$PROJECT_NAME<br/><hr/>
 5 
 6 构建编号:$BUILD_NUMBER<br/><hr/>
 7 
 8 构建状态:$BUILD_STATUS<br/><hr/>
 9 
10 触发缘由:${CAUSE}<br/><hr/>
11 
12 构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>
13 
14 构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>
15 
16 变动集:${JELLY_SCRIPT,template="html"}<br/>
17 <hr/>
View Code

6) 工程项目邮件设置

选择trigger阀值

7) 构建邮件验证

 

13. Jenkins多实例配置

在企业里面使用Jenkins自动部署+测试平台时,天天更新发布几个网站版本,不频繁,可是对于一些大型的企业来说,Jenkins就须要同时处理不少的任务,这时候就须要借助Jenkins多个node或者咱们所说的Jenkins分布式SLAVE,今天咱们带你们来学习Jenkins多实例的配置;

添加Linux平台Jenkins SLAVE配置:

1) 因为JenkinsJava程序,添加的SLAVE客户端服务器必须安装Java JDK环境;

2) 建立远程执行Jenkins任务的用户,通常为Jenkins用户,工做目录为/home/Jenkins;

3) Jenkins服务器免秘钥登陆Slave服务器或者经过用户名和密码登陆;

以下图配置:

 

系统管理-管理节点-新建节点

而后建立SLAVE名称并保存

以下进行配置:

添加ADD认证:

查看SLAVE状态以下;

而后点击www_slave节点-点击launch salve agent调试:

而后出现下图证实slave配置成功:

图二:

Jenkins-master经过ssh方式来启动slave的脚本,java –jar slave.jar,来接受master端的任务分配便可;

最后运行任务,当即构建:

配置完成后,若是你同时点击一个JOB任务两次,会发现只会运行一个任务呢,那须要怎么调整呢,须要把从新配置job工程,勾选以下配置:(在必要的时候并发构建)

最终以下图,多SLAVE+Master+并发构建

14. Jenkins整合Ansible

 

1) Ansible入门基础

Ansible和saltstack、PSSH、puppet目前市面上一些其它的项目管理工具备很大的不一样,它的设计初衷就是为了更方便、快捷的进行配置管理。它易于安装和使用、语法也很是简单易学。你能够用Ansible将日常复杂的配置工做变得简单,变得更加标准化更容易控制。100、1000台批量部署;

Ansible只须要在一台普通的服务器上运行便可,不须要在被管控的服务器上安装客户端。由于它是基于SSH的,Linux服务器离不开SSH,因此Ansible不须要为配置工做添加额外的支持。 你能够经过命令行来使用Ansible,运行Ansible的服务器这里俗称“管理节点”;经过Ansible进行管理的服务器俗称“受控节点”。

Ansible是一款极为灵活的开源工具套件,可以大大简化Unix管理员的自动化配置管理与流程控制方式。它利用推送方式对客户系统加以配置,这样全部工做均可在主服务器端完成。其命令行机制一样很是强大,容许你们利用商业许可Web UI实现受权管理与配置。

Ansible优势:

1) 轻量级,不须要去客户端安装agent,更新时,只须要在操做机上进行一次更新便可,采用SSH协议。

2) 批量任务执行能够写成脚本,并且不用分发到远程就能够执行。        

3) 使用python编写的,维护更简单。        

4) 支持sudo普通用户命令。

 

2) Ansible安装配置

Ansible 可以安装到 Linux、BSD、Mac OS X 等平台,Python 版本最低要求为2.6。

CentOS直接使用yum安装便可,安装以前先安装epel源码。

rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm 

而后执行命令: yum install ansible -y 安装便可。

 

安装完后正式来使用,ansible默认配置文件路径为:

/etc/ansible:

常见的命令参数有:

Ansible中的临时命令的执行是经过Ad-Hoc来完成,可以快速执行,并且不须要保存执行的命令,例如:

默认hosts内容能够配置分组,咱们能够定义各类ip及规则,内容以下:

而后配置SSH-KEYGEN免秘钥登陆

手动批量运行命令或者脚本:(警告信息能够忽略)

最好在Jenkins 工程里面进行以下配置便可:

cp /root/.jenkins/workspace/www.jfedu.net/target/edu.war /var/www/html/download/

ansible www_jfedu  -m  copy -a  "src=/data/sh/auto_deploy.sh dest=/tmp/"

ansible www_jfedu  -m  shell -a  "cd /tmp ;/bin/bash auto_deploy.sh"

最终跟以前部署的Shell方式效果同样:

相关文章
相关标签/搜索