设为首页 收藏本站
查看: 716|回复: 0

[经验分享] 个人环境搭建

[复制链接]

尚未签到

发表于 2018-1-7 10:33:36 | 显示全部楼层 |阅读模式
  ---恢复内容开始---
  搭建jenkins持续构建集成环境
  要搭建jenkins持续构建集成环境,首先要安装tomcat和JDK;
  
  第一部分,基本说明:
  
  敏捷(Agile)在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。
  它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。
  持续集成的核心价值在于:


  • 1.  持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;
  • 2.  持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;
  • 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的授权和访问控制
1Jenkins的授权和访问控制

默认地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内置的构建触发器有四种选择:
  1build after other projects are
built
可以设置多个依赖的jobs,当任意一个依赖的jobs成功后启动此build多个依赖的jobs间使用,隔开。
  2Trigger builds remotely (e.g.,
from scripts)
Authentication Token中指定TOKEN_NAME,然后可以通过连接JENKINS_URL/job/JOBNAME/build?token=TOKEN_NAME来启动build
  3build periodically schedule中设置,语法类似于cron中语法。
  4Poll SCMschedule中设置时间间隔来抓取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 还有详尽的日志处理和持续集成构建状态的分析等功能。希望在进一步的学习和应用中与大家分享。

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-432501-1-1.html 上篇帖子: Ubuntu上安装Jenkins 下篇帖子: 终端curl调用jenkins自动化持续集成
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表