首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Jenkins敏捷开发 自动化构建工具

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

原创
作者头像
赛先生和泰先生
修改于 2022-02-11 01:02:56
修改于 2022-02-11 01:02:56
1.1K02
代码可运行
举报
文章被收录于专栏:Java知识图谱Java知识图谱
运行总次数:2
代码可运行

一、序言

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、查看初始密码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat ~/.jenkins/secrets/initialAdminPassword
2、修改默认工作空间

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 创建一个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多参数时,&符号需要转义。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 【服务前缀】/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 仓库需要进行授权。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 基于http用户名和密码授权https://gitee.com/decsa/ucode-cms-vue.git# 基于公钥和私钥匙授权git@gitee.com:decsa/ucode-cms-vue.git

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssh-keygen -t rsa -C "982361244@qq.com"

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

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

2、Build Triggers

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 【服务前缀】/job/【任务名】/build?token=【token】JENKINS_URL/job/ruoyi-vue/build?token=TOKEN_NAME

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

3、Build

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clean install

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

4、Post-build Actions

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

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

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

原文地址

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
Percona XtraDB Cluster网络安全配置(PXC5.7)
Percona XtraDB Cluster(下称PXC)数据库集群节点在多台机器中分布,尽管这些节点在大多数情况下,位于同一个局域网内,其安全依旧有必要重视。PXC在各节点之间进行通信,通常使用了4个端口。这4个端口需要防火墙准许放行。其次节点间数据通信并没有加密,如果要考虑这部分安全增强,也需要采取相应的策略。下文基于这两点进行描述。
Leshami
2018/08/06
7750
只允许特定的IP访问特定的端口
chuchur
2024/11/21
1.3K0
Linux 系统防火墙配置与管理
Linux 系统下管理防火墙规则的管理程序有两种,分别是iptables防火墙与firewall防火墙,虽然现在新版系统中早已不在使用Iptables,新版本系统中默认安装firewall管理程序,相比于Iptables更具有灵活性。
王瑞MVP
2022/12/28
3.1K0
linux防火墙配置
iptables 防火墙配置 iptables -F #清除预设表filter中的所有规则链的规则 iptables -X #清除预设表filter中使用者自定链中的规则 iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT #主动连接时支持回连 iptables -A I
东营浪人
2019/09/05
4K0
CentOS 防火墙常用命令
CentOS中7以下防火墙是 iptables,7是 firewalld,两者不尽相同,一开始以为 firewalld 比 iptables会更麻烦,其实 firewalld 比 iptables 方便多了,这里简单描述下配置。
小唐同学.
2022/02/23
1.6K0
在 Linux 中配置 firewalld 规则
“firewalld”是firewall daemon。它提供了一个动态管理的防火墙,带有一个非常强大的过滤系统,称为 Netfilter,由 Linux 内核提供。
用户8989785
2021/09/13
3.3K0
Centos7-Firewall防火墙基础讲解
(1)firewalld简介: 它是Linux上新用的防火墙软件它跟iptables防火墙是差不多的工具但比其更好使用与设置;
全栈工程师修炼指南
2020/10/13
2K0
firewalld防火墙配置IP伪装和端口转发
IP地址伪装: 1、通过地址伪装,NAT设备将经过设备的包转发到指定的接收方,同时将通过的数据包 2、源地址更改为其NAT设备自己的接口地址。当返回的数据包到达时,会将目的地址修改 3、为原始主机的地址并做路由。地址伪装可以实现局域网多个地址共享单一公网地址上网。 4、类似于NAT技术中的端口多路复用(PAT)。IP地址伪装仅支持ipv4,不支持ipv6。
小手冰凉
2019/09/10
3.4K0
firewalld防火墙配置IP伪装和端口转发
第七章·Firewalld防火墙实战
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
1K0
第七章·Firewalld防火墙实战
Centos7 防火墙 firewalld 实用操作
Centos7以上的发行版都试自带了firewalld防火墙的,firewalld去带了iptables防火墙。其原因是iptables的防火墙策略是交由内核层面的netfilter网络过滤器来处理的,而firewalld则是交由内核层面的nftables包过滤框架来处理。 相较于iptables防火墙而言,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
晓晨
2018/10/25
1.1K0
Rocky Linux 9常用命令备忘录
大家好,我是星哥,上次介绍了 Rocky Linux 9 系统安装配置图解教程并做简单配置
星哥玩云
2025/07/02
4340
Rocky Linux 9常用命令备忘录
CentOS7 防火墙设置
CentOS 7中防火墙是一个非常的强大的功能,在CentOS 6.5中对iptables防火墙进行了升级。
码客说
2019/10/21
2.5K0
linux防火墙(firewall)对端口和IP开放与限制
启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firewalld 开机启用 : systemctl enable firewalld 重新加载配置 firewall-cmd --reload 重启防火墙 service firewalld restart 查看已经开放的端口 firewall-cmd --list
友儿
2022/09/11
10.6K0
Linux基础——Firewalld防火墙(二)
处理运行时区域: 运行时模式下对区域进行的修改不是永久有效的。重新加载或者重启后修改将失效。 1、启用区域中的一种服务即给某个区域开启某个服务 firewall-cmd [--zone=区域] --
L宝宝聊IT
2018/06/27
1.5K3
Linux下的防火墙
假设自定义的 ssh 端口号为 11011,使用下面的命令来添加新端口的防火墙规则:
Xiongan-桃子
2023/06/10
6170
Linux下的防火墙
firewalld 指定IP访问某端口
(1) Postgresql端口设置。允许192.168.142.166访问5432端口
拓荒者
2019/03/15
7.7K0
Firewalld防火墙 禁止/限制 特定用户的IP访问,drop和reject区别
1.drop禁止特定ip连接ssh/22服务 firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=‘x.x.x.x/24‘ service name=‘ssh‘ drop" firewall-cmd --reload ##重新加载防火墙配置,不然firewall-cmd --list-all-zones不会显示刚加上的规则
院长技术
2020/08/25
4.3K0
Centos7 firewalld防火墙基本操作
前言 在centos6的版本中,防火墙使用的iptables,iptables是一个静态防火墙,就是说它不能够动态的添加开启端口,必须在配置文件中添加开启端口,然后重启iptables后才能生效。而centos7的防火墙使用的是firewalld,它是动态的,可以通过命令添加开启端口,不用重启服务就可以使改变生效。 防火墙管理 systemctl enable firewalld       #设置开机启动 systemctl start firewalld        #开启服务 system
行 者
2018/03/26
1.2K0
Centos7 firewalld防火墙基本操作
Linux防火墙firewalld安全设置
防火墙是具有很好的保护作用。入侵者必须首先穿越防火墙的安全防线,才能接触目标计算机。在公司里数据安全是最重要的,要求安全部门进行全公司进行服务器防火墙安全搭建,在原有的基础上进行安全的防火墙设置,大多数生产环境都建议开启,这样才能有效避免安全隐患等问题;本文文字偏多,但是建议大家还是花个十多分钟好好看一下防火墙的原理,这样便于后期问题排查,最后一小节也会有常用命令操作。
没有故事的陈师傅
2019/11/22
4.3K0
Linux firewalld防火墙学习总结
Firewalld是一种简单的、有状态的、基于区域(zone-based)的防火墙。策略和区域用于组织防火墙规则。网络在逻辑上被划分为多个区域,它们之间的流量可以通过策略进行管理。
授客
2024/11/21
2810
Linux firewalld防火墙学习总结
相关推荐
Percona XtraDB Cluster网络安全配置(PXC5.7)
更多 >
目录
  • 一、序言
  • 二、安装与使用
    • (一)安装
      • 1、查看初始密码
      • 2、修改默认工作空间
    • (二)使用
      • 1、构建配置
      • 2、添加项目
    • (三)免密登录
  • 三、触发策略
    • (一)定时触发
    • (二)URL 触发
    • (三)钩子触发
  • 附录、工具使用
    • 1、语言设置
    • 2、构建环境清单
    • 3、环境配置
    • 4、任务配置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档