本节内容:

  • Jenkins介绍
  • 安装部署Jenkins
  • Jenkins构建maven风格的job
  • Jenkins邮件通知设置
  • Sonar
  • Jenkins与Docker结合

 

一、Jenkins介绍

 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

 

二、安装部署Jenkins

下载地址:https://jenkins.io/download/

我这里下载war包安装,版本:1.642.3 LTS .war

 

1. 环境信息 

主机名 操作系统版本 IP地址 安装软件
osb30 Redhat 6.5 172.16.206.30 jenkins

 

 

 

2. 新建Jenkins用户

[root@osb30 ~]# groupadd jenkins
[root@osb30 ~]# useradd -g jenkins jenkins
[root@osb30 ~]# id jenkins
uid=501(jenkins) gid=501(jenkins) groups=501(jenkins)
[root@osb30 ~]# echo "wisedu" | passwd --stdin jenkins &> /dev/null

 

3. Jenkins安装方式

安装jenkins有两种方式,tomcat方式部署和java部署启动。本次实验我以tomcat下部署启动为例。

(1)tomcat方式部署

a.首先安装tomcat和JAVA,配置环境变量(此步骤不再讲述,java配置不可缺少)

我这里安装的是jdk 1.8.0_65。

 

b.将从官网下载下来的jenkins.war文件放入tomcat下的webapps目录下,进入tomcat的/bin目录下,启动tomcat即启动jenkins。

我这里用的是tomcat8。

 

c.启动jenkins时,会自动在webapps目录下建立jenkins目录,访问地址为:http://localhost:8080/jenkins

[jenkins@osb30 ~]$ tar zxf apache-tomcat-8.0.30.tar.gz
[jenkins@osb30 ~]$ mv jenkins.war apache-tomcat-8.0.30/webapps/
[jenkins@osb30 ~]$ cd apache-tomcat-8.0.30
[jenkins@osb30 apache-tomcat-8.0.30]$ bin/startup.sh
Jenkins home directory: /home/jenkins/.jenkins found at: $user.home/.jenkins

如果启动时报错:

Caused by:java.awt.AWTError: Can't connect to X11 window server using ':0' as the value of the DISPLAY varible...

解决:

[jenkins@osb30 ~]$ cd apache-tomcat-8.0.30/bin/
[jenkins@osb30 bin]$ vim catalina.sh 
JAVA_OPTS="-Xms1024m -Xmx1024m -Djava.awt.headless=true"

 

d.访问jenkins

http://172.16.206.30:8080/jenkins

 

(2)java部署启动jenkins

切换到jenkins.war存放的目录,输入如下命令:

$ java -jar jenkins.war 

可以修改启动端口

$ java -jar jenkins.war --httpPort=8000

然后在浏览器中(推荐用火狐、chrom)输入http://localhost:8080,localhost可以是本机的ip,也可以是计算机名。就可以打开jenkins;修改端口后,访问地址的端口需同步变更。

 

4. Jenkins授权和访问控制

默认地Jenkins不包含任何的安全检查,任何人可以修改Jenkins设置,job和启动build等。显然地在大规模的公司需要多个部门一起协调工作的时候,没有任何安全检查会带来很多的问题。 我们可以通过下面的方式来增强Jenkins的安全:

访问jenkins:http://172.16.206.30:8080/jenkins

点击系统管理—> Configure Global Security,点击”启用安全”,可以看到可以使用多种方式来增强Jenkins的授权和访问控制:

Jenkins+Docker持续集成

查看策略:

Jenkins+Docker持续集成

如上图所示,默认是”任何用户可以做任何事情(没有任何限制)”。

我们在”安全域”选择”Jenkins专有用户数据库”,”允许用户注册”;并先在“授权策略”点击“任何用户可以做任何事情(没有任何限制)”, 防止注册之后无法再管理jenkins。此时就可以刷新一下jenkins的页面看到右上角有登录、注册的按钮。

 

(1)注册管理员账号

a.点击注册,首先注册一个管理员账号。

Jenkins+Docker持续集成

 

b.点击系统管理—> Configure Global Security,在“授权策略”选择”安全矩阵”,添加用户/组——添加admin账户——为admin账户添加所有权限,为匿名用户勾选你希望对方了解的功能。

Jenkins+Docker持续集成

【注意】:匿名用户一定要开启此处的可读权限,若不开启,后面github或者bitbucket的webhook自动构建会没有权限。

并且勾选上该项,点击保存。

Jenkins+Docker持续集成

做完此部操作之后,即可用admin帐号登录,取消登录用户可以做任何事的权限。

以上操作,即可完成jenkins的授权和访问控制。

 

5. Jenkins系统配置

登录jenkins——系统管理——系统设置,为jenkins添加上需要的功能配置,有如下几个方面:

Jenkins+Docker持续集成

 

(1)JDK配置

在jdk的选项,点击”新增JDK”,取消自动安装,输入jdk别名(名称随意),JAVA_HOME大家应该都很了解,在此处填写jenkins所在服务器安装的java程序的HOME位置即可,根据不同操作系统填写不同路径,如win7 D:\Java\jdk1.8   linux /usr/lib/jvm/jdk1.7.0_51。

Jenkins+Docker持续集成

设置完了请记得保存。

 

(2)git/svn版本控制添加

根据使用的版本选择控制版本的应用程序的路径,如jdk配置即可。

Jenkins+Docker持续集成

【注意】:如果使用Git作为版本控制库,Jenkins默认情况下是没有安装Git的。我们需要到插件管理界面中选中Git,然后点击直接安装。

点击系统管理—>管理插件—>可选插件,在右上角”过滤”处输入git进行搜索:

Jenkins+Docker持续集成

找到Git client plugin和Git plugin,在前面打上√,点击直接安装。

Jenkins+Docker持续集成

安装插件中。。。

Jenkins+Docker持续集成

安装成功后,重启jenkins。

[jenkins@osb30 ~]$ cd apache-tomcat-8.0.30
[jenkins@osb30 apache-tomcat-8.0.30]$ bin/shutdown.sh
[jenkins@osb30 apache-tomcat-8.0.30]$ bin/startup.sh ;tail -f logs/catalina.out

 

(3)Jenkins添加maven配置

先判断jenkins所在主机是否安装了maven:

# mvn –version
-bash: mvn: command not found

如果没有安装,请先安装maven。

 

a.CentOS 安装maven

[root@osb30 ~]# cd /usr/local/
[root@osb30 local]# wget http://apache.opencas.org/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

[root@osb30 local]# tar zxf apache-maven-3.3.9-bin.tar.gz
[root@osb30 local]# ln -s apache-maven-3.3.9 maven
[root@osb30 local]# vim /etc/profile
# 添加如下配置:
# Maven configuration.
MAVEN_HOME=/usr/local/maven
export PATH=$MAVEN_HOME/bin:$PATH
[root@osb30 local]# source /etc/profile

[root@osb30 local]# mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_65, vendor: Oracle Corporation
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-431.el6.x86_64", arch: "amd64", family: "unix"

 

b.Jenkins配置maven

安装完成后,登录jenkins。点击系统管理—>系统设置。

Jenkins+Docker持续集成

 

三、Jenkins构建maven风格的job

1. 新建maven任务

登录jenkins,点击新建。输入Item名称,选择“构建一个maven项目”,点击OK。

Jenkins+Docker持续集成 

 

2. 构建任务配置

Jenkins+Docker持续集成

 

3. 源码管理配置

进入配置页面,找到”源码管理”。我这里是svn,输入项目所在版本库的地址。

Jenkins+Docker持续集成

 

4. 构建触发器配置

在”源码管理”下面是”构建触发器”。

”构建触发器”是一个持续集成的触发器插件,可以根据已经完成构建的结果,触发新Job或者传递参数。默认的选项是Build whenever a SNAPSHOT dependency is built,意思是依赖于快照的构建,意思是依赖于快照的构建,当代码有更新时就构建项目。

Build periodically和Poll SCM可以设置定时自动构建。两者区别如下:

  • Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。
  • Build periodically:定时进行项目构建(它不care源码是否发生变化)。

我这里设置为每12小时构建一次。

Jenkins+Docker持续集成

 

5. Maven构建设置

(1)Pre Step

Pre Steps选项用来配置构建前的工作,这里不作更改。

(2)配置Root POM和Goals and options

因为是Maven项目,所以Build选项有Root POM和Goals and options的设置。Root POM:填写你项目的pom.xml文件的位置,注意:是相对位置,如果该文件不存在,会有红色字提示。 

比如我这里是:

Jenkins+Docker持续集成

(3)Post Steps 

在maven项目创建完成后,我们还需要实现每次构建完成,将war发布到阿里云主机上,以实现自动发布。我们通过添加shell实现自动发布。

找到Post steps下有个Execute shell:

【注意】:Jenkins在执行该shell脚本的时候是以jenkins这个用户身份去执行。某些场景下请注意环境变量PATH。

将构建完成后,所要采取的动作,shell脚本脚本内容如下:

#!/bin/bash

#阿里云主机
# Stop tomcat.
ssh root@114.55.29.246 '/usr/local/apache-tomcat-7.0.65/bin/shutdown.sh' &>/dev/null
sleep 15

# Check the stop is successful or not. If until not, kill the tomcat process.
if ssh root@114.55.29.246 'ps -ef|grep tomcat |grep -v "grep"' &>/dev/null; then
  tomcat_pid=`ps -ef | grep tomcat | grep -v "grep" | awk '{print $2}'`
  kill -9 ${tomcat_pid}
fi

# Check the stop is successful or not.
if ssh root@114.55.29.246 'ps -ef|grep tomcat |grep -v "grep"' &>/dev/null; then
  echo "Tomcat stop failed.Please check the problem."
  exit 5
fi

# Backup previous version and delete the war in the path /usr/local/apache-tomcat-7.0.65/webapps/.
ssh root@114.55.29.246 '/usr/bin/cp -f /usr/local/apache-tomcat-7.0.65/webapps/*.war /backups/*war'
ssh root@114.55.29.246 'rm -rf /usr/local/apache-tomcat-7.0.65/webapps/*'

# Copy the newest war to aliyun ECS.
scp /home/jenkins/.jenkins/workspace/godseye/godseye-parent/godseye-container/target/godseye-container-aliyun.war root@114.55.29.246:/usr/local/apache-tomcat-7.0.65/webapps/godseye.war &>/dev/null

# Start the tomcat.
ssh root@114.55.29.246 '/usr/local/apache-tomcat-7.0.65/bin/startup.sh' &>/dev/null
shell脚本

相关文章: