• Jenkins自动化发布平台

    背景

    Jenkins 是一个可扩展的持续集成的引擎,主要用于:

    • 持续、自动的构建/测试软件项目
    • 监控一些定时执行的任务

    jenkins

    enkins 拥有的特性主要包括:

    • 易于安装,无需数据库的支持
    • 易于配置,所有的配置都是通过其提供的web界面实现
    • 权限控制,避免权限管理混乱造成的危害
    • 邮件通知,可通过配置发布构建结果或构建完成时通过email通知
    • 插件支持,支持扩展插件,可开发适合自己团队的插件

    官方网站:https://jenkins.io

    Jenkins 安装

    1. Jenkins预安装 (System Requirement)
    • Java 7 以上
    • 256M 以上内存
    • 1G 磁盘空间

    上面是Jenkins官网给出的Pre-install 条件。

    2. Jenkins安装

    默认情况下,jenkins使用8080端口作为web页面的入口,可以通过修改/etc/sysconfig/jenkins 里的参数修改此端口。

    然后即可以直接启动Jenkins:

    启动后通过浏览器访问即可进入jenkins的页面。

    jenkins

    3. Jenkins插件安装

    Jenkins的安装很简单,但是要配置适合于生产环境的功能还需要使用一些插件,Jenkins的重要特性必须依赖插件才能使用,根据项目需求我们需要有以下的功能,对应的安装插件支持:

    Jenkins 配置

    通过上面简单的叙述,肯定还是云里雾里,这样的内容网上一抓一大把,就没有写博客的必要了,这里以实战为目的,搭建适用于线上生产环境的Jenkins发布环境,主要满足以下需求:

    1. 一键发布,对应的开发或运维人员可以实现代码的一键发布到web服务器
    2. 一键回滚,对应的开发或运维人员可以做到有问题直接回滚
    3. 权限管理,只有项目负责人才对项目有发布和回滚的权利
    4. 管理方便,新添加或上线web主机能够很方便

    例如,我们有如下环境:

    角色 IP地址
    Jenkins服务 192.168.12.1
    web1 192.168.12.2
    web2 192.168.12.3
    web4 192.168.12.4
    gitlab服务器 192.168.12.5

    我们的目的是开发人员不断的面向gitlab提交组织代码,直到他们觉得可以将代码发布上线到3台web服务器上,他们可以通过jenkins一键发布。 或者当他们发现发布的程序有问题时,他们可以通过Jenkins一键回滚。接下来我们就以此为目的进行Jenkins发布环境的配置。

    1. Jenkins服务器环境配置

    Jenkins服务器的搭建可以参照上面的步骤进行下载安装并插件管理,这里就不再详细赘述。 另外在搭建好Jenkins环境之后,也要安装git环境,因为Jenkins也需要与gitlab进行交互。

    $ yum install git

    2. Web服务器环境配置

    之前在布置之前我们就提到希望新上线web服务器或者下线web服务器对于Jenkins提交来说比较简单,这里我们只需要在各台web服务器上安装rsync服务程序,并对Jenkins服务器机器放开防火墙即可:

    $ yum install rsync

    $ user add -g jenkins jenkins

    $ vim /etc/rsyncd.conf

    uid = jenkins

    gid = jenkins

    use chroot = no

    max connections = 100

    timeout = 600

    pid file = /var/run/rsyncd.pid

    lock file = /var/run/rsyncd.lock

    log file = /var/log/rsyncd.log

    [online]

    read only = no

    path = /home/

    hosts allow = 192.168.12.1

    $ /usr/bin/rsync


    3. web页面的项目管理配置

    比如,现在有如下项目需要配置:

    配置项 具体值
    项目名称 online_project
    Gitlab地址 git@192.168.12.5:yunweitest/online_project.git
    web服务器上线目录 /home/data/online_code

    如上,当我们确定gitlab上的online_project项目可以更新上线的时候,我们想要通过Jenkins触发构建将gitlab上此项目的master分支上的代码更新全部推送到线上的三台web服务器的项目代码目录上。

    3.1 Jenkins web配置之系统设置

    Jenkins web页面点击 —— 系统管理——系统设置:

    首先,在全局属性配置栏配置Jenkins机器的git命令绝对路径:

    %e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2017-03-06-%e4%b8%8b%e5%8d%884-50-21

    然后,在Jenins Location配置栏配置Jenkins web的URL访问路径和邮件发送地址:

    %e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2017-03-06-%e4%b8%8b%e5%8d%884-59-32

    最后,在Extended E-mail Notification配置栏配置邮件发送相关信息:

    %e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2017-03-06-%e4%b8%8b%e5%8d%885-01-49

    3.2 Jenkins web 配置之权限与安全

    Jenkins web页面点击 —— 系统管理——Configure Global Security :

    %e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2017-03-06-%e4%b8%8b%e5%8d%885-04-22

    3.3 Jenkins web 配置之用户配置

    Jenkins web页面点击 —— 系统管理——管理用户:

    根据项目需求创建管理人员,配合安全策略里面的安全矩阵给予对应权限。

    4. web 页面的项目配置

    Jenkins的任务配置主要包括如下几项:

    配置项 含义
    General 项目名称与注释
    源码管理 项目对应的gitlab 或 svn地址,构建对应的分支,及其配置
    构建触发器 触发构建的设置,可以设定为定时构建,或随着代码仓库的变更构建
    构建环境 远程服务器的登录配置与项目文件分发的限制
    构建 自定义Jenkins的构建动作,可以死shell脚本或直接写shell命令
    构建后操作 顾名思义,可以设置邮件发送等
    4.1 General 配置项

    General配置项里面,也需要配置启动安全项。并赋予具体的权限,前提是这里配置的人员已经在系统管理的用户管理里面配置过了。

    %e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2017-03-06-%e4%b8%8b%e5%8d%885-13-13

    另外,我们需要为我们的上线添加一些参数,不同的功能对应不同类型的参数,例如,我们需要一个choice类型的参数供我们选择是上线操作还是回滚操作,需要两个string类型的参数来标识我们每次上线或回滚对应的版本号:

    %e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2017-03-06-%e4%b8%8b%e5%8d%885-22-01

    4.2 源码管理

    这部分主要配置了Jenkins和gitlab进行交互的信息,包括项目地址,用户认证信息,对应的分支:

    %e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2017-03-06-%e4%b8%8b%e5%8d%885-29-36

    4.3 构建

    这其中我们省略了构建触发器和构建环境两个步骤,因为我们的配置暂时没有用到它们。

    %e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2017-03-06-%e4%b8%8b%e5%8d%885-36-57

    如上,我们在构建这一步相当于只做了一件事,就是在Jenkins服务器上执行了这个脚本,这里解释一下脚本后面跟的两个参数分别代表的意思是:

    参数1: 存放此项目对应的需要上线代码的web服务器的IP地址,如:

    $ cat /etc/webinfo/project_hosts

    192.168.12.2

    192.168.12.3

    192.168.12.4

    参数2:表明此项目上线到web服务器后的目录地址,如我们这里应该是:

    /home/data/online_code

    jenkins_test.sh脚本的主要内容如下,大概做了如下几件事:

    • 将Jenkins服务器拉下来的代码打包压缩。
    • 通过rsync传输到远程web服务器的一个临时目录PACKAGE_PATH。
    • 验证Jenins本地代码包与web服务器的代码包的md5是否一致。
    • 将PACKAGE_PATH的代码包解压缩至临时目录TMP_DIR中,并拷贝至线上目录。

    上面的REMOTE_CONTROL命令是一个shell脚本用于远程执行命令:

    4.4 构建后操作

    构建后我们想要给对应的项目负责人发送一封邮件提醒,告知上线的项目以及版本以及是否成功:

    %e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2017-03-06-%e4%b8%8b%e5%8d%886-07-29


    至此,我们的Jenkins上线环境就全部配置完毕,我们就可以尝试上线与回滚了,在此点击构建即可:

    %e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2017-03-06-%e4%b8%8b%e5%8d%886-10-08

    push代表上线,revert代表回滚,可以指定上线或者回滚的版本号。

    上线成功后,我们即可收到成功邮件。