持续集成交付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)更新后效果

相关推荐
让生命变得有价值5 小时前
使用 helm 部署 gitlab
gitlab·helm
Kkooe5 小时前
GitLab|GitLab报错:PG::ConnectionBad: could not connect to server...
gitlab
szc17679 小时前
docker 相关命令
java·docker·jenkins
pumpkin8451411 小时前
GitHub 和 GitLab
gitlab·github
lizz66612 小时前
gitlab:使用脚本批量下载项目,实现全项目检索
gitlab
脸ル粉嘟嘟12 小时前
GitLab使用操作v1.0
学习·gitlab
牙牙70515 小时前
Centos7安装Jenkins脚本一键部署
java·servlet·jenkins
灼烧的疯狂15 小时前
K8S + Jenkins 做CICD
容器·kubernetes·jenkins
java1234_小锋15 小时前
Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
大数据·elasticsearch·jenkins
我的运维人生16 小时前
Elasticsearch实战应用:构建高效搜索与分析平台
大数据·elasticsearch·jenkins·运维开发·技术共享