jenkins部署流程图_一文教你使用 Jenkins 设计多环境、多项目持续集成环境!
自动化部署主要是为了解决项目多、环境多、持续集成慢、部署操作麻烦、手动操作易出错、自动化运维等问题。
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 分支合并是有条件限制的,合并频率比较少
生产环境采用手动触发:因为生产环境的发布,有严控发布时间的,手动触发控制力强
作者:滴答的雨
https://www.cnblogs.com/heyuquan/p/jenkins-multi-env-cicd-architecture.html
end
最新整理的 2TB 干货资源,包括但不限于:架构师、大数据、Docker、运维、数据库、redis、MongoDB、电子书、Java基础、Java实战项目、ELK Stack、机器学习、BAT面试精讲视频等。只需在公众号对话框回复关键字:1024 即可免费获取全部资料。
推荐阅读 点击标题可跳转
1、再见!蚂蚁金服
2、葵花宝典!一文搞定 Nginx 限流配置
3、四核、独显!首批"重庆造"纯国产 PC 问世
4、Redis性能指标监控!你知几何?
5、面试官:kill -9 进程杀不掉,怎么办?
6、要干掉oracle?阿里推出国产开源的JDK!
看完本文有收获,请分享给更多人
关注「民工哥技术之路」加星标,提升IT技能
好文章,朕「在看」❤️↓↓↓
jenkins部署流程图_一文教你使用 Jenkins 设计多环境、多项目持续集成环境!相关推荐
- Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署
目录 一.前言 二.系统环境 三.Gitlab安装 3.1 安装依赖软件 3.2 开启postfix 3.3 安装Gitlab 3.4 设置服务器IP和端口 3.5 重置并启动GitLab 3.6 浏 ...
- 【Jenkins】持续集成环境实战
pdf供下载:https://download.csdn.net/download/hancoder/19835802 1.持续集成及Jenkins介绍 2.Jenkins安装和持续集成环境配置 3. ...
- k8s和harbor的集成_爱威尔-基于kubernetes集群的项目持续集成(gitlab+harbor+Jenkins)安装...
这个算是基于kubernetes集群的项目持续集成的前导篇,先把这用环境搭建好我们后面就可以专注做基于k8s的docker化项目持续集成了. gitlab安装 https://about.gitlab ...
- 一步步部署基于Windows系统的Jenkins持续集成环境
如题:本文将介绍如何在Windows环境下运用Jenkins部署持续集成环境.之所以写本文,是因为在最近工作当中,学习使用Jenkins时,确实遇到了一些问题,而大多数教程文档都是基于Mac或是Lin ...
- Jenkins 持续集成环境快捷部署
搭建持续集成环境 jenkins + maven + svn + tomcat 实现自动编译打包部署 1.环境准备 (1)JDK1.8.0_131 #不低于1.7 ...
- Jenkins+Svn搭建持续集成环境和自动部署
Jenkins+Svn搭建持续集成环境和自动部署 一.环境说明 centos 6.8 ip:192.168.1.26 二.运行环境配置 1.安装java环境,下载jdk并放在/usr/loca ...
- Docker+Jenkins持续集成环境(1)使用Docker搭建Jenkins+Docker持续集成环境
本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...
- 基于 Jenkins 快速搭建持续集成环境--转
源地址:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础 ...
- Jenkins+Maven+SVN快速搭建持续集成环境
Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面看看我们是如何几分钟就快速搭建一个持续集成环境吧. 假设我们目前已经有2个maven项目:entities(J ...
最新文章
- Tomcat服务器的常用配置
- Spring 官方发起Spring Authorization Server 项目
- Git清除本地账号密码/保存账号密码
- MAT之GUI:GUI的方式创建/训练/仿真/预测神经网络
- Node.js 笔记01
- com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
- 哈希表(散列表)基础概念与经典题目(Leetcode题解-Python语言)之上——原理与设计
- 【复习】快速幂算法详解
- 《数据结构与算法分析-C语言描述》习题2.6
- oracle查询失效包sql,sql – ORA-00904:子查询中的标识符无效
- 已解决 selenium.common.exceptions.NoSuchWindowException: Message: no such window
- [luogu3369]普通平衡树(替罪羊树模板)
- facenet lfw训练
- roundcube db.inc.php,开源电子邮件系统(Roundcube Webmail)
- 通过链接下载google drive文件
- 第七课,OpenGL之LookAt函数
- CentOS-6.5操作系统环境安装优化
- Day7--Python--基础数据类型补充,集合,深浅拷贝
- 共享充电宝广告机功能与特点
- php for循环删除元素,php-在foreach循环中取消设置数组值
热门文章
- Opencv——图像膨胀
- 怎样清空输入缓冲区里的内容
- 编译和使用APUE的源码
- 128位计算机 ps2,64位就最强?为啥没有128位电脑?
- FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS
- html设置了标签但是定义不了,在HTML标签管理器中设置不带元素ID的HTML中的事件...
- bucket sort sample sort 并行_双调排序Bitonic Sort,适合并行计算的排序算法
- android string 去掉斜杠,Android – PATH中的改装和斜杠字符
- linux fg 命令,Linux fg 命令 command not found fg 命令详解 fg 命令未找到 fg 命令安装 - CommandNotFound ⚡️ 坑否...
- java生成pdf_JAVA 生成PDF 并导出