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

目录

一、实验

1.蓝绿发布准备

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

二、问题

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

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


一、实验

1.蓝绿发布准备

(1)环境

表1 主机

|---------|-------------|--------------|----------|---------------------|---------------------|
| 主机 | 架构 | 软件 | 版本 | IP | 备注 |
| gitlab | ansible 管理端 | gitlab 主节点 | 12.10.14 | 192.168.204.8:82 | jenkins slave(从节点) |
| | | sonarqube | 9.6 | 192.168.204.8:9000 | |
| master1 | ansible被管理端 | K8S master节点 | 1.20.6 | 192.168.204.180 | |
| node1 | ansible被管理端 | K8S node节点 | 1.20.6 | 192.168.204.181 | |
| node2 | ansible被管理端 | K8S node节点 | 1.20.6 | 192.168.204.182 | |
| jenkins | 无 | jenkins主节点 | 2.414.2 | 192.168.204.15:8080 | gitlab runner (从节点) |
| tomcat | 无 | nexus | 3.63 | 192.168.204.13:8081 | |

表2 蓝绿发布相关主机

|----------|-----------------|------|---------------|
| 服务 | IP地址 | 端口 | 主机名 |
| LB | 192.168.204.13 | 8017 | tomcat |
| service1 | 192.168.204.180 | 8019 | (K8S) master1 |
| service2 | 192.168.204.181 | 8019 | (K8S) node1 |
| service3 | 192.168.204.182 | 8019 | (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目录

bash 复制代码
  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配置文件

bash 复制代码
# vim /etc/nginx/nginx.conf
bash 复制代码
 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端口

bash 复制代码
# vim /etc/nginx/nginx.conf 

# nginx -t

# netstat -antlp | grep 8017

# service nginx restart

# systemctl restart nginx.service

(8) 测试负载均衡

bash 复制代码
curl http://127.0.0.1:8017

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

bash 复制代码
# 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 节点)

bash 复制代码
# 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版本变化

bash 复制代码
# watch -n 1 " curl http://127.0.0.1:8017/ -s"

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

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

bash 复制代码
# vim /etc/nginx/nginx.conf

# service nginx restart

# systemctl restart nginx.service

​

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

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

bash 复制代码
# 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 插件

bash 复制代码
Active Choices 插件用于自由式Jenkins参数化工作创建脚本化、动态和交互式作业参数。主动选择参数可以动态更新,并可以呈现为组合框,复选框,单选按钮或丰富的HTML UI小部件。

主动选择参数使用Groovy编写脚本,或者(可选)Scriptler Groovy脚本。

这些定制脚本支持使用Jenkins Java API、系统环境变量、全局节点属性,以及可能的外部Java和Javascript库。

安装插件后,有三种新的参数类型可用:
1)主动选择参数
2)主动选择反应参数
3)主动选择反应引用参数

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

(3)安装插件

(3)更新前效果

(4)更新

bash 复制代码
return [
"ansible",
"saltstack"
]
bash 复制代码
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)更新后效果

相关推荐
一点事10 小时前
windows:ELK搭建(单机)
windows·elk·jenkins
lcx_defender11 小时前
【Docker】Docker部署运行Elasticsearch
elasticsearch·docker·jenkins
Bruk.Liu1 天前
Gitea Actions 的概念及基础使用
运维·ci/cd·持续集成
学嵌入式的小杨同学1 天前
【Linux 实战】手写 ls 命令核心功能:C 语言实现文件属性与目录遍历(附完整可运行代码)
linux·运维·服务器·c语言·chrome·后端·ci/cd
叼奶嘴的超人1 天前
手动创建Docker版Fastapi CI/CD镜像文件
ci/cd·docker·fastapi
海兰1 天前
win11下部署elastic9.0+常见问题及解决方法(续)
运维·jenkins
_运维那些事儿1 天前
GitLabCI/CD语法
linux·服务器·git·ci/cd·gitlab·运维开发·devops
海鸥811 天前
k8s中Jenkins 配置文件「 更新不了 」
java·kubernetes·jenkins
_运维那些事儿1 天前
GitLab&Jenkins
运维·ci/cd·gitlab·jenkins·devops
一念一花一世界1 天前
Jenkins 太重?试试超轻量开源 CI/CD 工具 Arbess
运维·ci/cd·jenkins·arbess