---恢复内容开始---

搭建jenkins持续构建集成环境

 要搭建jenkins持续构建集成环境,首先要安装tomcat和JDK;

 

第一部分,基本说明:

 

敏捷(Agile) 在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。

它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。

持续集成的核心价值在于:

  1. 1.  持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;
  2. 2.  持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;
  3. 3.  持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。

持续集成的原则

业界普遍认同的持续集成的原则包括:

1)需要版本控制软件保障团队成员提交的代码不会导致集成失败。常用的版本控制软件有 IBM Rational ClearCase、CVS、Subversion 等;

2)开发人员必须及时向版本控制库中提交代码,也必须经常性地从版本控制库中更新代码到本地;

3)需要有专门的集成服务器来执行集成构建。根据项目的具体实际,集成构建可以被软件的修改来直接触发,也可以定时启动,如每半个小时构建一次;

4)必须保证构建的成功。如果构建失败,修复构建过程中的错误是优先级最高的工作。一旦修复,需要手动启动一次构建。

持续集成系统的组成

由此可见,一个完整的构建系统必须包括:

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

2,一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库。

3,一个持续集成服务器。本文中介绍的 Jenkins 就是一个配置简单和使用方便的持续集成服务器。

基于Jenkins 快速搭建持续集成环境

正如前文中所描述的那样,一个持续集成环境需要包括三个方面要素:代码存储库、构建过程和持续集成服务器。对Jenkins 有了初步了解后,我们通过一个实例来集中展示如何快速搭建一个简单的基于Jenkins 的持续集成环境。

 

 

第二部分,jenkins和svn的持续构建环境构建:

SVN(subversion)是目前比较流行的版本管理工具。很多开源软件都是用 SVN 作为代码版本管理软件。为了让实例更具有代表性,本文中我们使用 SVN 作为代码存储器。

接下来,我们开始新建一个 Jenkins 项目, 由于我们需要连接 SVN 的代码存储器, 我们选择 Build a free-style software project

 

一, 安装jenkins;                        (第一步,下载安装jenkins)

从官网下载jenkins.war包,放到tomcat中的webapps目录下作为tomcat的一个应用;

官方下载地址: http://mirrors.jenkins-ci.org/war/

或直接使用命令行,按照官网上的方法安装:

wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
deb http://pkg.jenkins-ci.org/debian binary/
sudo apt-get update
sudo apt-get install jenkins

 

 

二, 对jenkins系统全局配置;              (第二步,全局配置jenkins)

   配置Jenkins全局变量,进入菜单:系统管理 -> 系统设置

2.1  配置JDK

因为buildr启动时需要jvm,所以我们这里需要配置下jdk,如下图:

2.2  配置版本控制库,这里用的是SVN,如图所示:

Name可以自由定制,下面的Path需设置成svn代码仓库的目录,

 

2.3  配置emai-ext,如图所示:

这里没有用jenkins自带的邮件配置,因为它没有模板,也不能配置触发机制。下图字段的如果不清楚其含义,请点击问号,看帮助。



2.4  配置邮件通知(如果使用email-ext,这里可不设置)

2.5  安装插件

配置声音插件

首先,需要在另一台jenkins服务器添加jenkins服务器的public key,并加入信任列表,具体步骤如下图

然后,配置系统设置,在此之前,请在需要播放声音的远程linux上安装play插件,sudo apt-get install sox

 

安装ClearCase的插件:

假设我们使用的代码存储库是 IBM Rational ClearCase。Jenkins 提供了对 ClearCase 的插件支持,它能方便地让我们连接到 Base ClearCase 或者 UCM ClearCase,使其成为 Jenkins Project 的代码控制器。另外,这个插件是基于 cleartool 命令的,所以必须在 Jenkins 的持续集成服务器上安装 ClearCase 的客户端程序。

在 Jenkins 的插件管理界面中选择 ClearCase Plugin,点击页面下方的 Install 按钮。

在打开的页面中提示安装完成后,Jenkins 需要重新启动来激活这个插件。重新执行 java -jar Jenkins.war 后,在 Jenkins 的页面中,我们就能看到 ClearCase plugin 已经被安装到 Jenkins 了。

 

2.6 Jenkins的授权和访问控制

1 Jenkins的授权和访问控制

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

1
Security Realm
,用来决定用户名和密码,且指定用户属于哪个组;

2
Authorization Strategy
,用来决定用户对那些资源有访问权限;

Manage Jenkins -> Configure
System -> Enable Security
下可以看到可以使用多种方式来增强Jenkins的授权和访问控制。

 

2)创建管理员账号+匿名只读

简单地设置一个管理员账号,用来管理jenkins设置,修改job和执行build等。其他的匿名访问的用户将只有只读的权限,不能修改Jenkins的设置,不能修改job,且不能运行build,但是可以访问build的结构,查看buildlog等。

1)需要对Jenkins增加如下的启动参数来创建管理员账号:

java -jar jenkins.war --argumentsRealm.passwd.user=password
—argumentsRealm.roles.user=admin

例如设置管理员用户为jenkins且密码为swordfish,如下:

java -jar jenkins.war --argumentsRealm.passwd.jenkins=swordfish
—argumentsRealm.roles.jenkins=admin

2)在启动后需要在Manage Jenkins ->
Configure System
来选择enable security,然后选择对Security Realm选择Delegate to servlet container,对Authorization选择Legacy Mode

 

3)然后可以在右上角点击login或者http://yourhost/jenkins/loginEntry来登录,登录后此时你用户管理员权限,可以执行任何的操作。执行完操作后可以选择logout

 

4developers增加rebuild的权限。

使用管理员登录对需要developer rebuildjob,选择Trigger builds remotely,且设置Authentication Token,例如设置为devbuild,然后developers可以访问http://jenkinsHost/job/project/build?token=token
来启动build

其中Project为你需要启动buildjob。其中token为你设置的Authentication Token

如果你有webserver,你可以创建如下的webpage来让developers来启动build

<h1>Jenkins Force
Build Page</h1>
<ul>
    <li>
    <a href="http://jenkins:8080/job/FOO/build?token=build">Force
build of Project FOO on Jenkins</a>
    </li>
</ul>


3使用Jenkins的数据库管理用户且设置用户的访问权限

1)在Manage Jenkins -> Configure
System -> Enable Security
下为Security Realm选择Jenkins's own user database,且确保Allow users to sign up选中,为Authentication选择Matrix-based security。如下:

2)接着在主页上signup创建第一个管理员账号jenkins如下:

 

3)除了第一个账号以后signup的账号将为只读账号需要管理员分配权限。例如你可以signup来创建dev账号,然后分配权限使得dev可以启动jobbuild。如下:

 

注意:%JENKINS_HOME%\config.xml中可以查看和修改所有用户的权限设置,但是修改后需要重新启动Jenkins

可以参考:

https://wiki.jenkins-ci.org/display/JENKINS/Quick+and+Simple+Security

https://wiki.jenkins-ci.org/display/JENKINS/Standard+Security+Setup

 

 

 

三, 使用jenkins新建项目并配置;                   (第三步,新建项目并配置)

在浏览器中输入:http://localhost:8080/jenkins ,打开jenkins配置管理首页面,下面的操作都是基于jenkins的首页面的操作;假如是第一次或新建一个jenkins管理项目,则需要按如下基本步骤进行配置:

 

(1) 新建
JenkinsTest Job

填写job name项:JenkinsTest;并选择创建一个“Build a free-style software project”,如下图:

点击“OK”后,进入到项目配置页面,然后进行自己配置;

 

(2)配置 JenkinsTest

然后我们就可以很方便的配置这个 JenkinsTest 项目了。Jenkins 很人性化的一点是在每个配置项的右侧都有一个帮助的图标,点击这个图标,Jenkins 会告诉您如何配置这个配置项。在“source code management”中选择“Subversion”项,如下图:

 

(3)配置版本控制库 SVN 服务器

源代码管理根据自己的需要进行选择,根据实际的 SVN 服务器服务器信息配置 Source Code Management,这能让 Jenkins 知道如何从哪里获取最新的代码,我的源代码是使用svn管理的,这里选择“Subversion Modules”,在"Repository
URL"
录入你的svn仓库地址;第一次录入时还需要输入登录svn仓库的用户名和口令。本例中假设 Repository 就在本地。

本地路径格式:
file:///home/sun/svn/myproject

远程路径格式: svn://localhost/myproject

             
http://localhost/myproject
(只适用于已经搭建好SVN的web服务器的情况)

 

(4)选择如何触发构建

通过构建触发器“Build Triggers”配置如何进行触发构建,jenkins内置的构建触发器有四种选择:

1 build after other projects are
built 
    可以设置多个依赖的jobs,当任意一个依赖的jobs成功后启动此build  多个依赖的jobs间使用,隔开。

2 Trigger builds remotely (e.g.,
from scripts)
 Authentication Token中指定TOKEN_NAME,然后可以通过连接JENKINS_URL/job/JOBNAME/build?token=TOKEN_NAME来启动build

3  build periodically   schedule中设置,语法类似于cron中语法。

4 Poll SCM      schedule中设置时间间隔来抓取SCM server,如果有新的修改,则启动build所以这里的作用相当于continous build

根据开发需要,假设每一个小时我们需要重新构建一次。选择
“Build
periodically”
,在
“Schedule” 中填写 0 * * * *。

第一个参数代表的是分钟 minute,取值 0~59;

第二个参数代表的是小时 hour,取值 0~23;

第三个参数代表的是天 day,取值 1~31;

第四个参数代表的是月 month,取值 1~12;

最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。

所以 0 * * * * 表示的就是每个小时的第 0 分钟执行一次构建。

 

下图是 设置为轮询SVN的代码服务器

若还不甚明白,可以点击后面的帮助图标,点击这个图标,Jenkins 就会告诉您应该如何配置这个配置项。

 

(5)选择build 方式

接下来就是要添加 build 的步骤了。Jenkins 提供了四个选项供我们选择,可以根据需要执行或调用外部命令和脚本。

在本例中,我们通过调用和执行Shell脚本 ,将 SVN repository 中 C/C++ 代码编译并生成elf二进制文件。也可以根据项目的实际编写自己的 shell 脚本配置在这里。在编写shell脚本时,需要注意可以使用一些jenkins自己的环境变量。

 

配置 Execute Shell

    例如:cd ${WORKSPACE}/myproject ;
/bin/bash ./build.sh

附注:jenkins内置的环境变量

BUILD_NUMBER,   唯一标识一次build,例如23;

BUILD_ID,         基本上等同于BUILD_NUMBER,但是是字符串,例如2011-11-15_16-06-21;

JOB_NAME,        job的名字,例如JavaHelloWorld;

BUILD_TAG,       作用同BUILD_ID,BUILD_NUMBER,用来全局地唯一标识一此build,例如jenkins-JavaHelloWorld-23;

EXECUTOR_NUMBER,   例如0;

NODE_NAME,          
slave的名字,例如MyServer01;

NODE_LABELS,        
slave的label,标识slave的用处,例如JavaHelloWorld MyServer01;

JAVA_HOME,          
java的home目录,例如C:\Program
Files (x86)\Java\jdk1.7.0_01;

WORKSPACE,          
job的当前工作目录,例如c:\jenkins\workspace\JavaHelloWorld;

HUDSON_URL =
JENKINS_URL

jenkins的url,例如http://localhost:8000/

BUILD_URL,            
build的url 例如http://localhost:8000/job/JavaHelloWorld/23/;

JOB_URL,              
job的url,例如http://localhost:8000/job/JavaHelloWorld/;

SVN_REVISION,         svn
的revison,

 

(6)配置邮件提醒

在选择完成build方式后,选择“Post-build Actions”配置其他的选项,有7种方式可选:

比如邮件提醒设置,

 

(7)配置保存

然后点击 save ,保存jenkins的配置信息。

 

 

四, 项目的构建jenkins使用                            (第四步,jenkins基本使用说明)

(1) JenkinsTest 开始构建

接下来的每小时的第 0 分钟,JenkinsTest Job 就会被构建;或者在工作区域的左边菜单上点“build now”,开始构建项目。我们可以在 Jenkins 中观察构建的进度和最终的状态——成功或者失败。太阳代表之前的构建没有任何失败,如果构建成功,则项目状态的S为蓝色,如果失败则为红色。

 

(2) JenkinsTest 构建的 console 输出

同时我们可以点击 JenkinsTest 查看单次构建的 Console 的输出结果。从中我们能看到构建的第一步是从 SVN 服务器上 check out 代码,然后调用我们先前配置的 shell脚本。

 

构建失败的 Console 输出:

构建完成,左边菜单会显示有“控制台输出”,点击可以查看控制台详细输出。构建错误时也可以根据相应的错误信息进行修改。我们可以看到 build 的最后结果 FAILURE,表明本次构建失败了,从前面可以看到是因为找不到build.sh文件。

 

构建成功的 Console 输出:

最后,可以看到 build 的最后结果 Success,表明本次构建成功。

 

 

五, jenkins与CI插件集成 

5.1  项目中存在的问题

在当前项目中,存在问题:

■ 代码风格各异,同时缺少必要代码注释

 常出现空指针类似的基础bug

■ 代码单元测试缺失,测试场景覆盖不大

■ 重复代码大量出现

■ 转测试后,基础用例需要大量人力去验证

■ 其他:缺少性能测试

 

可能会导致的后果:

 他人阅读代码困难,后期维护成本增加

■ 代码质量不高,后期维护成本增加

■ 开发成本增加,后期维护成本增加

■ 测试成本明显增加

因此需要一个持续代码集成,能够让开发或测试减少成本,提高质量工具,而jenkins正好可以与CI插件集成起来,实现这些功能。

 

5.2 解决方案

■ 代码风格各异,通过统一checkstyle样式来检查

■ 常出现空指针类似的基础bug,可以通过findbugs静态检查

■ 多余if或者try catch,可以通过pmd检查

■ 单元测试用例测试功能结果,可以通过xunit报告检查

■ 大量重复代码,可以通过duplicate code报告来检查

■ 测试用例覆盖度,能够通过clover来检查

■ 基础功能,可以通过selenium自动化测试

■ 性能测试,可以通过jmeter来完成

虽然项目人员能够自己使用这些工具,完善代码,提高质量,但是却不方便项目统一管理。而Jenkins能够集成这些插件,做到统一管理,解决项目问题。

Jenkins,之前叫做Hudson,是基于Java开发的一种持续集成工具,用于监控秩序重复的工作。

主要包括:

1、持续的软件版本发布/测试项目。 

2、监控外部调用执行的工作。 

Jenkins能够集成各式插件,如常用CI插件:deploy,junit,findbugs,pmd,checkstyle,clover, duplicate code,jmeter,selenium等,而这些工具正好可以解决项目存在一些问题。

 

5.3 实施方案

jenkins上CI插件安装

■ 手动安装

第一步,查询需要插件名称 https://wiki.jenkins-ci.org/display/JENKINS/Plugins

第二步,查询插件是否依赖其他插件

第三步,进入插件下载页面http://updates.jenkins-ci.org/download/plugins/?C=N;O=D,下载插件

第四步,将插件放到${jenkins安装目录}/jenkins_home/plugins,手动重启服务。即进去${jenkins安装目录}/tomcat7/bin,使用shutdown.sh与startup.sh关闭或者启动jenkins服务。

 

■ jenkins管理平台安装

第一步,进入jenkins管理平台,点击登录。(第一个注册的即为管理员)

第二步,点击左边菜单系统管理,在弹出页面中选择管理插件

第三步,点击可选插件,找到需要安装插件

勾选安装后重启或者先下载重启后再安装,也可以进入命令行手动重启jenkins。

 

附注:

具体的安装步骤可以参考:http://wchlt.blog.163.com/blog/static/2196057201372833659235/

 

5.4 常用插件安装

pmd

checkstyle

Publish Over FTP
Plugin

Cppcheck Plugin

Static Code
Analysis Plug-ins

Doxygen Plugin,

Dependency Graph
View Plugin
,

cmakebuilder
Plugin
 : 支持cmake的构建;

 

 

第三部分,结束语

本文简单介绍了持续集成的概念并着重介绍了如何基于
Jenkins 快速构建持续集成环境。通过具体实例的描述,相信读者对 Jenkins 的基本功能和实现方法有个更清楚地认识和理解。其实,Jenkins 的功能远不至文中所述的这些,Jenkins 还有详尽的日志处理和持续集成构建状态的分析等功能。希望在进一步的学习和应用中与大家分享。

 

 

 

 

---恢复内容结束---

个人环境搭建——搭建jenkins持续构建集成环境的更多相关文章

  1. 从零开始搭建Jenkins+Docker自动化集成环境

    本文只简单标记下大概的步骤,具体搭建各个部分的细节,还请自行搜索.第一.二部分只是对Jenkins和Docker的简单介绍,熟悉的同学请直接跳到第三部分. 一.关于Jenkins Jenkins简介 ...

  2. Docker学习总结(13)——从零开始搭建Jenkins+Docker自动化集成环境

    本文只简单标记下大概的步骤,具体搭建各个部分的细节,还请自行搜索.第一.二部分只是对Jenkins和Docker的简单介绍,熟悉的同学请直接跳到第三部分. 一.关于Jenkins Jenkins简介 ...

  3. Jenkins持续部署-Windows环境持续部署探究1

    目录 Jenkins持续部署-Windows环境持续部署探究1 目录 前言 目的 方案流程 技术实现 PowerShell FTP上传插件 环境变量插件 脚本执行 远程调用 升级服务 启动服务 总结 ...

  4. Jenkins持续构建打包后端服务流程详解

    背景运用场景及思路 1.为响应后端开发人员需求,提升项目开发过程效率,选择Jenkins持续构建,进行导包启动一键持续集成 思路: 使用jenkins自带,立即构建->SVN拉取代码,通过Jen ...

  5. Jmeter+Jenkins+Ant自动化集成环境搭建

    搭建环境: JDK:jdk1.8.0_92 Ant:apache-ant-1.9.7 Jmeter: apache-jmeter-3.0 Jenkins:jenkins-2.19.3 具体环境配置 1 ...

  6. Jenkins+Docker自动化集成环境搭

    关于Docker Docker 简介 Docker现在是Github社区最火的项目之一,Docker是个容器,或许你听过lxc,你可能知道Tomcat这个Web容器,容器是什么概念,意会就好.问个问题 ...

  7. SVN+Maven+Tomcat+Jenkins持续构建

    一.准备工作 1.1安装软件 安装JDK.SVN.Maven.Tomcat.Jenkins及必要插件. 1.2安装jenkins所需插件 最开始安装jenkins时选择安装默认的插件. 其他插件: M ...

  8. 《Java从入门到失业》第二章:Java环境(四):IDE集成环境

    2.4IDE集成环境 在掌握了编写.编译和运行Java程序的基本步骤以后,你肯定就在想,这太麻烦了,有没有更好的工具?当然有了,那就是IDE.IDE就是专业的集成开发环境(Integrated Dev ...

  9. windows环境下简单Jenkins持续集成搭建

    Jenkins是基于Java开发的持续集成工具,所以在安装Jenkins之前我们要确定电脑上已经安装了Java JDK并且环境变量配置正确,否则在启动使用java -jar Jenkins.war启动 ...

随机推荐

  1. 重学css3(概览)

    css3新特性概览: 1.强大的选择器 2.半透明度效果的实现 3.多栏布局 4.多背景图 5.文字阴影 6.开放字体类型 7.圆角 8.边框图片 9.盒子阴影 10.媒体查询 浏览器内核又可以分成两 ...

  2. Jmeter压力测试工具基本使用

    转:https://blog.csdn.net/envyfan/article/details/42715779

  3. Oracle下如何收集 Systemstate dump

    2: dump (不包括lock element) 10: dump 11: dump + global cache of RAC 256: short stack (函数堆栈) 258: 256+2 ...

  4. mysql查看版本,编码

    SELECT * FROM gps_gpsinfo t WHERE t.reportdate < TO_DATE('2019/4/28 10:05:07', 'yyyy-MM-dd hh24:m ...

  5. java算法面试题:有数组a[n],用java代码将数组元素顺序颠倒

    package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...

  6. CURLOPT_PROGRESSFUNCTION

    Author:李强(李祥祥) Date   :2012-12-15 17:26 LIBCURL官方网站都没有说清楚道明白进度函数的参数的作用,这点我感觉文档很片面,经总结如下: size_t CUpl ...

  7. 虚拟机Linux_Mint中安装vmtools增强工具

    一开始用VmwarePro安装Linux系统时,系统的整体界面会缩在屏幕中间的一小块区域内.如图: ​ 看的会非常吃力.为了更好的解决这个问题,就需要安装Vmtools增强工具.安装步骤如下: 1. ...

  8. docker部署Ceph分布式存储集群

    1.环境准备 3台virtualbox虚拟机,用来安装ceph集群,已用docker-machine安装上了docker,每台虚拟机虚拟创建一个5G的硬盘,用于存储osd数据,例如:/dev/sdb ...

  9. 【原创】数据处理中判断空值的方法(np.isnan、is np.nan和pd.isna)比较

      转载请注明出处:https://www.cnblogs.com/oceanicstar/p/10869725.html  1.np.isnan(只有数组数值运算时可使用) 注意:numpy模块的i ...

  10. 【前端_js】Chrome禁止缓存的方法

    在前端开发中,浏览器缓存使得我们改了代码后页面不变,得经常手动清理缓存. 1.按如下操作即可禁用浏览器缓存, 这种方法基本能够做到完全禁止缓存,然而缺点是必须要将开发模式一直打开,占用屏幕空间.而且, ...