CI/CD介绍
- CI(持续集成)/CD(持续交付/持续部署)
发布流程设计
基础环境准备
docker服务器 与 Harbor
1 | Jenkins服务器 172.17.70.243 |
- docker 服务器 能够访问 Harbor仓库
1 | [root@Jenkins ~]# docker login 172.17.70.242 |
- 每台服务器安装JAVA环境
1 | # 解压 |
部署 Git 服务器
- 部署仓库
1 | 1. 安装Git |
- 部署本地git 提交solo项目到git仓库
1 | 1. Jenkins服务器上安装git,下载solo项目有到服务器上,模拟开发上传到git仓库再 |
创建 自定义虚拟网络 solo
1 | # 在docker服务器上创建 |
solo 部署 mysql服务器
1 | docker run -d \ |
修改 solo 源码中的数据库连接配置
1 | # 使用mysql容器名访问 |
部署 Harbor 镜像仓库
1 | 1. 如果不使用https,docker服务器上别忘记配置信任 |
Jenkins 安装
1 | # 配置jenkins 服务器 与git服务器免交互 |
1 | # 使用jenkins容器 |
构建基础镜像
1 | [root@Docker solo]# mkdir -p /opt/solo/ |
1 | # 构建 |
Jenkins基本配置
全局工具配置 git jdk maven
系统配置
1 | # jenkins 安装ssh插件 |
1 | 别忘记保存 |
Jenkins创建项目
安装 Maven 插件
1 | Maven Integration |
创建sola项目
1 | 1. 配置好源码管理 jenkins到git 免交互访问 |
立即构建 测试一次
1 | cd /var/jenkins_home/workspace/solo_blog/target |
增加构建后操作
- 把项目打包到镜像 推送到镜像仓库
1 | # 构建后 到当前目录 写dockerfile文件 构建镜像并推送到公共仓库 |
项目镜像传给 docker服务器 运行
- 使用项目构建后操作
1 | # 远程登录docker服务器,然后拉取项目镜像 run |
构建后查看
1 | [root@Docker ~]# docker ps |
测试maven 构建 solo项目
1 | # 仅仅是测试 |
使用 pipeline 构建项目
把整体工作放在流水线中
基础使用 阶段演示
1 | node { |
使用pipeline的优点
- 项目发布可视化,明确阶段,方便问题处理
- jenkinsfile文件管理整个项目的生命周期
- jenkinsfile可以放到整个项目代码中版本管理
- 使用pipeline 是ci/cd 最佳实践
1 | 1. 构建过程更加清晰可见 |
配置 solo pipeline
丢弃旧的构建
代码版本参数
maven的配置
1 | 1. 我这个jenkins是容器启动的 挂载了本地的maven环境 |
流水线脚本
1 | # 这里我发现 我的jenkins是容器安装的...没法指定node也没办法远程 我就吧docker先部署到本地了 ,后面我在想办法改回来 |
1 | node { // 指定Slave标签 我这用的master 上面有git和maven环境 |
1 | # 查看git配置 |
模拟版本发布
1 | # 创建个文件 形成新版本代码 |
开始构建
1 | # 容器启动 |
1 | # 进入容器 查看是否存在新版本文件 |
Consul 容器服务自动注册与发现
安装与部署
1 | 1、介绍 |
1 | [root@Jenkins opt]# ls -l consul_0.9.2_linux_amd64.zip |
1 | # 后台启动 端口8500 |
基础使用
1 | 查看集群信息: |
实现容器服务自动加入Nginx集群 Docker + Registrator + Consul
- consul-template:一个守护程序,用于实时查询consul集群数据,并更新文件系统上的任意数量的指定模板,生成配置文件,更新完成后可以选择运行任何Shell命令。
- 让它生成nginx配置文件 从集群中拿去 再去放入nginx里 执行重载
- gliderlabs/registrator:检查容器运行状态自动注册和注销Docker容器的服务到服务配置中心。目前支持Consul、etcd和SkyDNS2。
- 检查容器服务状态、注销和配置服务中心 运行在docker主机,如果创建新的docker就捕捉出来,注册到Consul
1 | https://github.com/hashicorp/consul-template |
模拟在一台docker主机上跑多个nginx服务
让他们自动加入一个nginx LB上
registrator 容器部署
1 | # Docker主机启动注册器 |
1 | [root@Docker ~]# docker run -d --name=registrator --net=host --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest consul://172.17.70.243:8500 |
- 他会自动将本地的容器 注册到 consul中
安装 nginx
1 | # 172.17.70.243 |
安装 consul-template
- 需要与nginx同一台机器
1 | [root@Jenkins opt]# unzip consul-template_0.19.3_linux_amd64.zip |
生成配置文件 并 reload nginx
1 | [root@Jenkins consul_nginx]# cd /opt/consul_nginx |