CI 环境 (Jenkins) 搭建教程

一、安装前准备

本文档所演示的安装环境为Linux系统,首先得安装JDK并配置环境变量。参考:

linux下安装JDK8

其次下载Tomcat包到服务器上并解压。

二、开始安装

2.1 安装Jenkins

下载Jenkins War包:https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.58/jenkins.war

上传到Linux服务器的 TomcatWebapp目录下

 

启动Tomcat

cd /root/apache-tomcat-8.0.42/bin

./startup.sh

 

打开浏览器访问:http://10.10.11.109:8080/jenkins/ (根据自己的IPTomcat端口访问)

即可进入配置页面

 

默认初始访问Jenkin需要管理员密码,可以通过页面提示操作查看管理密码,查看Jenkins启动日志

Linux服务器输入

cat /root/.jenkins/secrets/initialAdminPassword

拷贝密码粘贴到文本框点击Continue

进入Jenkins设置页面,选择Install suggested plugins

 

等待Jenkins自动安装相关插件

 

安装完成之后需要创建一个超级管理员用户

 

创建用户之后我们就可以开始使用Jenkins

 

 

2.2 安装Jenkins插件

点击》系统管理》管理插件

 

查看已安装的插件

 

如果缺少下列插件请搜索安装

Box UK - JSLint

静态分析JS代码,并检出xml报告

 

Checkstyle Plug-in

将静态分析报告生成可视化报告

 

Email Extension Plugin

邮件通知扩展插件

 

Email Extension Template Plugin

邮件模板插件

 

Git Changelog

Git更新日志插件

 

Git client plugin

Git客户端插件

 

Publish Over SSH

SSH连接其他服务器插件

 

SSH plugin

SSH插件

 

安装时勾选重启Jenkins。等待重启完成即安装成功。

三、配置运行

3.1配置credentials & git ssh 认证

 jenkins 中使用 Git 插件从仓库中 pull 代码的时候会要求 jenkins 必须有 pull 权限(尤其是当git开启了ssh认证的时候),在配置 jenkins job 的时候有以下这些方法配置 ssh key:

方法1 : 
登陆 jenkins 服务器,切换到 jenkins 用户,生成 ssh key,然后把 公钥添加到 git 服务器上.

sudo su - jenkins // 切换到 jenkins HOME 目录

mkdir .ssh // 如果目录已存在则跳过

ssh-keygen -t rsa // 生成 ssh key, 复制 xxx.pub 公钥到 git 服务器上即可.

关于 ssh-keygen 请参考:点此查看

方法2 : 
 jenkins 上设置 Credentials,然后再新建job的时候使用设置的 Credentials 即可

jenkins界面,依次点击: Credentials -> System -> Add domain: 
Domain Name: 填写你git服务器的地址,如 github.xxx.com 
Description: 随便写一点描述,如 This is the Credential for github

如图所示:

 

点击 ok 后,在点击 adding some credentials?

进入页面后,可以选择 Username with password 或者 SSH Username with private key, 根据你的情况选择,这里我们选择 Username with private key

Username: 随便起一个名字,以便在创建 Job 的时候使用该 Credential 
Private Key:可以指定文件,也可以使用默认的 ~/.ssh,当然也可以直接将私钥复制粘贴到此处。 
Passphrase: 如果你在创建 ssh key 的时候输入了 Passphrase 那就填写相应的Passphrase,为空就不填写 
ID: 空 
Description 

 

点击 ok  Credential 就创建好了。

3.2系统配置

点击》系统管理》系统设置

 

3.2.1 配置SSH

配置SSH插件后,jenkins服务器可以自动将代码文件等传到另一台服务器。这里配置需要接收代码的服务器。

首先利用Linux服务器生成key使109服务器能实现免密登录到108服务器。

具体步骤请参见:http://blog.chinaunix.net/uid-26284395-id-2949145.html

然后在SSH remote hosts配置

 

3.2.2 配置管理员邮箱

配置管理员邮箱地址要和邮件发送人邮箱地址一致。

 

3.2.3配置邮件通知

如果没有显示下图全部选项,请点击邮件通知右下方高级按钮。

配置SMTP服务器,这个由邮箱供应商提供,演示为网易126邮箱,如需配置腾讯或其他邮箱,自行百度所选供应商SMTP服务器地址。

 

3.2.4配置Publish over SSH

配置该项要保证3.2.1 配置SSH已完成,两台服务器已实现无密访问。

Path to key是另一台服务器钥存放路径

 

配置好后点击右下角Test Configuration 按钮,出现success表示配置成功,否则请根据相应报错信息处理。

3.3 创建JOB

 

输入项目名称,选择构建一个自由风格的软件项目,点击OK

 

进入JOB配置界面

勾选丢弃旧的构建,并设置最大构建数为10

 

3.3.1配置源码管理

选中Git

Repository URL处粘贴Git项目的代码仓地址

Credentials 可以从下拉框选择配置好的Credentials。(必须保证3.1章配置完成才能选择

Branches to build 选择需要触发构建的分支,当该分支改变时触发构建

 

3.3.2构建触发器

远程触发器配置后,可以通过url访问触发构建

Poll SCM 时间设置为 */1 * * * *  1分钟触发一次检查Git是否有提交,有则触发构建。

如果性能影响过大或不需要如此频繁检查,可以设置成*/5 * * * * 5分钟或 */25 * * * * 25分钟等。

参考设置:

15分钟检查一次:H/15 * * * *   */5 * * * *

每天8点检查一次:0 8 * * *

每天8~17点,两小时检查一次:0 8-17/2 * * *

周一到周五,8~17点,两小时检查一次:0 8-17/2 * * 1-5

每月1号、15号各检查一次,除12月:H H 1,15 1-11 *

*/5 * * * * (每5分钟检查一次源码变化)

0 2 * * * (每天2:00 必须build一次源码)

 

 

 

3.3.3构建

3.3.3.1 Execute shell

点击增加构建步骤,选择Execute shell

 

 

填写

 

 

echo $JENKINS_HOME

echo $JOB_NAME

echo $BUILD_ID

cd /root/.jenkins/jobs

java -jar package.jar $JENKINS_HOME $JOB_NAME $BUILD_ID

 

  version:1.3    

 

package.jarlib.zip传到Jenkins所在服务器/root/.jenkins/jobs路径

解压lib.zip

Package.jar 作用是检出增量包 生成changelog日志

可以根据自己的需要来修改或拓展代码。

代码GitHub地址为:https://github.com/yaokwok/incremental_package_plug_in

3.3.3.2配置JSLint

JSLintJS静态化检查插件。

Files to scan : 配置需要检查的文件

Files to exclude : 需要过滤检查的文件

Log file : 检查结果输出路径

 

3.3.4构建后操作

3.3.4.1 Publish Checkstyle analysis results

Chekstyle插件将测试结果可视化显示。

Checkstyle results: 该路径要和3.3.3.2配置JSlint里的Log file一致。

 

3.3.4.2 E-mail Notification

邮件通知人设置

 

3.3.4.3 Send build artifacts over SSH

将代码发送到另一台服务器(一般是发送到测试环境或生产环境)

SSH Server Name 选择服务器(执行这一步的前提是3.2.1配置SSH已完成,否则无法选择

Remote directory:远程文件夹,代码将被发送到这里

Exec command:执行命令
cd /projects/site32/projects/site32

unzip -o source.zip

cat changelog.txt | while read line

do

if [[${line} =~ "Delete:" ]];then

rm -f ${line}

echo "DEL:${line}"

else

echo "File:${line}"

fi

done