持续集成交付CICD:Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前端应用的蓝绿发布

本文主要是介绍持续集成交付CICD:Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前端应用的蓝绿发布,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、实验

1.蓝绿发布准备

2.Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前端应用的蓝绿发布

二、问题

1.手动构建Jenkins前端项目CI流水线报错

2.如何优化手动构建流水线选项参数


一、实验

1.蓝绿发布准备

(1)环境

表1 蓝绿发布相关主机

服务IP地址端口主机名
LB192.168.204.138017tomcat
service1192.168.204.1808019(K8S) master1
service2192.168.204.1818019(K8S)   node1
service3192.168.204.1828019(K8S)    node2

(2)策略

service1服务 1.1.2 (CD部署制品), 升级1.1.3(先CI下载制品,再CD部署制品)

service2服务 1.1.2 (CD部署制品),升级 1.1.3(先CI下载制品,再CD部署制品)

service3服务 1.1.2 (CD部署制品),服务下线,升级 1.1.3(先CI下载制品,再CD部署制品),服务上线

(3)修改3台service服务的nginx配置文件 root目录

  1 user  nginx;2 worker_processes  auto;3 4 error_log  /var/log/nginx/error.log notice;5 pid        /var/run/nginx.pid;6 7 8 events {9     worker_connections  1024;10 }11 12 13 http {14     include       /etc/nginx/mime.types;15     default_type  application/octet-stream;16 17     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '18                       '$status $body_bytes_sent "$http_referer" '19                       '"$http_user_agent" "$http_x_forwarded_for"';20 21     access_log  /var/log/nginx/access.log  main;22 23     sendfile        on;24     tcp_nopush      on;25     tcp_nodelay     on;26     types_hash_max_size 2048;27 28 29     keepalive_timeout  65;30 31     #gzip  on;32 33     include /etc/nginx/conf.d/*.conf;34 35 36 server {37     listen 8099;38     server_name _;39     root /usr/share/nginx/html/devops03-devops-ui;40 41     # Load configuration files for the default server block.42     include /etc/nginx/default.d/*.conf;43 44     location / {45     }46 47     error_page 404 /404.html;48         location = /40x.html {49     }50 51     error_page 500 502 503 504 /50x.html;52         location = /50x.html {53     }54  }55 

(4)Jenkins手动构建前端项目CD流水线

(5)成功

(6)LB主机修改nginx配置文件

# vim /etc/nginx/nginx.conf
 1 2 user  nginx;3 worker_processes  auto;4 5 error_log  /var/log/nginx/error.log notice;6 pid        /var/run/nginx.pid;7 8 9 events {10     worker_connections  1024;11 }12 13 14 http {15     upstream webservers {16         server 192.168.204.180:8099 weight=100;17         server 192.168.204.181:8099 weight=100;18         server 192.168.204.182:8099 weight=100;19 }20     include       /etc/nginx/mime.types;21     default_type  application/octet-stream;22 23     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '24                       '$status $body_bytes_sent "$http_referer" '25                       '"$http_user_agent" "$http_x_forwarded_for"';26 27     access_log  /var/log/nginx/access.log  main;28 29     sendfile        on;30     #tcp_nopush      on;31 32 33     keepalive_timeout  65;34 35     #gzip  on;36 37     include /etc/nginx/conf.d/*.conf;38 39 40 server {41     listen     8017;42     location / {43       proxy_pass http://webservers;44   }45  }46 }

(7)重启服务监听8017端口

# vim /etc/nginx/nginx.conf # nginx -t# netstat -antlp | grep 8017# service nginx restart# systemctl restart nginx.service

(8) 测试负载均衡

curl http://127.0.0.1:8017

(9)watch命令观察service版本变化

# watch -n 1 " curl http://127.0.0.1:8017/ -s"

2.Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前端应用的蓝绿发布

(1)GitLab前端项目添加RELEASE-1.1.3分支

(2) Jenkins修改共享库流水线脚本路径

(3)Jenkins手动构建前端项目CI流水线

(4)成功

(5)Nexus查看制品

(6) 修改LB的nginx配置文件,service3下线(K8S node2 节点)

# vim /etc/nginx/nginx.conf 
……
server 192.168.204.181:8099 down;
……# service nginx restart# systemctl restart nginx.service​

(7) Jenkins手动构建前端项目CD流水线到node1 节点

(8) watch命令观察service版本变化

# watch -n 1 " curl http://127.0.0.1:8017/ -s"

(9)Jenkins手动构建前端项目CD流水线到node2节点

(10) 修改LB的nginx配置文件,service3上线(K8S node2 节点)

# vim /etc/nginx/nginx.conf# service nginx restart# systemctl restart nginx.service​

(11)Jenkins手动构建前端项目CD流水线到master1节点

 (12) watch命令观察service版本变化

# watch -n 1 " curl http://127.0.0.1:8017/ -s"

二、问题

1.手动构建Jenkins前端项目CI流水线报错

(1)报错

ERROR: Couldn't find any revision to build. Verify the repository and branch configuration for this job.

(2)原因分析

分支名错误

(3)解决方法

 GitLab前端项目确认添加RELEASE-1.1.3分支

构建时输入正确的分支名称

2.如何优化手动构建流水线选项参数

(1)Active Choices 插件

Active Choices 插件用于自由式Jenkins参数化工作创建脚本化、动态和交互式作业参数。主动选择参数可以动态更新,并可以呈现为组合框,复选框,单选按钮或丰富的HTML UI小部件。主动选择参数使用Groovy编写脚本,或者(可选)Scriptler Groovy脚本。这些定制脚本支持使用Jenkins Java API、系统环境变量、全局节点属性,以及可能的外部Java和Javascript库。安装插件后,有三种新的参数类型可用:
1)主动选择参数
2)主动选择反应参数
3)主动选择反应引用参数

(2)三种 Active Choices parameter 类型的行为和呈现特征

(3)安装插件

(3)更新前效果

(4)更新

return [
"ansible",
"saltstack"
]

if  (deployTool.equals("ansible")){return ["192.168.204.180","192.168.204.181","192.168.204.182"]
}
if  (deployTool.equals("saltstack")){return ["tomcat","jenkins"]
}

(5)更新后效果

这篇关于持续集成交付CICD:Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前端应用的蓝绿发布的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/501827

相关文章

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应