当前位置 : 首页 » 文章分类 :  开发  »  Jenkins使用笔记

Jenkins使用笔记

Jenkins使用笔记


概述

Jenkins官网
https://jenkins.io/

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

功能
1、持续的软件版本发布/测试项目。
2、监控外部调用执行的工作。

下载
从官网下载war包版本


启动

首先保证系统中已经安装了jdk1.5及以上。

java启动

切换到jenkins.war所在目录:
java -jar jenkins.war
然后在浏览器中输入 http://localhost:8080,即可打开Jenkins界面
或者写一个启动脚本:

export LANG="zh_CN.UTF-8"

export ANT_HOME=/opt/app/icdev/tools/apache-ant-1.9.4
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
export CLASSPATH=.:$ANT_HOME/lib/ant.jar:$ANT_HOME/lib/*.jar
#export JAVA_HOME=/usr/java/jdk1.6.0_45
export JAVA_HOME=/opt/app/icdev/tools/jdk1.7.0_75

nohup java -Dfile.encoding=UTF-8 -jar jenkins.war --argumentsRealm.passwd.后台用户=密码 --argumentsRealm.roles.jenkins=admin &

来后台启动Jenkins

容器中启动

用tomcat打开,解压tomcat到某个目录,如/usr/local,进入tomcat下的/bin目录,启动tomcat 将jenkins.war文件放入tomcat下的webapps目录下,浏览器中打开 http://localhost:8080/jenkins/


插件安装

Jenkins页面->系统管理->插件管理->可选插件->选择插件,直接安装

创建新任务

新建 -> 构建一个maven2/3项目 -> OK
输入描述:

<p/>
<h2> <b>航空产品研发部</b> <p/></h2>
<h2>用途:TAPI封装</h2><p/>
<h3>联系人:麻思</h3><p/>
<h3>邮箱:masi@travelsky.com</h3><p/>
<h3>电话:56435327</h3>

参数化构建

添加参数:List Subversion tags(and more)
Name:BranchName
Repository URL:svn地址
Credentials:svn账号密码

添加参数:String Parameter
名字:TagName
默认值:RE-RAS-TST-1.8.0-T1-20180208

源码管理

由于使用svn管理源码,源码管理选择Subversion
Repository URL:输入源码svn地址:http://172.16.125.37/svn/addddp/adap2/src/re-ras-branch/$BranchName
这里引用了参数化构建的一个参数BranchName,所以执行构建时,输入的BranchName参数必须和svn目录中的分支名完全一致,否则找不到源码
Credentials:svn账号密码

构建

构建触发器,Build whenever a SNAPSHOT dependency is built,即svn有修改时就构建
构建(Build):
Maven Version:Maven 3.0.5
Root POM:pom.xml
Goals and options:clean install -Dmaven.test.skip=true -s settings.xml -X
将settings.xml上传到svn工程根目录,否则找不到settings.xml配置,无法从maven私有库中下载依赖包
构建设置,勾选E-mail Notification,Recipients输入邮箱地址

构建前步骤(Pre Steps)

Add pre-build step 添加构建前步骤,选择Execute shell,执行一段Linux shell脚本。
Command:

echo $WORKSPACE
cd $WORKSPACE
rm -rf sql
rm -rf war
mkdir war
mkdir sql

rm -rf src/**/target/*.war
rm -rf src/config/*

清理工作空间中之前构建的war包

构建后步骤(Post Steps)

Add post-build step 添加构建后步骤,选择Execute shell,执行一段Linux shell脚本。
Command:

cp **/target/*.war war

将构建好的war包拷贝到war目录下


SonarQube

sonar-maven-plugin是用来扫描代码的,SonarQube服务器是用来展示扫描结果的(提供一个页面,需连数据库)

配置SonarQube服务器

Jenkins页面->系统管理->系统设置->找到SonarQube配置项
Server URL:填入SonarQube服务器地址,默认为http://localhost:9000
SonarQube account login:登录账号
SonarQube account password:密码

增加sonar构建步骤

增加构建后步骤:Add post-build step -> Invoke top-level Maven targets
Maven Version:maven_sonar 3.0.5
Goals:

org.codehaus.mojo:sonar-maven-plugin:2.6:sonar
-Dsonar.host.url=http://172.27.18.66:9000/
-Dsonar.login=sonaruser
-Dsonar.password=Sonar@123
-Dsonar.scm.url=scm:svn:http://172.16.125.37/svn/airlineIT_adap/srv-integration/src/srv-inte
-Dmaven.test.failure.ignore=true
-Dmaven.test.skip=false
-s settings.xml

查看Sonar扫描结果

构建完成后,可在关联的SonarQube服务器(默认http://localhost:9000)中查看扫描结果。
对于maven项目,扫描完成后在sonar中的项目名是pom.xml中的artifactId,和Jenkins job名称无关。


节点

Jenkins的分布式构建,在Jenkins的配置中叫做节点,分布式构建能够让同一套代码或项目在不同的环境(如:Windows和Linux系统)中编译、部署等。

什么时候使用节点和作用
当我们使用多台服务器时,并且配置了tomcat或jboss集群服务,可通过jenkins的节点配置,将jenkins项目发布在不同服务器上(分布jenkins工作空间,部署项目到不同服务器的tomcat或jboss),这就形成了jenkins的分布式。节点服务器不需要安装jenkins(只需要运行一个slave节点服务),构建事件的分发由master端(jenkins主服务)来执行。

节点服务器的要求
注意:如果节点主机上不存在JDK,Jenkins会去自动下载,但Oracle对程序自动下载做了限制,会导致下载失败,然后一直循环这个问题。
建议:所有Linux或者Windows机器的环境路径统一(如:JDK、Maven),安装位置和jenkins所在服务器的JDK和maven必须一致,也就是说jenkins所在服务器和各个节点服务器中的JDK和Maven目录和文件名都是一样的。以便于管理、不容易出现问题。

新建节点
进入节点配置界面:
系统管理→管理节点→新建节点(左上角)
节点名称:建议使用字母、数字或字母和数字的组合。最好见名知意。不建议使用标点符号和中文(中文命名没有问题,但Job中无法引用)
Dumb Slave:新建一个节点
复制现有节点:从已存在的节点中复制一份配置(如果存在节点才会显示)
点击ok,节点创建成功后会自动跳转到配置页面

节点配置

Name:节点名称
Description:节点描述,支持中文
# of executors:最大同时构建数量(根据机器的性能定,单颗四核cpu建议不要超过5)【必须为数字】
Remote FS root:远程工作目录,节点的根目录(注意:如果目录不存在,会自动创建目录。你必须对该目录有读写权限,不然会报错:hudson.util.IOException2: Failed to copy xxxx)
Labels:标记(又叫做标签)用来对多节点分组,标记之间用空格分隔.例如’refression java6’将会把一个节点标记上’regression’和’java6’.举例来说,如果你有多个Windows系统的构建节点并且你的Job也需要在Windows系统上运行,那么你可以配置所有的Windows系统节点都标记为’windows’, 然后把Job也标记为’windows’.这样的话你的Job就不会运行在除了Windows节点以外的其它节点之上了.
用法:尽可能的使用这个节点/只允许运行绑定到这台机器的Job(根据你的需求,二选一)

Launch method

启动方式有四个选项。建议选择第1、2种方式配置。
详细如下:

  • 【推荐】Launch slave agents on Unix machines via SSH
    在Unix(包括Linux)机器上通过SSH通道连接节点 (适用于Unix和Linux)
      Host:节点主机的ip地址
      Credentials:凭据(如果为空或者不可选择,请在系统管理→Manage Credentials中配置。Manage Credentials的配置非常简单,这里就不在描述了。Manage Credentials配置完成后,需刷新节点配置页面才会显示。)
      Port:端口默认22
      JavaPath:[可选]JDK路径,默认和master节点相同。路径必须指定到Java程序,如:/path/bin/java
      JVM Options:[可选]JVM可选参数
      Prefix Start Slave Command:[可选]不知道干什么用的参数
      Suffix Start Slave Command:[可选]不知道干什么用的参数
       测试可以使用Unix命令,会自动拼接在[SSH] Starting slave process:[Prefix Start Slave Command] cd ‘/path’ && /path/bin/java -jar slave.jar [Suffix Start Slave Command]

  • 【推荐】Launch slave agents via Java Web Start
    通过Java Web Start连接节点 (适用于所有支持Java程序的系统)
      Tunnel connection through:[可选]在端口转发这种情况下使用
      JVM options:[可选]JVM可选参数
      这种方法的缺点:如果该节点宕机了,主节点无法自动重启它。

  • Launch slave via execution of command on the Master 通过主节点的控制台连接节点
       在写内容前吐槽一下Jenkins的帮助,说的云里雾里的。应该去看该选项下Launch command的帮助。
       Jenkins的开发者考虑到某些企业可能有N++ 个节点(N>=你猜!)。如果在界面配置,那么升级版本之类的操作会很麻烦。所以允许你使用shell脚本去配置管理节点(貌似很方便的样子)。具体的脚本需要你自己写。
      Launch command:Unix运行脚本的命令,如:sh aaa.sh

  • 【不建议使用】Let Jenkins control this Windows slave as a Windows service
    让Jenkins节点添加到Windows服务中
       这个选项比Launch slave agents via Java Web Start添加为服务更加稳定(帮助文档是这么说的)。采用这种运行方式,那么这个系统不能登录任何用户。这种配置方式是非常的麻烦和折腾。具体请查看 点我去看帮助
      Administrator user name:域\管理员账号
      Password:密码
      Host:节点主机IP或者域名
      Run service as:
        Use Local System User:使用本地系统用户
        Log on using a different account:使用不同的用户登录
          User name:账号
          Password:密码
        Use Administrator account given above:使用上面的用户登录
      Path to java executable:[可选]JDK路径。必须指定到Java程序,如:C:\Windows\system32\java.exe
      JVM options:[可选]JVM可选参数

Availability

  • Keep this slave on-line as much as possible:尽可能保持节点在线【推荐】
  • Take this slave on-line according to a schedule:根据时间表在线(类似于Linux的定时任务)

    • Startup Schedule:类似于Linux定时任务的时间,如下:
      # every fifteen minutes (perhaps at :07, :22, :37, :52)
      H/15 * * * *
      # every ten minutes in the first half of every hour (three times, perhaps at :04, :14, :24)
      H(0-29)/10 * * * *
      # once every two hours every weekday (perhaps at 10:38 AM, 12:38 PM, 2:38 PM, 4:38 PM)
      H 9-16/2 * * 1-5
      # once a day on the 1st and 15th of every month except December
      H H 1,15 1-11 *
      如果使用 H Jenkins会自动提前一段时间连接节点,避免出现同一时间高并发的问题
      
    • Scheduled Uptime:超过任务时间后延迟多少分钟离线。如果此数值大于在线总时间(单位:分),就会一直保持在线【必须为数字】
    • Keep on-line while jobs are running:当有Job在构建时(到达离线时间了)继续保持在线
  • Take this slave on-line when in demand and off-line when idle:让Jenkins根据需求自动连接或者离线

    • In demand delay:告诉Jenkins如果有Job需要在此节点构建,需要在任务队列等待多长时间才会进入任务状态进行构建【必须为数字】
    • Idle delay:告诉Jenkins多少分钟内如果没有Job需要构建就离线【必须为数字】

Node Properties

  • Environment variables:配置环境变量(可以在脚本中引用)
  • Tool Locations:工具的目录【推荐】。说明:可以替换系统设置的各种工具目录。如:JDK目录、Ant目录、Maven目录等。好处就是在不更改Job配置的情况下,不同环境(如:Windows和Linux) Job配置通用。

参考


上一篇 c3p0

下一篇 Java-SPI

阅读
2,833
阅读预计12分钟
创建日期 2017-04-20
修改日期 2018-06-21
类别
百度推荐