Jenkins敏捷开发 自动化构建工具

一、序言

Jenkins 是一款自动化构建工具,能够基于 Maven 构建后端 Java 项目,也能够基于 nodejs 构建前端 vue 项目,并且有可视化 Web 界面。

所谓自动化构建是按照一定的策略执行打包脚本,相对于普通脚本构建,Jenkins 有如下优势:

  • 构建队列中能够同时构建多个项目,包含前端和后端项目;
  • 定时构建;
  • 代码仓库触发构建(普通脚本无法实现);

Jenkins 体现一种项目管理思维:开发人员的贴心助理,集中精力专注于业务开发;尽早的实现代码集成(包含前后端)以便尽早发现问题;构建环境与开发环境隔离,为向生产环境迁移做好充足的准备。

构建过程全程自动化进行,无人工参与,配合 Docker 容易实现高效的项目部署与迁移。

二、安装与使用

Jenkins 是一个工具,既然是一个工具,便有相应的替代方案,因此不需要花工作的时间琢磨这个工具是如何工作的,将精力放在如何利用 Jenkins 提高敏捷开发效率上更有意义。

实践过程中,将项目的脚本化构建用 shell 编写成命令脚本,并附加在项目中,即使不使用 Jenkins,通过执行 shell 脚本也能够实现项目的自动化构建。这么做主要有如下考虑:

  • 增强拓展性

即使没有 Jenkins,项目也能完成构建,增加构建的拓展性

  • 减少对 Jenkins 的依赖

让 Jenkins 承担实践调度的角色,具体构建过程由标准化的脚本来完成。

既然 shell 脚本能够完成自动化构建,那么还需要用到 Jenkins 吗,是否冲突?答案是不冲突。shell 脚本配合 Jenkins 使用有两大方面优势:

  • 使用 shell 脚本必须登录目标服务器,拥有相应的权限后,方能执行 shell 脚本,Jenkins 能够实现在不登录目标服务器的基础上,使用一对账号和密码,管理可视化的 Web 操作界面触发构建事件。
  • 按需构建,开发者在提交完代码后,向 Jenkins 服务器发送一个信号,便可触发构建。

(一)安装

使用传送门快捷安装,启动后使用安装推荐插件,内置国内插件源,安装速度较快。

1、查看初始密码
cat ~/.jenkins/secrets/initialAdminPassword
2、修改默认工作空间

默认工作空间路径为~/.jnkins,运行 Jenkins 程序的用户空间下,构建完成后的项目,如果要放在第三方容器中运行时,有可能会出现找不到路径的情况,修改默认工作空间或者给予资源目录可执行权限都能解决此问题。

安装完成之后,暂时启动程序,先确认是否需要修改Jenkins_HOME变量,后续初始化以及插件的安装与此路径有关。此变量修改方式有多种,颗粒度较大的是配置在 PATH 环境变量中,颗粒度较小的是配置在运行 Jenkins 项目的容器中。

修改 Tomcat 的配置文件 context.xml,增加一行配置

<!-- 创建一个jenkins,并将其用户空间设置为JENKINS_HOME -->
<Environment name="JENKINS_HOME" value="/home/jenkins" type=java.lang.String/>

注意JENKINS_HOME默认值为启动进程用户对应的用户空间,在启动前修改后即变成新的路径。

(二)使用

如果在配置远程 APiToken 触发不生效,请阅读免密登录章节。

1、构建配置

用脚本的方式构建 Jenkins 项目配置非常简单,尽管内置了很多花里胡哨的配置,这里用不到,不需要关心。

image

只需要在构建中添加执行 shell 脚本命令即可。附录中列举的环境配置统一在宿主机上完成,不在 Jenkins 服务内部配置,使用默认值即可。

2、添加项目

在宿主机上将待构建项目的源代码克隆到本地,执行 shell 脚本完成手动构建。在 Jenkins 管理工作台新建一个同名的空项目,将克隆的源代码整体复制到 Jenkins 的工作空间下,默认位置为/root/.jenkins/workspace,委托给 Jenkins 代为自动管理该项目。

(三)免密登录

使用 URL 触发构建事件,需要配置免密登录,即在不需要输入用户名和密码的情况下,通过远程调用 shell 脚本触发构建事件,此 shell 脚本本质上是 GET 的方式请求某个指定的路径。操作过程如下:

(1)安装插件

安装Build Authorization Token Root Plugin插件,如果已经存在,则忽略此步骤。此插件的作用是给当前登录的用户生成 Token,方便后续认证使用,一个用户可以配置多个 token。

(2)项目配置

在指定的项目中添加 token 配置,项目可以复用一个 token 或者每个项目单独设置一个 token,依据需要选择。只有添加此配置之后,使用 token 触发方能生效。

image

(3)客户端使用

编写脚本,将脚本分发给开发者,自动化构建便可以愉快的开始了。使用curl多参数时,&符号需要转义。

curl {Jenkins URL}/buildByToken/build?job={项目名}\&token={token}

至此,CI/CD敏捷开发配置完毕。

三、触发策略

构建事件可以按照不同的策略来定义,定时属于被动触发;URL 和钩子程序属于主动触发。

(一)定时触发

定时触发有多种实现方案,使用 CentOS 服务器内置的定时调度器是较为轻量的解决方式,实现原理是在指定的时间节点运行 shell 脚本,其中 shell 脚本便是项目构建的载体。如果单纯希望定时构建项目,推荐使用此种解决方式,Jenkins 略显笨重。

(二)URL 触发

用脚本模拟或者在浏览器访问 URL 触发构建事件。此种方式是开发中用的比较多的方式,按需构建的代表。软件开发者在提交完代码后,主动触发构建事件,这种方式构建效率较高。

Build Triggers

构建触发器是指 Jenkins 收到某一信号之后,立即开始构建指定的任务。

勾选【Trigger builds remotely】并设置【Authentication Token】

# 【服务前缀】/job/【任务名】/build?token=【token】
JENKINS_URL/job/job-vue/build?token=TOKEN_NAME

通过使用 curl 脚本即可触发构建信号。

(三)钩子触发

在代码仓库完成钩子程序配置,并且允许代码仓库服务器访问 Jenkins 服务器,钩子程序会在开发者提交代码时触发构建事件。

钩子触发看上去比较美,实际操作中有一定的前置条件:一是项目的构建时间不能过长;二是提交代码不能过于频繁。

附录、工具使用

1、语言设置

在【系统管理】>【插件管理】中添加【locale】插件。在【系统管理】>【全局配置】中 locale 栏目下添加【en_US】,并勾选对所有用户生效选项。

建议统一使用英文界面(可以修改为中文),在中英文混合下操作比较别扭。

2、构建环境清单
序号 环境名 作用及要求 参考资料
1 Java Java 程序基础运行环境,使用 jdk 不能使用 jre(需要编译 Java 源码)
2 maven 构建 Java 项目,为提高构建速度需要配置国内仓库源 Maven 使用手册
3 NodeJS 构建前端项目
4 git 拉取远程仓库代码
5 ssh 免密登录 授权拉取远程仓库代码;授权登录远程服务器(构建完成后部署) SSH 使用手册
3、环境配置

1、Maven Configuration

配置项 配置内容
Default settings provider /usr/local/maven/conf/settings.xml
Default global settings provider /usr/local/maven/conf/settings.xml

2、JDK

配置项 配置内容
JAVA_HOME /usr/local/java

3、Git

配置项 配置内容
Path to Git executable /usr/local/git/bin/git

4、Maven

配置项 配置内容
MAVEN_HOME /usr/local/maven

5、NodeJS

配置项 配置内容
Installation directory /usr/local/nodejs/bin
4、任务配置

1、Source Code Management

源代码管理是 Jenkins 工作的前提,即能够获取到任务源代码,它是后续代码自动构建的前提。

源代码托管在 GitHub,并且是私有仓库,Jenkins 正确访问 git 仓库需要进行授权。

# 基于http用户名和密码授权
https://gitee.com/decsa/ucode-cms-vue.git
# 基于公钥和私钥匙授权
git@gitee.com:decsa/ucode-cms-vue.git

为了提高工作效率,促进团队协作,这里选用 ssh 认证。

ssh-keygen -t rsa -C "982361244@qq.com"

将文件【~/.ssh/id_rsa.pub】内字符串拷贝至 GitHub 设置中,配置后即可免密拉取 GitHub 私有仓库代码。

更多内容请查看 SSH 使用手册

2、Build Triggers

构建触发器是指 Jenkins 收到某一信号之后,立即开始构建指定的任务。

勾选【Trigger builds remotely】并设置【Authentication Token】

# 【服务前缀】/job/【任务名】/build?token=【token】
JENKINS_URL/job/ruoyi-vue/build?token=TOKEN_NAME

通过在任一登陆的服务器的浏览器或者使用 curl 脚本即可出发任务的立即构建。

3、Build

后端项目通常使用 Maven 来构建,在下拉框中选择【Invoke top-level Maven targets】,然后在 Goals 栏目中配置如下命令

clean install

经过此步骤,能够在工作空间找到构建后的项目发布包。

4、Post-build Actions

在任务构建完成之后出发此操作。通常使用 Docker 将项目发布包构建成镜像,然后发布到镜像仓库中。可执行的镜像发布到镜像仓库之后,有两种比较常用的后续方案与应用服务器交互。

Jenkins 通过授权认证,登陆到目标应用服务器,将对应的镜像拉下来,然后使用脚本启动。

通过使用 k8s 容器服务,自动化管理任务镜像发布工作。

2.012.jpeg

原文地址

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容