设为首页 收藏本站
查看: 1293|回复: 0

[经验分享] Docker+Jenkins+GIT+Tomcat实战持续化集成

[复制链接]

尚未签到

发表于 2018-9-3 12:28:44 | 显示全部楼层 |阅读模式
  Docker基础教程可参考:容器Docker详解
  Jenkins基础知识可参考:jenkins笔记(1)
  Git基础知识可参考:GIT笔记
  文件脚本内容参考:junsansi,可以根据实际项目具体修改脚本。

一、概要

  开发将源码上传到github仓库,通过jenkins持续集成引擎结合git工具,将源码拉取到jenkins服务器,通过工具maven在本地讲源码编译打包成war包,在ssh到Docker宿主机,通过执行脚本生成制作自定义的Dockerfile,最终执行生成images,并启动container,即启动了包含war包的tomcat,即可实现对外提供web服务。


二、环境部署

主机名
IP地址
作用
Docker-server
172.20.6.20
Docker宿主机
Jenkins-server
172.20.6.22
Jenkins服务器
2.1 Jenkins服务器配置
  Jenkins的安装及配置Jenkins服务器的相关工具(maven、git、ssh)配置,详细步骤可参考jenkins笔记(1)的相关工具的安装及配置。

2.2 Docker宿主机配置
  Docker的基础命令可参考容器Docker详解,需要在Docker宿主机pull下tomcat的基础环境以及jenkins服务器通过docker用户登录Docker宿主机,讲war包发布到制定目录,执行特定脚本来生成Dockerfile,最终根据Dockerfile生成images,并启动基于包含war包的container,从而实现对外提供WEB服务。

  创建ssh发布用户及目录

  

useradd docker  
echo "docker:docker" |chpasswd      #为docker用户设置密码
  
mkdir -pv /data/dockerfiles/scripts
  

  上传脚本

  将脚本上传到 /data/dockerfiles/scripts,命名为devops,此名称可自定义,但是之后在配置jenkins执行ssh命令时候的脚本名称需要一致。由于脚本内部的分发路径是写的绝对路径,所以需要讲目录为固定,也可以根据实际修改。此脚本author:junsansi,可以参考其进行修改。
  

cat >/data/dockerfiles/scripts/devops.sh ${DOCKER_FILE}
  
echo "ADD *.war /usr/local/tomcat/webapps/${PROJECT_NAME}.war" >> ${DOCKER_FILE}
  
echo "EXPOSE 8080" >> ${DOCKER_FILE}
  
echo "CMD /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out" >> ${DOCKER_FILE}
  
cat ${DOCKER_FILE}
  
echo "**Init dockerfile end."
  
# Build dockerfile
  
cd ${DOCKER_FILE_DIR}
  
rm *.war -rf
  
mv /data/dockerfiles/war/${DOCKER_NAME}/*.war ./
  
echo ""
  
echo "##Build dockerfile for "${DOCKER_NAME}
  
/usr/bin/docker build -t ${DOCKER_NAME}:${PROJ_VERSION} .
  
# Run docker container
  
echo ""
  
echo "##Running docker container: "${DOCKER_NAME}
  
/usr/bin/docker run --name ${DOCKER_NAME}_d1 -d -p ${SPORT}:${DPORT} ${DOCKER_NAME}:${PROJ_VERSION}
  
EOF
  
chmod +x  /data/dockerfiles/scripts/devops.sh
  
chown docker.docker /data/dockerfiles -R
  

  Docker宿主机获取tomcat镜像

  docker pull docker.io/tomcat
  使用docker images查看tomcat镜像
DSC0000.jpg

  此时Docker宿主机就已经配置完毕。

三、Jenkins配置
  登录Jenkins的WEB界面

3.1 配置Docker宿主机的ssh信息
  系统管理---系统设置---Publish over SSH---增加SSH Server
  添加SSH Server可以使用密钥形式添加,也可以直接使用用户名密码, 此处使用用户名密码,选择
  Use password authentication, or use a different key,即docker用户的密码,进行登录发布,之前已经讲/data/dockerfiles目录的属主属组更改为docker,确认Jenkins服务器使用docker用户可以正常在此目录下进行后续操作。
DSC0001.jpg


3.2 构建一个maven项目


一般设置

DSC0002.jpg

  为保证Jenkins服务器的磁盘有充足的空间,在选中丢弃旧的构建->保持构建的最大个数为10个
DSC0003.jpg

  在真实开发环境中,成员直接相互协助,GIT是多分支的,考虑到分支管理,需在此选中参数化构建->选择Git Parameter->定义名称为release_branch,因此选择参数类型为Branch:如果自己发现devops脚本可以看到里面是调用了此参数进行选择构建的分支。
  同时创建考虑到创建Docker的名称,此时需要给后续创建的docker images以项目的名称命名。
DSC0004.jpg



源码管理

  源码管理选择git,填入仓库url:git@github.com:redhatxl/zrlog.git
DSC0005.jpg

  此时发现会出现报错信息,因为此仓库为我的私有仓库,需要配置Credentials,点开add, Add Credentials的    Kind选择SSH Username with private key,Username选择之前在github上传的公钥用户的用户名,此次为root,Private Key为jenkins服务器登录github的本地私钥,查看私钥cat /root/.ssh/id_rsa 复制粘贴到Key区域,完成添加。此时可以发现报错已经消失。
DSC0006.jpg

  在Branches to build模块需要填写之前我们参数话的变量,在此引用$release_branch
DSC0007.jpg



环境构建

  在build的Goals and options添加maven构建参考及命令:clean install -D maven.test.skip=true
DSC0008.jpg



增加构建后操作

  增加构建后步骤---选择Send build artifacts over SSH
  SSH-Server name选择Docker宿主机
  Transfers中填写Source files:target/*.war
  Remove prefix:target/
  Remote directory:/war/$project_name,即在远端/data/dockerfiles下的war目录(/data/dockerfiles/war/docker01-tomcat-zrlog)
  Exec command:/data/dockerfiles/scripts/devop.sh $project_name zrlog $release_branch 8888 8080
  即jenkins服务器ssh到docker宿主机之后执行的脚本命令,执行/data/dockerfiles/scripts/devop.sh脚本,此脚本需要传入5个参考,
  project_name:项目名称,即docker生成images的名称
  zrlog:即项目名称
  release_branch:在git上提交的分支,此处我们只有master分支
  两个端口,前一个端口及宿主机的监听端口,后一个端口及映射到docker容器内部的端口,在此处使用的为tomcat,默认的为8080端口。
DSC0009.jpg

  注意:再次可以添加多个server,即实现集群,可以讲web服务器为无状态,将日志文件挂载到本地物理磁盘以实现日志监控即数据持久化存储。
  添加增加构建后操作,选择Editable Email Notification,利用插件邮件来发送通知。
  可以根据需求自定义邮件主题与内容,此处添加信息接受人,由于全局配置了always,在高级设置内,填写接受人邮箱。
DSC00010.jpg

  创建完毕后点击应用并保存。

3.3 执行构建
  选择Build with Parameters,然后在右边release_branch内选择需要执行的github上的分支,此处为master,同理选择    project_name,为docker images的name可以选择自己添加自定义的名字,点击开始构建
DSC00011.jpg

  查看Console Output
DSC00012.jpg

DSC00013.jpg

  查看邮件通知
DSC00014.jpg

  登录docker宿主机查看images与container
DSC00015.jpg

  网页测试
DSC00016.jpg

  至此利用jenkins简单的实现了讲github上的源码拉去到jenkins服务器本地,利用maven编译生成war包并分发到docker宿主机,执行脚本生成dockerfile,并启动容器,最终邮件通知。

四、启动多个容器
  在配置jenkins的ssh后的命令我们可以添加多个server从而实现分布式,同时我们也可以对在一台主机上通过区分端口号来生成多个images并启动多个不通端口的container
  在General的参数化构建过程中增加第三个参数proxy_port可以设置为docker宿主机的本地监听端口从而实现多端口多实例
DSC00017.jpg

  在ssh命令中调用
DSC00018.jpg

  在构建开始时可以定义不同的images对应不通的端口
DSC00019.jpg

  查看启动后的容器
DSC00020.jpg

  注意:如果有特殊需求,例如发布php代码或其他可以自行对脚本进行修改,可以根据需求定义多个参数灵活使用。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-562051-1-1.html 上篇帖子: 配置sonarqube_jenkins进行持续JAVA代码自动构建审查 下篇帖子: 利用Jenkins和SonarQube集成对代码进行持续检测
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表