Jenkins多环境持续集成架构实践
自动化部署主要是为了解决项目多、环境多、持续集成慢、部署操作麻烦、手动操作易出错、自动化运维等问题。
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
目标
l 支持多分支、多环境、多项目、多套配置文件、多编程语言
l 支持一键构建、集群发布
l 支持一键回滚历史版本
l 快捷配置添加新的部署项目
l 支持多个项目使用同一个job发布或回滚
另外:也可以根据需要加入gitlab自动触发构建、自动化测试、钉钉通知、邮箱通知等需求
本实践使用到的技术,可参考:《[CI&CD]jenkins自动化工具使用教程》
技术关键词:jenkins master-slave,jenkins 插件(multijob、EnvInject),rsync工具,powershell,dotnet core cli,icacls工具等等
目录
最终效果图
一键发布

一键回滚

目录设计
Jenkins相关目录设计
----jenkins-ex jenkins构建时使用到的目录
--software Jenkins安装目录
--master
--slave
--backup jenkins备份目录
--master
--module 功能模块,每一类功能相关的文件放在对应的子文件夹中
--common
--script 各模块公用的脚本
--publish 发布功能
--settings
--config 构建时配置文件。Eg: jenkins_profile.pubxml、项目配置文件等
-- test-publish-template-app-config.json项目映射配置表
--script Jenkins job构件时调用的脚本(方法封装)
--source-code 拉取的源代码存放目录
--test
--系统标识
--应用名
--build-result 构建产物(编译后的结果)
--test
--系统标识
--应用名
--temp-file 临时文件,job执行过程中产生的文件
--builder-history 构建历史记录文件
--job-params 构建过程中传递参数的文件
--app-config 应用对应的环境配置文件
--test
--系统标识
--应用名
--other-sub-module
……
约定及规范
jenkins job命名
#、job名全小写,多单词用”-”分割。(eg:publish-template-onekey-deploy)
#、job命名约定:模块名-环境-功能名。(eg:publish模块,publish-test-onekey-deploy)
#、模块中组件job命名约定:模块-c-组件名。(eg:publish-c-pull-code)
#、job输入参数以”p_”为前缀
Jenkins job中的脚本命名(eg:powershell)
#、变量全小写,多单词用”_”分割
规范约定
#、代表路径的变量值,以”\”结尾
#、备份名字中用“#”做分隔符,还原时好取参数(eg:p_app_key#2019-1219-1503)
架构设计
#、CICD架构图
CICD过程主要在两个局域网中执行:构建服务器(开发内网)和部署服务器(生产内网)

#、项目映射配置文件设计
想要实现使用一个job,通过下拉来” 发布|回滚”不同的项目,我们需要一个灵活的项目配置映射文件,类似如下:

配置文件选项含义从命名上可以识别,主要包括:环境、代码分支、部署路径、拷贝排除文件列表、项目信息(项目唯一标识、目录文件夹名、源代码路径、开发语言、集群节点信息…)等等
app_config节点下的配置,可以覆盖父节点配置,适配项目特定的部署要求。
app_config是数组节点,可以轻松添加新的部署项目,实现新项目的快速CICD。
#、一键发布job设计
“一键发布”主要经历的阶段有:组合项目相关参数>>获取最新代码>>编译打包>>推送应用文件到服务器>>应用备份>>拷贝到Temp文件夹>>发布到部署目录
为了更好的实现和控制”一键发布”这些阶段,设计了如下输入参数:

|
参数名 |
类型 |
默认值 |
说明 |
|
p_publish_model |
下拉单选 |
reality |
取值:reality、drill 发布模式 drill:演练。发布到应用服务器temp文件夹后结束 |
|
p_app_key |
下拉单选 |
通过这个key到配置文件里面找站点的具体配置信息 |
|
|
p_do_code_pull |
Bool |
True |
拉取最新代码 |
|
p_do_build_package |
Bool |
True |
是否重新编译打包 |
|
p_do_backup |
Bool |
True |
是否执行备份 |
|
p_publish_content |
多选 |
取值:app-file、config 发布文件列表(多选) app-file:应用文件(不包含config文件) config:配置文件 |
|
|
p_restart_daemon_process |
Bool |
True |
是否重启守护进程(如果是IIS,勾选则重启应用程序池,不勾选则回收应用程序池) |
|
p_remark |
String |
备注信息 |
#、一键回滚job设计
实现思路:在”一键发布”时,将发布记录存到文件中,存储key为:p_app_key#2019-1219-1503。执行回滚时,选择要回滚的历史项目,先解析出p_app_key再获取项目配置信息,再回滚此项目的特定历史版本。
设计的输入参数如图:

|
参数名 |
类型 |
默认值 |
说明 |
|
p_history_item |
下拉单选 |
每一次”一键发布”成功,都会生成一个对应的历史记录 |
|
|
p_restart_daemon_process |
Bool |
True |
是否重启守护进程(如果是IIS,勾选则重启应用程序池,不勾选则回收应用程序池) |
|
p_remark |
String |
备注信息 |
#、简易多环境CICD流程
一般软件公司对于软件的开发、测试、发布都有好几个环境,所以针对各个环境都会有对应的CICD流程,这边设计了一个简易的多环境CICD流程图,如下:

over,谢谢查阅,觉得文章对你有收获,请多帮推荐。欢迎向我提供更好的资料信息。
Jenkins多环境持续集成架构实践的更多相关文章
- 基于 Jenkins 快速搭建持续集成环境
什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火 ...
- Jenkins+Gitlab搭建持续集成(CI)环境
利用Jenkins+Gitlab搭建持续集成(CI)环境 Permalink: 2013-09-08 22:04:00 by hyhx2008in intern tags: jenkins gitla ...
- 基于 Jenkins 快速搭建持续集成环境--转
源地址:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础 ...
- Jenkins 快速搭建持续集成环境
持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域 ...
- 构建基于Jenkins + Github的持续集成环境
搭建持续集成首先要了解什么是持续集成,带着明确的目标去搭建持续集成环境才能让我们少走很多弯路.持续集成(Continuous integration)简称CI,是一种软件开发的实践,可以让团队在持续集 ...
- jenkins + Git 搭建持续集成环境
持续集成通过自动化构建.自动化测试以及自动化部署加上较高的集成频率保证了开发系统中的问题能迅速被发现和修复,降低了集成失败的风险,使得系统在开发中始终保持在一个稳定健康的集成状态.jenkins是目前 ...
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(三):搭建jenkins集群环境
写在前面 大家可以看到本文的配图,左边是jenkins单机环境,右边是jenkins集群.个中区别,不言而喻,形象生动. 前面我分别介绍了.net core 程序的多种部署方式(无绝对孰优孰劣): 1 ...
- Linux下Jenkins+git+gradle持续集成环境搭建
Linux下Jenkins+git+gradle持续集成环境搭建 来源:IT165收集 发布日期:2014-08-22 21:45:50 我来说两句(0)收藏本文 一.项目介绍 和 linux ...
- 用Jenkins构建Django持续集成环境
用Jenkins构建Django持续集成环境 - V2EX https://www.v2ex.com/t/32054
随机推荐
- Linux安装问题解决
首先安装VM,之后下载centos7.5 安装好vm后运行时无法执行操作 提示 已将该虚拟机配置为使用 64 位客户机操作系统.但是,无法执行 64 位操作. 此主机支持 Intel VT-x,但 I ...
- Python绘制3D图形
来自:https://www.jb51.net/article/139349.htm 3D图形在数据分析.数据建模.图形和图像处理等领域中都有着广泛的应用,下面将给大家介绍一下如何使用python进行 ...
- 数据分析入门——pandas之合并函数merge
merge有点类似SQL中的join,可以将不同数据集按照某些字段进行合并,得到新的数据集 1.参数一览表: 2.一对一连接:默认情况下,会按照相同字段的进行连接 例如有相同字段emp的两个df,m ...
- Appium脚本(3):sendkey(封装capability)
输入中文注意添加这个配置,否正中文输入不了desired_caps['unicodeKeyboard'] = "True"desired_caps['resetKeyboard'] ...
- LODOP和C-LODOP注册与角色等简短问答【增强版】
之前的简短问答:Lodop.c-lodop注册与角色简短问答.Lodop简短问答客户反馈篇 及排查步骤 及注册相关本文重新整理相关简短问答,调整问答顺序,增加相关的问答. 其他相关(非简短问答):LO ...
- 使用 Fiddler 代理调试本地手机页面
文件下载:http://files.cnblogs.com/files/dtdxrk/fiddler4_4.6.2.0_setup.rar 从事前端开发的同学一定对 Fiddler 不陌生,它是一个非 ...
- aspose.slides for java去除水印
前一段时间使用aspose.slides for java,处理了下才去除的水印,但是时间一久就忘记了,重新整理了下 下载aspose-slides-19.3-jdk16.jar,重命名为aspose ...
- Graphviz(02) 汉字subgraph不显示汉字的处理
1.按照官方教程设置 2.如果还不显示,在不显示的汉字前面加上一个“空格”,汉字就会正常显示. digraph idp_modules{ rankdir = TB; fontname = " ...
- 【VS开发】MFC多显示器适配显示设置
由于工程需要在多个显示器上显示不同类容,故查找了一些资料来满足这个功能.在VC中分为三步来操作:检测显示器个数:读取屏幕分辨率和其他参数:设置程序的显示坐标. 第一步:检测屏幕个数 网上查找到的通用方 ...
- webbench源码学习笔记
学习内容 一共五百多行代码,其中包含了linux编程常用的API.可以通过学习源码,把不熟悉的API练习练习. 1 如何使用webbench (1)查看参数帮助 (2)运行方法 即以上模拟30个客户端 ...