作者:滴答的雨
出处:http://www.cnblogs.com/heyuquan/

Jenkins多环境持续集成架构实践

 自动化部署主要是为了解决项目多、环境多、持续集成慢、部署操作麻烦、手动操作易出错、自动化运维等问题。

Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。

目标

l 支持多分支、多环境、多项目、多套配置文件、多编程语言

l 支持一键构建、集群发布

l 支持一键回滚历史版本

l 快捷配置添加新的部署项目

l 支持多个项目使用同一个job发布或回滚

另外:也可以根据需要加入gitlab自动触发构建、自动化测试、钉钉通知、邮箱通知等需求

本实践使用到的技术,可参考:《[CI&CD]jenkins自动化工具使用教程》https://www.cnblogs.com/heyuquan/p/jenkins-use-guide.html#title1.2

技术关键词:jenkins master-slave,jenkins 插件(multijob、EnvInject),rsync工具,powershell,dotnet core cli,icacls工具等等

目录

最终效果图

目录设计

约定及规范

架构设计

#、CICD架构图

#、项目映射配置文件设计

#、一键发布job设计

#、一键回滚job设计

#、简易多环境CICD流程

最终效果图

一键发布

一键回滚

目录设计
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过程主要在两个局域网中执行:构建服务器(开发内网)和部署服务器(生产内网)
jenkins CICD架构图

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

配置文件选项含义从命名上可以识别,主要包括:环境、代码分支、部署路径、拷贝排除文件列表、项目信息(项目唯一标识、目录文件夹名、源代码路径、开发语言、集群节点信息…)等等

   app_config节点下的配置,可以覆盖父节点配置,适配项目特定的部署要求。app_config是数组节点,可以轻松添加新的部署项目,实现新项目的快速CICD。

一键发布job设计

“一键发布”主要经历的阶段有:组合项目相关参数>>获取最新代码>>编译打包>>推送应用文件到服务器>>应用备份>>拷贝到Temp文件夹>>发布到部署目录

为了更好的实现和控制”一键发布”这些阶段,设计了如下输入参数:

一键回滚job设计

   实现思路:在”一键发布”时,将发布记录存到文件中,存储key为:p_app_key#2019-1219-1503。执行回滚时,选择要回滚的历史项目,先解析出p_app_key再获取项目配置信息,再回滚此项目的特定历史版本。


简易多环境CICD流程

   一般软件公司对于软件的开发、测试、发布都有好几个环境,所以针对各个环境都会有对应的CICD流程,这边设计了一个简易的多环境CICD流程图,如下: (在线画图工具推荐:processon.com)jenkins多环境简易发布流程

   自动触发CICD还是手动触发CICD???我认为:开发环境采用手动触发:因为对于开发环境,提交代码比较频繁,而且有时候提交到git也并不想触发CICD。可以采取每晚定时自动触发CICD,便于异常代码及时抛出测试环境采用自动触发:因为测试代码的 git 分支合并是有条件限制的,合并频率比较少生产环境采用手动触发:因为生产环境的发布比较复杂,合并分支后是不能直接自动触发CICD的。比如有严控发布时间、负载隔离(蓝绿部署)等要求,所以手动触发控制力强

Jenkins多环境持续集成架构实践相关推荐

  1. 基于 Jenkins 快速搭建持续集成环境--转

    源地址:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础 ...

  2. 基于 Jenkins 快速搭建持续集成环境

    持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域 ...

  3. 基于Jenkins 快速搭建持续集成环境

    2019独角兽企业重金招聘Python工程师标准>>> 持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开 ...

  4. Jenkins——Jenkins介绍+基于云平台的Jenkins安装和持续集成环境配置(插件+用户权限+凭据+Maven打包)

    Jenkins--Jenkins介绍+基于云平台的Jenkins安装和持续集成环境配置(插件+用户权限+凭据+Maven打包) 持续集成及Jenkins介绍 软件开发生命周期 什么是持续集成? 持续集 ...

  5. 构建基于Jenkins + Github的持续集成环境

    登录 | 注册 John_cdy的专栏 学无止境 目录视图 摘要视图 订阅 有奖征资源,博文分享有内涵 6月推荐文章汇总 CSDN博文大赛初赛晋级名单公布 关注CSDN社区微信,福利多多 构建基于Je ...

  6. 【Jenkins+RF】从零搭建Jenkins+Robot Framework持续集成环境

    转自:https://www.jianshu.com/p/ef8d3109ac5f    感恩 安装Jenkins 系统环境:CentOS Linux release 7.3.1611 x86_64 ...

  7. 基于Jenkins快速搭建持续集成环境

    看了园友张善友的博文,尝试成功.便有此作.原网址: 基于 Jenkins 快速搭建持续集成环境 天下事有难易乎?为之,则难者亦易矣:不为,则易者亦难矣. 首先要学会使用MSBuild构建脚本 附网址: ...

  8. jenkins + Git 搭建持续集成环境

    2019独角兽企业重金招聘Python工程师标准>>> 持续集成通过自动化构建.自动化测试以及自动化部署加上较高的集成频率保证了开发系统中的问题能迅速被发现和修复,降低了集成失败的风 ...

  9. Jenkins安装和持续集成环境配置

    Jenkins安装和持续集成环境配置 持续集成说明 Jenkins安装 Jenkins插件管理 下载中文汉化插件 Jenkins用户权限管理 安装Role-based Authorization St ...

最新文章

  1. 【MATLAB】符号数学计算(六):符号函数的操作
  2. 英媒:人工智能终于接近人类智能了吗?
  3. 多列布局——column-width
  4. Java数据结构与算法:栈
  5. 混合云应用双活容灾实践
  6. vs2008 c++ 调用java
  7. 为ActiveX制作数字签名 -- 介绍 (引)
  8. 趣谈设计模式 | 外观模式(Facade):为子系统提供高粒度接口
  9. 性能可期——Netflix与Intel优化SVT-AV1
  10. ASP.NET 安全认证(二)——灵活运用deny与allow 及保护.htm等文件
  11. 校内模拟赛 Zbq's Music Challenge
  12. linux下mkdir头文件_Linux中mkdir函数与Windows中_mkdir函数的区别
  13. python有多少个模块_python绘图模块有哪些
  14. Codeforces Round #565 (Div. 3) B. Merge it!
  15. MATLAB使用cic滤波器,基于Matlab的CIC滤波器设计
  16. 记关于DNS协议的一次学习(递归查询与迭代查询)
  17. php有个schost.exe_全面认识Svchost.exe进程
  18. 魔兽世界美服部落人数最多服务器,美服魔兽世界人口普查
  19. 设计模式之工厂模式(C++)
  20. python取消任务的方法_对Python定时任务的启动和停止方法详解

热门文章

  1. aiohttp 高并发web服务_UE4 unity3d连接高并发http服务器
  2. 多线程爬取图片 -Java
  3. python语言中包含的标准数据类型有哪些_Python中的标准数据类型
  4. hdfs读写流程_必须掌握的分布式文件存储系统—HDFS
  5. python实现新闻网站_Python 教你 4 行代码开发新闻网站通用爬虫
  6. R-数据挖掘 | 聚类分析中的各种相异(似)度计算
  7. Windows 8 DirectX 开发学习笔记(十六)使用Terragen生成自然环境贴图
  8. mybatis中resultType和resultMap的区别
  9. Oryx 2.1.2版本: src源码编译
  10. Java基础学习笔记 -- 9(数组)