持续集成工具 — Jenkins

 2018-06-10 22:15:32     Jenkins  持续集成  开源   380


导读: Jenkins 是一个用 Java 编写的开源的持续集成(CI)工具,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。它运行在 Servlet 容器中(例如 Apache Tomcat)。它支持软件配置管理(SCM)工具(包括 AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase 和 RTC),可以执行基于 Apache Ant 和 Apache Maven 的项目,以及任意的 Shell 脚本和 Windows 批处理命令。

持续集成介绍


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

持续集成的核心价值:

1、持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量

2、持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能

3、持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心

持续集成的原则:

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

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

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

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

持续集成系统的组成:

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

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

3、一个持续集成服务器,这里以 Jenkins 为例

Jenkins 部署


Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。

Jenkins 的部署十分简单,有三种方式。

Jar方式


首先,在 Jenkins Download 下载 Generic Java package (.war) 。

然后,运行 war 。

java -jar jenkins.war --httpPort=8080

Tomcat容器方式


将下载的 war 包放入 tomcat webapps 目录下,或者直接替换掉 webapps 下的 ROOT 文件。

unzip jenkins.war -d /path/tomcat/webapps/ROOT

详细可参考 Jenkins wiki

Docker方式


前提条件是已经安装了 Docker

# 安装 jenkins
docker pull jenkins/jenkins:lts

docker pull jenkins/jenkins

# 查看镜像
docker images

# 启动jenkins
docker run -d --name jenkins01 -p 8080:8080 -p 50000:50000 -v /work/app/docker-jenkins/jenkins01:/var/jenkins_home /etc/localtime:/etc/localtime:ro jenkins/jenkins:lts

注意:

1、Jenkins 启动,需要指定 JENKINS_HOME,默认指定到 ${user.home}/.jenkins。也可以自己配置 JENKINS_HOME 环境变量进行更改

2、基于 Jar方式 的部署,默认会将 war 解压到 ${JENKINS_HOME}/war 目录下

3、基于 Tomcat方式 的部署,可能会出现页面标签解析出错的问题(表现为 “系统配置” 页面没有 “保存” 按钮等现象)。根据官方的说法,这种现象很随机,可以先按照 issues 尝试修复,如果无法修复,建议采用 Jar方式 部署

4、基于 Docker方式 的部署,需要注意用户账号的问题,这里 container 实例默认是以 jenkins 用户运行,但是,Docker 本身是以 root 用户的 docker 组身份运行的,所以,在部署服务器上,需要将 jenkins 用户加到 docker 组,同时,在slave 节点需要创建一个 jenkins 用户和用户组,用来与 master 进行免密钥操作

Jenkins 配置


Jenkins 成功启动后,在浏览器输入http://yourhost:port/,进入 Jenkins

首先,是解锁界面,需要输入 admin 用户的密码,该密码在首次启动时会在控制台或日志中打印出来,也可以在 ${JENKINS_HOME}/secrets/initialAdminPassword 中找到。

成功登录后,进入插件安装。这里的网络连接可能被墙,需要翻墙,否则无法安装插件。如果网络无法安装插件,可以事先在阿里云上按量申请一台低配的 ECS (这里的网络可以安装插件),用来临时安装 Jenkins,在该服务器将所需插件都安装完成后,将 ${JENKINS_HOME}/plugins 目录下的 .jpi 文件拷贝下来,放到真实部署环境目录下即可。

然后,配置一个管理员帐号,用来替换 admin

最后,进入 Jenkins 的用户界面。

插件


Jenkins 的主要功能都是通过插件来完成的,所以,安装适用的插件,是使用 Jenkins 必备的条件。

在 “系统管理” -> “插件管理” 中,可以进行插件的安装、卸载等操作。

除了推荐安装的插件外,一般还需要的插件有:

插件名称 说明
Maven Integration plugin maven插件
Local plugin 本地化插件
Blue Ocean Blue Ocean插件。如果安装的是 Blue Ocean 版本 jenkins,就不需要安装该插件
Publish Over SSH 远程发布插件
SSH SSH 远程执行shell命令插件。安装 Publish Over SSH 时,会自动依赖安装,如果没有安装,可以单独安装

其它插件,可以根据需要进行安装。

由于网络原因,在安装插件时,会出现连接超时的异常。这时,可以将 “升级站点” 的 URL 修改成网络较好的地址(配置在 “插件管理” 中的 “高级” 页面下)。

将 “https://updates.jenkins.io/update-center.json” 改成 “http://mirror.esuni.jp/jenkins/updates/update-center.json”

站点的网络状况可以参考这里

节点说明


一般,一个服务需要部署在多台服务器上,为了便于理解,对服务器部署进行举例说明:

域名 IP 作用
master 192.168.1.1 部署 jenkinsmaven 服务
slave01 192.168.1.2 业务部署服务器
slave02 192.168.1.3 业务部署服务器
scm 192.168.1.4 git 服务器

Credentials


masterslave 分发部署时,需要证书。证书的方式可以是:用户名 + 密码、也可以是免密钥登录等。

前提: master 与所有 slave 实现了免密钥登录。

下面以免密钥登录为例,配置 master 与所有 slave 的密钥信息:

jenkins-credentials

注意:

  • Username 为免密钥的登录用户名
  • ID 值是自动生成的,不用填写

节点管理


在 “系统管理” 下的 “节点管理” ,可以对所有 slave 节点进行配置。

jenkins-credentials

  • 名称:slave 服务器的名称
  • 描述: 对服务器的描述
  • 并发构建数: 允许该服务器同时并发的任务数
  • 远程工作目录: slave 允许 master 操作的工作目录
  • 标签: slave 服务器的标签
  • 用法: 根据情况选择
  • 启动方式: slave 挂载到 master 的方法,一种是在 master 执行命令,一种是 SSHslave 执行命令。这里选择第二种:Launch slave agents via SSH。不同的选择,对应不同的配置。这二种选择,“主机” 为 slaveIP 或域名,Credentials 选择配置的证书
  • 可用性: 根据情况选择

所有 slave 以此类推配置。

系统设置


这里是全局的系统配置,根据需要选择性配置即可。

jenkins-credentials

全局工具配置


这里是软件工具的环境配置。如:Java、Maven、Git、Gradle、Docker等,用到的就需要配置。

一般来讲,如果在系统环境变量中,已经将软件命令配置到PATH 中,可以不用再配置。但是,执行任务时,偶尔会出现命令找不到的问题,所以,建议都配置一下。

jenkins-tools-config

完成以上配置,就可以开始做持续集成工作了。


参考