5分钟学会jenkins

小TOT 创建于 2017-06-21

jenkins简介

输入图片说明 jenkins是什么,简单的讲它是一个持续集成工具,由java编写的开源项目,并且完全免费。如果你之前用过jenkins相信对jenkins有一个简单的认识。试想一下这样一个场景,在软件的开发过程中,我们常常需要做一些重复的工作,比如编译,测试,部署等。就以java web程序部署为例,将软件部署到一台机器我们首先需要编译,打包,然后将程序(eg:war包)放指定的容器目录下,然后重启容器,这样我们就完成了部署工作。一次两次还好,如果经常这样,相信每个人都要抓狂。是的这样简单重复的劳动会消耗掉我们大部分的时间。

也许你会说,这个问题很好解决,自己编写个脚本,比如shell脚本来帮我们完成一些器械的工作。每次需要执行是,只需要登录到目标机器,然后执行脚本就可以完成了。这确实是一个不错的注意,但是你有没有想过,如果有10个或者几十个这样的任务呢?没错,你可以写几十个shell脚本。但是还有个问题,这些shell脚本的维护又会成为一个问题,如何控制执行任务的权限,因为很多敏感或者重要的操作,并不需要所有人能改执行。jenkins就是来解决这些问题的,使用jenkins创建jobs,将你想要完成的工作配置在jenkins上,需要执行时,点一下按钮就可以了。

下载&安装

jenkins的下载可以到官方网站下载。官网提供了几乎所有平台的安装包,如果确实没有你所在平台的安装包也没关系,只要有java运行环境,能够部署war包也行。jenkins本质上是一个java servlet 应用。

下载页面

这里就不具体展示安装过程了,文章的主要是讲解配置和使用。写这篇文章的目地在于记录一些在jenkins的一些配置。

jenkins初始化

文章使用ubuntu 16.4安装jenkins。安装比较简单,下载deb文件,使用ubuntu自带的软件管理器进行安装。安装完成后会将jenkins注册到系统服务里面,默认是开机启动的。使用下面的命令启动jenkins

># service jenkins start

启动完成后,访问http://localhost:8848/即可进入jenkins的初始化界面。jenkins初始化界面 初始化jenkins时,会在jenkins的宿主机器上为admin用户生成随机秘密。登录机器使用文本编辑器即可查看密码。将密码贴入文本框点下面的continue,完成认证操作,进入配置操作。 配置jenkins 配置操作主要为jenkins安装一些插件,正常情况下,安装jenkins建议的插件即可,如果你有特殊需求,可以自定义安装插件。由于插件市场服务器在国外,因此可能在安装的过程中出现网络错误。可以多次尝试,或者使用vpn。

插件安装界面 网络不好的情况下,很多插件可能安装不成功,这其实也没有关系,我们完全可以后续在插件市场进行安装。

插件安装完成后就进入类创建管理员的界面。这里我们需要设置admin相关设置信息。如下图 设置admin

使用jenkins创建第一个job

点击new-item创建新的job,选择freestyle project如下图。创建任务 job设置需要对job的General,Source code Managment,Build tiggers,Build Enviroment,Build。以上项目不是必须设置的。可以根据自己的需求进行设置。

General

general

  1. Discard old builds:忽略之前的的构建记录。
  2. Github project:这个是github plugin插件提供的功能,可以将github上面的代码作为代码源。jenkins可以通过安装插件来扩展功能。若在设置中没有发现需要的功能,可以到插件市场上搜索安装这些插件。 3,This project is parameterized,可以在构建的时候配置自定义参数。 其他一些设置的解释可以查看后面的“?”中的说明,或者百度。 4,throttle builds可以设置项目的延期执行。

构建

build中可以选择构建方式:execute windows batch command,execute shell,invoke ant,invoke top-level maven targets,run with timeout。如果要扩展更多的构建方式,可以在jenkins插件市场安装对应的插件。下图演示了执行shelll脚本的构建。 build

构建后需工作

构建完成后,我们可以在add post-build action中添加后续过程。比如e-mail-notification可以设置构建完成后给指定邮箱发送邮件。 post-build

执行job

点击build now开始执行项目。 输入图片说明

插件管理

选择,jenkins管理-->插件管理 进入插件管理页面。jenkins提供来一个插件市场,我们可以根据需求下载。如果你不知道哪一个插件能满足你的需求,可以百度或者google。如果插件市场里面的所有插件都不能满足你的需求,如果有兴趣还可以自己编写插件。 官方插件市场

节点管理

jenkins支持分布式,可以在master上配置节点,将任务分摊到多个节点执行,比如软件包的编译操作,由于软件的编译构建是一个比较耗时的操作,我们可以将不同的任务分配到不同的节点去执行,然后再上传到统一的服务器(例如ftp服务器),部署这些程序时只需要在ftp服务器下载编译结果。另外,需要在多台机器上执行命令,使用execute shell over ssh能够解决这个目的。但是使用jenkins节点,会更加灵活,使用节点就像是在目标机器部一个jenkins服务一样,但是所有的任务由master统一管理。下面简单介绍如何配置jenkins节点。

选择jenkins manage-->管理 nodes-->进入节点管理。 新建节点 点击ok,进入节点配置界面,输入相关信息,其中最重要的是节点链接配置,我们可以选择使用ssh的方式进行node链接,我们只需要输入目标node的host,用户名/密码即可完成配置。配置完成后,点击链接会在目标机器的目标目录上传一个slave.jar。至此我们就可以node节点就配置完毕。我们新建任务的时候,通过配置General-->Restrict where this project can be run以制定任务在某个节点执行。

使用jenkins的一些坑

jenkins服务前缀

有些时候,我们希望以host/jenkins/来访问jenkins的服务。jenkins提供类修改服务前缀的配置。我们可以通过修改配置文件来修改jenkins服务的前缀。ubuntu安装的jenkins配置文件为/etc/default/jenkins。通过修改配置文件里面的JENKINS_ARGS添加--prefix=/yourprefix/

BUILD_ID=DONTKILLME

默认情况下,jenkins中的shell执行完毕后,会将shell执行过程中新建的进程杀掉。例如我们在shell中启动了一个服务,一旦shell执行完成后,shell中启动的这个服务会背kill掉,这样会导致服务启动不成功。这个时候我们可以在shell脚本第一行添加BUILD_ID=DONTKILLME来防止这个问题的发生。> 这里输入引用文本