# 使用jenkins進行持續集成與發布
### 基于Jenkins的CI/CD流程如下:

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應用發布系統(四)