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 项目配置非常简单,尽管内置了很多花里胡哨的配置,这里用不到,不需要关心。

只需要在构建中添加执行 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 触发方能生效。

(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 容器服务,自动化管理任务镜像发布工作。

Jenkins敏捷开发 自动化构建工具的更多相关文章
- 前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍
前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...
- gulp自动化构建工具
gulp 自动化构建工具,实时监控.代码合并.压缩... http://www.gulpjs.com.cn/ 中文网 http://gulpjs.com/plugins/ 英文网 ...
- gulp前端自动化构建工具新手入门篇
很久没有更新博文了. 经过了一次年前吐血的赶项目,终于在年后回血了.趁着有空,新学到了一个前端自动化构建工具-gulp. 现在我们通过这3个问题来学习一下: 1.什么是gulp? 2.为什么要用gul ...
- 前端自动化构建工具-yoman浅谈
如今随着前端技术的飞速发展,前端项目也变得越来越复杂. 快速的搭建一个集成多种工具和框架的复杂前端项目也越来越成为一种需求. 当然如果你要自己从0开始完全自己diy,绝对可以,只不过需要耗费一些不少的 ...
- JavaScript自动化构建工具入门----grunt、gulp、webpack
蛮荒时代的程序员: 做项目的时候,会有大量的js 大量的css 需要合并压缩,大量时间需要用到合并压缩 在前端开发中会出现很多重复性无意义的劳动 自动化时代的程序员: 希望一切都可以自动完成 ...
- 01_自动化构建工具之Maven
目前技术中存在问题(为什么使用Maven): 一个项目就是一个工程: 缺陷:如果项目太过庞大,就不适合使用package来划分层次,最好是一个模块就是一个工程,利于分工协作. 解决:Maven可以将一 ...
- Gulp(自动化构建工具 )
前言 Gulp,简而言之,就是前端自动化开发工具,利用它,我们可以提高开发效率. 比如: 1. 压缩js 2. 压缩css 3. 压缩less 4. 压缩图片 等等… 我们完全可以利用Gulp ...
- gulp自动化构建工具的使用
gulp自动化构建工具: 把前端开发常见的处理(“搬砖”)程序,通过一个工具模块管理起来,只需配置一次,达到自动处理目的,简化开发,提高效率!! 安装: 1.全局安装(全局安装一个gulp命令) A. ...
- 前端自动化构建工具--Gulp&&Webpack
前端构建工具的作用可以认为是对源项目文件或资源进行文件级处理,将文件或资源处理成需要的最佳输出结构和形式. 在处理过程中,我们可以对文件进行模块化引入.依赖分析.资源合并.压缩优化.文件嵌入.路径替换 ...
随机推荐
- RabbitMQ使用 prefetch_count优化队列的消费,使用死信队列和延迟队列实现消息的定时重试,golang版本
RabbitMQ 的优化 channel prefetch Count 死信队列 什么是死信队列 使用场景 代码实现 延迟队列 什么是延迟队列 使用场景 实现延迟队列的方式 Queue TTL Mes ...
- 工厂模式(python)
以字符串作为传递参数 以类名作为传递参数 来自为知笔记(Wiz)
- vi中使用鼠标右键插入时进入(insert)visual模式
使用vim插入外面复制的内容时,用右键点击后,并未将内容粘贴进去,而是进入了(insert)visual模式,解决方法:先shift+enter进入普通模式输入 set mouse-=a然后再i进入i ...
- 如何在 CentOS 上安装 dos2unix 和 unix2dos 命令
yum install -y dos2unix 注意:以上安装包既包含 dos2unix 命令,又包含 unix2dos 命令.
- vscode 前端好用插件汇总
本篇文章根据实际开发中使用的扩展插件,结合<精选!15 个必备的 VSCode 插件(前端类)>.<vscode 插件推荐 - 献给所有前端工程师(2017.8.18更新)>中 ...
- day7 对字母数字的编排
1.函数fun()的功能:在s数组内寻找并且统计t数组在s数组中出现的次数 输入字符串:函数scanf()函数不好用,会出现很多bug,因此不使用scanf() 效果理想: 2.函数fun()功能:将 ...
- 都2022年了,你的前端工具集应该有vueuse
摘要:一款基于Vue组合式API的函数工具集. 本文分享自华为云社区<vueuse:我不许身为vuer的前端,你的工具集只有lodash!>,作者: 前端要摸鱼 . vueuse 是什么? ...
- DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ | TENSORS
Tensor是一种特殊的数据结构,非常类似于数组和矩阵.在PyTorch中,我们使用tensor编码模型的输入和输出,以及模型的参数. Tensor类似于Numpy的数组,除了tensor可以在GPU ...
- 【刷题-LeetCode】179 Largest Number
Largest Number Given a list of non negative integers, arrange them such that they form the largest n ...
- golang中使用kafka客户端sarama消费时需要注意的一个点
kafka消费者的Consume()方法会阻塞: 当Consume()方法返回err时,不确定继续消费有没有问题:保险起见,退出进程,然后重新初始化. 当Consume()方法返回nil是,是可以继续 ...