专栏首页DevOps持续交付Jenkins 多环境 CI/CD 架构设计

Jenkins 多环境 CI/CD 架构设计

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

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 分支合并是有条件限制的,合并频率比较少。
  • 生产环境采用手动触发:因为生产环境的发布,有严控发布时间的,手动触发控制力强。

本文分享自微信公众号 - DevOps持续交付(devopscd)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Jenkinsclient系列教程之查看基本信息(二)

    今天我们先不介绍组命令,先介绍第一层的COMMAND。这些命令基本用来查看各种信息。

    DevOps持续交付
  • CentOS 7安装PHP简明教程

    rpm install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

    DevOps持续交付
  • K8s自动扩缩容工具KEDA发布2.0版本,全面升级应用扩展能力

    一年前,红帽和微软共同发布了Kubernetes自动扩缩容工具KEDA 1.0,而现在官方强化KEDA的扩缩容器,发布第2个主要更新KEDA 2.0,能支持更多...

    DevOps持续交付
  • Hive Join优化

    在阐述Hive Join具体的优化方法之前,首先看一下Hive Join的几个重要特点,在实际使用时也可以利用下列特点做相应优化:

    大数据学习与分享
  • TypeScript 类型注解和类型推断

    当不添加类型注解时,TypesScript 也能知道变量 a 是一个数字,这就是 TypeScript 的类型推断:

    Leophen
  • Web前端进阶之路:提升前端开发效率

    低效的7大原因: 消极的心态,身体状态不好,目标不明确,思路不清晰,工作被打断,杂乱无章,做可被替代的重复劳动。

    Joel
  • Hive Join优化

    在阐述Hive Join具体的优化方法之前,首先看一下Hive Join的几个重要特点,在实际使用时也可以利用下列特点做相应优化:

    大数据学习与分享
  • APP功能测试要点

    app测试一般要关注的功能测试、兼容测试、流量测试、耗电量测试、性能测试、安全测试、网络测试、稳定性测试等。

    吾非同
  • DDR3 接口分析

    下图为各种参数设定,有bank、column、rank等参数设置(其实你不用动他们,这些都是之前选好的,不记得自己选了什么?乖乖!不如再翻翻DDR3 IP 核配...

    数字芯片社区
  • Go 每日一库之 go-app

    go-app是一个使用 Go + WebAssembly 技术编写渐进式 Web 应用的库。WebAssembly 是一种可以运行在现代浏览器中的新式代码。近两...

    用户7731323

扫码关注云+社区

领取腾讯云代金券