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

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

目标

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

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

l  支持一键回滚历史版本

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

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

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

本实践使用到的技术,可参考:《[CI&CD]jenkins自动化工具使用教程》

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

目录

最终效果图... 1

目录设计... 2

约定及规范... 3

架构设计... 4

#、CICD架构图... 4

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

#、一键发布job设计... 6

#、一键回滚job设计... 8

#、简易多环境CICD流程... 8

最终效果图

一键发布

一键回滚

目录设计

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

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

参数名

类型

默认值

说明

p_publish_model

下拉单选

reality

取值:reality、drill

发布模式
reality:正常发布,发布到应用服务器应用文件夹,做真实应用发布部署

drill:演练。发布到应用服务器temp文件夹后结束

p_app_key

下拉单选

通过这个key到配置文件里面找站点的具体配置信息

p_do_code_pull

Bool

True

拉取最新代码

p_do_build_package

Bool

True

是否重新编译打包

p_do_backup

Bool

True

是否执行备份

p_publish_content

多选

取值:app-file、config

发布文件列表(多选)

app-file:应用文件(不包含config文件)

config:配置文件

p_restart_daemon_process

Bool

True

是否重启守护进程(如果是IIS,勾选则重启应用程序池,不勾选则回收应用程序池)
为避免文件被占用,发布失败,所以这里默认勾选。如果只是新增页面文件,可以不勾选

p_remark

String

备注信息

#、一键回滚job设计

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

设计的输入参数如图:

参数名

类型

默认值

说明

p_history_item

下拉单选

每一次”一键发布”成功,都会生成一个对应的历史记录

p_restart_daemon_process

Bool

True

是否重启守护进程(如果是IIS,勾选则重启应用程序池,不勾选则回收应用程序池)
为避免文件被占用,回滚失败,所以这里默认勾选。

p_remark

String

备注信息

#、简易多环境CICD流程

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

over,谢谢查阅,觉得文章对你有收获,请多帮推荐。欢迎向我提供更好的资料信息。

Jenkins多环境持续集成架构实践的更多相关文章

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

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

  2. Jenkins+Gitlab搭建持续集成(CI)环境

    利用Jenkins+Gitlab搭建持续集成(CI)环境 Permalink: 2013-09-08 22:04:00 by hyhx2008in intern tags: jenkins gitla ...

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

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

  4. Jenkins 快速搭建持续集成环境

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

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

    搭建持续集成首先要了解什么是持续集成,带着明确的目标去搭建持续集成环境才能让我们少走很多弯路.持续集成(Continuous integration)简称CI,是一种软件开发的实践,可以让团队在持续集 ...

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

    持续集成通过自动化构建.自动化测试以及自动化部署加上较高的集成频率保证了开发系统中的问题能迅速被发现和修复,降低了集成失败的风险,使得系统在开发中始终保持在一个稳定健康的集成状态.jenkins是目前 ...

  7. Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(三):搭建jenkins集群环境

    写在前面 大家可以看到本文的配图,左边是jenkins单机环境,右边是jenkins集群.个中区别,不言而喻,形象生动. 前面我分别介绍了.net core 程序的多种部署方式(无绝对孰优孰劣): 1 ...

  8. Linux下Jenkins+git+gradle持续集成环境搭建

    Linux下Jenkins+git+gradle持续集成环境搭建 来源:IT165收集  发布日期:2014-08-22 21:45:50 我来说两句(0)收藏本文   一.项目介绍 和 linux ...

  9. 用Jenkins构建Django持续集成环境

    用Jenkins构建Django持续集成环境 - V2EX https://www.v2ex.com/t/32054

随机推荐

  1. 打jar包和使用jar包

    一.为什么要打jar包 二.如何查看jar包 三.如何开发jar包 四.拿到jar包之后,如何使用 一.为什么要打jar包 给别人用的时候一般给别人的是class文件.如果有很多类这么办?把类变成一个 ...

  2. hangfire控制台应用程序中添加控制面板

    1.使用nuget 管理包安装 Microsoft.AspNet.WebApi.OwinSelfHost 2.根目录添加新建类 名为:Startup.cs public class Startup { ...

  3. Springboot单元测试Junit深度实践

    Springboot单元测试Junit深度实践 前言 单元测试的好处估计大家也都知道了,但是大家可以发现在国内IT公司中真正推行单测的很少很少,一些大厂大部分也只是在核心产品推广单测来保障质量,今天这 ...

  4. InvalidSelectorError: Compound class names not permitted报错处理

    InvalidSelectorError: Compound class names not permitted报错处理 环境:python3.6 + selenium 3.11 +  chromed ...

  5. Ubuntu18.04 Server安装Nginx+Git服务和独立的svn服务

    安装Nginx+Git 需要安装的包有 nginx, fcgiwrap, git. 其中git在Ubuntu18.04 Server安装时已经默认安装了. 需要安装的是前两个 而fcgiwrap是在 ...

  6. 一款阿里开源的 Java 诊断工具

    Arthas是什么鬼? Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题. Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux. ...

  7. PHP 相关性系数计算

    相关系数公式 参考:https://baike.baidu.com/item/相关系数 PHP 实现代码 public static function calc($list) { $cv = []; ...

  8. 【c++基础】C与C++接口相互调用

    前言 编译程序的时候出现错误,入口程序如果是cpp文件可以编译成功,如果是c程序则出错.一般这个问题是c与c++之间接口相互调用出现的问题. 出现的错误是undefined reference to ...

  9. [LeetCode] 149. Max Points on a Line 共线点个数

    Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. ...

  10. 使用memcpy函数时要注意拷贝数据的长度

    memcpy函数简介 memcpy函数是C/C++语言中的一个用于内存复制的函数,声明在 string.h 中(C++是 cstring).其原型是: void *memcpy(void *desti ...