前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jenkins 多环境 CI/CD 架构设计

Jenkins 多环境 CI/CD 架构设计

作者头像
DevOps持续交付
发布2020-07-16 17:54:33
1.7K0
发布2020-07-16 17:54:33
举报
文章被收录于专栏:DevOps持续交付DevOps持续交付

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

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

目标:

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

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

最终效果图

一键发布

一键回滚

Jenkins相关目录设计

代码语言:javascript
复制
----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 分支合并是有条件限制的,合并频率比较少。
  • 生产环境采用手动触发:因为生产环境的发布,有严控发布时间的,手动触发控制力强。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps持续交付 微信公众号,前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最终效果图
  • Jenkins相关目录设计
  • 约定及规范
  • 架构设计
    • CICD架构图
      • 项目映射配置文件设计
        • 一键发布job设计
          • 一键回滚job设计
            • 简易多环境CICD流程
            相关产品与服务
            持续集成
            CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档