ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 使用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