# 使用jenkins进行持续集成与发布
### 基于Jenkins的CI/CD流程如下:
![image](https://i.imgur.com/nGGam7v.png)
1. 从gitlab拉取代码, Jenkins 使用基础镜像,完成应用镜像build 。
1. 应用镜像上传至harbor镜像仓库
1. Jenkins从harbor仓库下载应用镜像,完成容器启动。
1. 从Zokeeper 配置中心拉取应用配置文件。
1. Nginx 反向代理到docker应用
## 使用Docker构建Jenkins 集成环境
基础docker镜像准备
docker pull jenkins
运行JenkinsRun.sh脚本,
#!/bin/bash
# 使用阿里云 jenkins images 初始化全新配置
AppOrg='ttlinux'
AppEnv='demo'
AppName='jenkins'
AppAddresses='10.175.189.38_8080,8080:8080' #指明启动jenkins容器宿主机IP:Port
AppCfgs=''
ZookeeperCluster=''
RunImage='jenkins:latest'
RunOptions='-d -u root:jenkins -v /data/volume/jenkins/dump:/var/jenkins_home'
RunCmd=''
# 循环部署多实例
for AppAddress in ${AppAddresses}
do
# 初始化变量
ADDRESS=${AppAddress%%,*} # 宿主机地址和宿主机端口
AppExpose=`echo ,${AppAddress#*,} | sed 's/,/ -p /g'` # 需要影射的端口
AppIp=${ADDRESS%%_*} # 宿主机地址
AppPort=${ADDRESS##*_} # 宿主机端口
AppId=`echo ${AppOrg}_${AppEnv}_${AppName}_${AppIp}_${AppPort} | sed 's/[^a-zA-Z0-9_]//g' | tr "[:lower:]" "[:upper:]"` # 实例容器名
AppHostname=`echo ${AppPort}-${AppIp}-${AppName}-${AppEnv}-${AppOrg} | sed 's/[^a-zA-Z0-9-]//g'| tr "[:upper:]" "[:lower:]"` # 实例主机名
docker -H ${AppIp}:4243 pull ${RunImage} >/dev/null # 同步版本镜像
RESULT=`docker -H ${AppIp}:4243 inspect -f '{{.Image}}' ${AppId} || echo 0` # 保留当前实例的镜像Id
docker -H ${AppIp}:4243 stop ${AppId} || echo # 停止当前实例
docker -H ${AppIp}:4243 rm ${AppId} || echo # 删除当前实例
sleep 3
# 部署新实例
docker -H ${AppIp}:4243 run --restart=always --name=${AppId} --hostname=${AppHostname} -e JAVA_OPTS="-Xms2G -Xmx2G -XX:PermSize=256M -XX:MaxPermSize=256M -Duser.timezone=Asia/Shanghai" -e AppId=${AppId} ${AppExpose} ${RunOptions} ${RunImage} ${RunCmd}
docker -H ${AppIp}:4243 rmi ${RESULT} || echo # 删除之前的镜像
done
### Jenkins 基本配置
- jenkins配置registry全局变量
- nginx 反向代理访问jenkins
- 第一章 Docker核心技术(一)
- 第一章 Docker核心技术(二)
- 第一章 Docker核心技术(三)
- 第一章 Docker核心技术(四)
- 第二章 Docker 入门
- 第三章 使用docker镜像
- 第四章 实战应用使用Docker构建LNMP环境 (一)
- 第四章 实战应用使用Docker构建LNMP环境 (二)
- 第四章 实战应用使用Docker构建LNMP环境 (三)
- 第五章 构建企业级Harbor-Registry
- 第六章 构建Docker应用发布系统(一)
- 第六章 构建Docker应用发布系统(二)
- 第六章 构建Docker应用发布系统(三)
- 第六章 构建Docker应用发布系统(四)