Jenkins打造强大自动化工作流

前面一期我们聊了使用Travis进行持续集成,但是对于非开源项目来说129刀每月的价格还是挺贵的。穷则变,变则通,通则达。所以我们今天来讲讲Jenkins。

Jenkins是一款由Java开发的开源软件,旨在提供一个开放易用的软件平台,是持续集成变成可能。它的前身是大名鼎鼎的Hundson(收费的商用版本),Jenkins是其的免费开源分支。

再聊聊持续集成

前面的那一篇文章,简单的聊了聊持续集成,重点放在了Travis上了。这节在开始讲Jenkins之前。再来回顾一下,以下摘自是IBM团队的定义:

随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。

持续集成的核心价值在于:

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

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

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

持续集成的原则

业界普遍认同的持续集成的原则包括:

需要版本控制软件保障团队成员提交的代码不会导致集成失败

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

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

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

持续集成系统的组成

由此可见,一个完整的构建系统必须包括:

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

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

一个持续集成服务器,本文将介绍的 Jenkins 就是一个配置简单和使用方便的持续集成服务器

* 以上内容摘自网络,具体出处不明

说了这么多,你可能还是一脸懵逼,它有什么用?比如说,我们部署node项目,每次都要先ssh登录,再通过tar包,或者是版本控制工具把最新的源码拉到机器上,然后执行 或者是 再启动。但是我们用来Jenkins,Travis之类的持续集成工具,只需要动动鼠标点下 就可以了

安装Jenkins

Jenkins 安装很简单,可以参考https://jenkins.io/download/,上面写的很详细。这儿就只介绍war包和docker的方式来安装,下载最新的war包后,只需要运行命令:

虽然本文是讲Jenkins的,这儿也来聊聊使用docker部署Jenkins。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

首先是需要安装docker的,可参考官方文档https://docs.docker.com/install/。需要注意只有 用户和 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 用户。因此,更好地做法是将需要使用 的用户加入 用户组。

退出当前终端并重新登录,去docker hub 找到Jenkins镜像,并下载

现在我们基于刚刚下载的镜像,创建一个容器并将Jenkins跑起来

将Jenkins容器的文件存储挂载了主机上,可以方便我们做数据持久化。这儿是挂载到的 下的,我们需要先新建这儿目录并修改修改文件夹的归属者和组。(如果你是这个目录放在当前用户目录下则不需要这步)

现在就将Jenkins通过docker部署起来了。(你也可以直接使用其他方式安装部署Jenkins)

配置 Jenkins

现在访问下 就能看到如下界面

在服务器输入将密码填进去即可

这儿为了方便起见我们直接选择下载安装建议的插件

然后根据提示创建用户。然后就可以愉快的玩耍了。

创建任务

点击

给你的任务起个名字,并选择【自由风格的软件项目】

点确认后就会进入到项目配置页面,这里填写项目或任务的基本信息

源码管理主要是填写我们要构建的项目源码位置,这里我们填写git项目地址,当然还支持svn地址、cvs地址等等,这儿我事先准备了个demo放在github的,因为是公开的仓库,这儿并不需要要填写用户名密码。https://github.com/liuxing/jenkins-koa2

接下配置构建环境,构建环境可以理解为要构建的项目需要什么样的环境,比如node环境。一开始,你是没有node的选项的,需要安装插件,Jenkins的强大之一就是插件特别多

进入到【系统管理】>【插件管理】然后搜索nodejs插件安装,再到【全局工具配置】里添加配置node

后面我们还要将代码打包传上服务器,需要用到【Publish Over SSH】这个插件,安装好后,进入到【系统管理】里可以找到它,这里根据提示配置服务器就可以了。

现在回到项目配置页继续配置构建阶段,这里配置了下载安装依赖,并将项目打包

接下来是构建后的操作,将tar包使用我们前面安装的【Publish Over SSH】插件传到服务器上,解压再使用pm2启动。* 这儿如果出现command not found,使用建立软连接

现在打开 就能看见node程序返回的时间戳了

构建触发器

前面都是手动点击立即构建然后构建部署程序的,还不够自动化。我们希望可以push代码到仓库后就自动苟江部署。Jenkins提供了构建触发器来配置如何触发,主要有build periodically隔一段时间就构建一次,poll scm隔一段时间比较一次源代码如果发生变更,那么就build。否则不进行build,通常采用这种方式。

这儿源码管理使用的是GitHub,就用GitHub来演示。我们使用的是GIt webhooks,所以先要在GitHub上配置

github配置

生成一个sercret token

进入github --> setting --> Developer settings --> Personal access tokens --> Generate new token

填写token描述,勾选repo,admin:repo_hooks

GitHub webhooks 设置

进入GitHub上指定的项目 --> setting --> WebHooks --> add webhook,payload URL为http://你的Jenkins地址:/github-webhook/你也可以在Jenkins立自定义

配置Jenkins

进入到 系统管理 --> 系统设置 --> GitHub --> Add GitHub Sever

Credentials点击Add添加,Kind选择Secret Text(即之前在github生成的),如下图所示

设置完成后,点击TestConnection,提示Credentials verified for user UUserName, rate limit: xxx,则表明有效。

回到Jenkins任务中,配置构建触发器

现在修改项目代码,提交试试。在提交代码后可以看到Jenkins自动运行了构建。

本文到此结束,当然你还可以做的更多

左手代码右手砖,抛砖引玉

给点个赞,好不好啊

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180625B1JU6R00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券