滴答的雨https://www.cnblogs.com/heyuquan/p/jenkins-multi-env-cicd-architecture.html

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

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

目标:

  • 支持多分支、多环境、多项目、多套配置文件、多编程语言
  • 支持一键构建、集群发布
  • 支持一键回滚历史版本
  • 快捷配置添加新的部署项目
  • 支持多个项目使用同一个job发布或回滚

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

最终效果图

一键发布

一键回滚

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文件夹>>发布到部署目录

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

一键回滚job设计

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

设计的输入参数如图:

简易多环境CICD流程

一般软件公司对于软件的开发、测试、发布都有好几个环境,所以针对各个环境都会有对应的CICD流程,这边设计了一个简易的多环境CICD流程图,如下:

自动触发CICD还是手动触发CICD???,我认为:

  • 开发环境采用手动触发:因为对于开发环境,提交代码比较频繁,而且有时候提交到git也并不想触发CICD。可以采取每晚定时自动触发CICD,便于异常代码及时抛出
  • 测试环境采用自动触发:因为测试代码的 git 分支合并是有条件限制的,合并频率比较少
  • 生产环境采用手动触发:因为生产环境的发布,有严控发布时间的,手动触发控制力强

关注公众号《架构文摘》,每天一篇架构领域重磅好文,涉及一线互联网公司应用架构(高可用、高性能、高稳定)、大数据、机器学习、Java架构等各个热门领域。

jenkins 构建异常_Jenkins多环境持续集成架构实践!相关推荐

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

    作者:滴答的雨 出处:http://www.cnblogs.com/heyuquan/ Jenkins多环境持续集成架构实践 自动化部署主要是为了解决项目多.环境多.持续集成慢.部署操作麻烦.手动操作 ...

  2. jenkins 构建异常_jenkins构建失败的原因是什么?

    第一次尝试使用jenkins,好难入门啊 这个是日志 Started by user anonymous Building remotely on slave-php-ut in workspace ...

  3. 基于Jenkins的开发测试全流程持续集成实践

    今年上半年一直在公司实践CI,本文将上半年来的一些实践总结一下,可能不太完善或优美,但的确初步解决了我目前所在项目组的一些痛点.当然这仅是一家之言也不够完整,后续下半年还会深入实践和引入Kuberne ...

  4. 搭建Jenkins+SpringBoot+Docker的微服务持续集成框架

    前言 近一.两年,SpringBoot和Docker可以说非常的火热啊,而早在2015年的时候我就弄过一下Docker,不过由于职位和跳槽等种种原因,2016年就很少搞了,不过现在再捡起来也是很容易的 ...

  5. 【DevOps】Jenkins+Git+Gitlab+Sonar+Nexus实现持续集成

    文章目录 什么是持续集成?CI/CD指的是什么? 如何实现持续集成 一.筹备工作,CentOS 7.6系统 1.安装JDK,配置环境变量 2.Maven下载 3.Git安装 4.GitLab安装 5. ...

  6. 持续集成最佳实践_集成服务性能最佳实践–数据流优化

    持续集成最佳实践 In this article, we'll present a couple of common best practices regarding the performance ...

  7. 基于Jenkins Pipeline的ASP.NET Core持续集成实践

    最近在公司实践持续集成,使用到了Jenkins的Pipeline来提高团队基于ASP.NET Core API服务的集成与部署,因此这里总结一下. 一.关于持续集成与Jenkins Pipeline ...

  8. 如何与Java 8,NetBeans Platform 8,Jenkins,Jacoco和Sonar进行持续集成

    介绍 Java 8出现了,人们所期待的革命终于发布了,我敢肯定,你们中的许多人都在想着同样的问题"我应该在项目中使用它吗?". 好吧,几个月来我遇到了同样的问题,今天我有一个答案想 ...

  9. python 持续集成 教程_jenkins+python自动化测试持续集成教程

    一.首先我们安装Jenkins,我这里采用的是.msi应用程序,根据提示进行安装(傻瓜式),最后会打开默认的网页地址:http://localhost:8080 如果端口有冲突,可以去Jenkins的 ...

  10. 基于Jenkins+git+gradle+pgyer的android持续集成

    前段时间搞了下CI持续集成工具,这里总结一下:供需要的朋友参考,错误之处还请指出,与君共勉. 主要步骤如下: 1. jenkins 安装配置 2.打包环境配置 3.系统配置及插件管理 4.新建项目.b ...

最新文章

  1. 2022-2028年中国电子签名行业深度调研及投资前景预测报告
  2. 从IoT World 2019看全球IoT九大发展趋势
  3. 大数据架构hadoop
  4. ITK:迷你管道MiniPipeline
  5. 2019年中国教育信息化行业研究报告
  6. php毕业设计遇到的问题,常见问题_php毕业设计_php课程设计_php大作业_原创作品下载网...
  7. [leetcode]5-Longest Palindromic Substring
  8. 《数据结构C语言版》
  9. Python代码编译和反编译exe执行文件
  10. 独家首发多功能实用工具箱微信小程序源码下载支持外卖卷和多种流量主
  11. 编程分钟转化小时怎么编_贴片机编程教程,编程步骤,编程怎么编
  12. 大数据杀熟 算法_大数据“杀熟” 怎能让真正的刀俎逍遥法外
  13. 分数阶 计算机应用,基于分数阶Riemann-Liouville积分的图像去噪
  14. Linux树莓派怎么查看ntp服务,树莓派实现NTP服务器
  15. JSP是什么?JSP是什么意思?
  16. JS day_08(5.17)String 、 Math
  17. 【接口篇 / Wan】(5.2) ❀ 04. 多条宽带冗余 ❀ FortiGate 防火墙
  18. IC验证工程师高效战斗手册---提问之道(上篇)
  19. C++ 友元(friend)
  20. 李青云老人的长寿秘诀【转】

热门文章

  1. 算法与数据结构 第3章 高级排序算法上 归并算法
  2. python在类中创建线程
  3. Python 和 C++实现 九九乘法表
  4. 181212每日一句
  5. 影视】100种说爱你的方式~
  6. now is all
  7. Atitit 编程范式总结 目录 1.1.1. IP(Imperative Programming)指令式编程 1 1.1.2. SP(Structured Programming)结构化编程 2 1
  8. Atitit.软件开发的三层结构isv金字塔模型
  9. Atitit.论图片类型 垃圾文件的识别与清理  流程与设计原则 与api概要设计 v2 pbj
  10. Paip.声明式编程以及DSL 总结