作者:滴答雨https://www.cnblogs.com/heyuq...自动化部署主要是解决项目多,环境多,持续集成慢,部署操作麻烦,手工操作容易出错,自动化操作和维护等问题。Jenkins是开源CI&CD软件的领导者,提供超过1000个插件来支持构建、部署、自动化,满足任何项目的需求。目标:支持多分支、多环境、多项目、多套配置文件、多编程语言支持一键构建、集群发布支持一键回滚历史版本快速配置新增部署项目支持多项目使用同一个job来发布或者回滚另外:还可以根据需要添加gitlab自动触发构建、自动化测试、钉钉通知、邮件通知等需求最终效果图一键发布一键回滚Jenkins相关目录设计——--jenkins-exjenkins构建时使用的目录------软件Jenkins安装目录--------master------slave------backupJenkins备份目录-------master------module功能模块,每类功能相关的文件都放在对应的子文件夹下--------common----------script所有模块通用Script------publish发布功能------settings----------config构建时配置文件。例如:jenkins_profile.pubxml、项目配置文件等------------test-publish-template-app-config.json项目映射配置表------------scriptJenkinsjob构建时调用的脚本(方法封装)------source-code拉取的源码存放目录--------测试------------系统识别------------应用名称------build-result构建产品(编译结果)--------test------------系统识别--------应用名称------temp-file临时文件,job执行时生成的文件--------builder-history构建历史文件--------job-params构建过程传递参数的文件------app-config应用对应的环境配置文件--------test------------系统识别------------Applicationname------other-sub-module...约定规范Jenkinsjobnamingjobname全部小写,多个单词以“-”分隔。(eg:publish-template-onekey-deploy)作业命名约定:模块名-环境-函数名。(eg:publishmodule,publish-test-onekey-deploy)模块中的组件作业命名约定:module-c-组件名。(eg:publish-c-pull-code)作业入参以"p_"为前缀Jenkins作业中的脚本名(eg:powershell)变量全部小写,多个单词用"_"分隔表示路径的变量值。以“\”结尾的备份名使用“#”作为分隔符,恢复时方便带参数(eg:p_app_key#2019-1219-1503)架构设计CICD架构图CICD流程主要执行两个LANs:buildserver(DevelopmentIntranet)andDeploymentServer(ProductionIntranet)ProjectMappingConfigurationFileDesign要实现使用一个作业,下拉到“publish|rollback”不同的项目,我们需要一个灵活的项目配置映射文件,类似以下:配置文件选项的含义从命名上可以识别,主要包括:环境、代码分支、部署路径、复制排除文件列表、项目信息(项目唯一标识、目录文件夹名称、源代码路径、开发语言、集群节点信息...)app_config节点下的配置可以覆盖父节点的配置,以适应项目的具体部署需求。app_config是一个数组节点,可以方便的添加新的部署项,实现新项的快速CICD。一键发布Job设计“一键发布”的主要阶段有:合并项目相关参数>>获取最新代码>>编译打包>>将应用文件推送到服务器>>应用备份>>复制到Tempfolder>>Publish进入部署目录为了更好的实现和控制“一键发布”的各个阶段,设计了如下入参:一键回滚作业设计实现思路:当“一键发布”时,将发布记录保存在一个文件中,storekey为:p_app_key#2019-1219-1503。回滚时,选择要回滚的历史项目,先解析出p_app_key,然后获取项目配置信息,再回滚该项目的具体历史版本。设计的输入参数如图:简单的多环境CICD流程。一般软件公司都有几个软件开发、测试、发布的环境,所以每个环境都会有对应的CICD流程。这里,设计了一个简单的多环境CICD。流程图如下:自动触发CICD还是手动触发CICD???,我觉得:开发环境使用手动触发:因为对于开发环境来说,提交代码比较频繁,有时候提交到git并不想触发CICD。CICD每晚定时自动触发,及时抛出异常代码。测试环境采用自动触发:因为测试代码的git分支合并是有条件限制的,合并频率比较小。生产环境采用手动触发:因为生产环境的发布,如果对发布时间有严格的控制,手动触发控制性强。如有错误或其他问题,欢迎留言指正。如果有帮助,请点赞+转发分享。欢迎大家关注米公公的公众号:米公公的技术之路
