Docker部署Jenkins并发布web服务
2016-08-03 18:49
603 查看
工作需要,需要搭建Jenkins,用maven编译java项目,打包发布docker镜像,同时用tomcat部署web服务。这样会大大的节省开发人员和测试人员的时间,也为发布产品提供方便,所以构建了这样的一个系统,相对来说比较简单,只是对于初次接触的人来说,还是有些小坑需要去克服的,记录一下自己的搭建过程。
下载image,如果已经有了相关的image的tar包,只需load进去即可。
因为官方的jenkins比较大,并且不知道root密码,所以最后用的时速云的jenkins,大小为488M。
因为要发布web服务,所以需要tomcat。
因为要把生成的image保存,所以在本地搭建了一个registry。
需要修改/usr/lib/systemd/system/docker.service这个配置文件,以便能通过内网的IP访问到registry
其余细节,不再赘述。
注册了一个用户:cwebtools,并给此用户设置了管理员权限。
注:最初想在jenkins的container里面安装jdk和docker,后来想到可以在slave节点安装,所以这个container就相对比较纯净,除了jenkins,不再安装其他的模块。
这里设置为:
JAVA_HOME=/usr/local/java
MAVEN_HOME=/usr/local/maven
通过WinSCP,把jdk和maven拷贝到宿主机,按照习惯放在了/usr/local/目录下。
注:maven需要权限,所以要给maven的bin下文件设置执行权限。
jdk1.7需要设置JAVA_HOME,设置完后,需要重启系统,才能生效,如果之前有其他版本的jdk,还需要卸载以前的jdk。
过程如下:
设置环境变量/etc/profile文件最后添加
这里遇到了一个很大的坑,费了很长时间,但不知是何原因,如果设置JAVA_HOME=/usr/java/jdk1.7.0_79,是不行的。文件夹只有改为java名字,slave才能连接上。
java文件夹下的bin和jre下的bin都要赋上执行权限,否则会报错:permission denied。
2.丢弃旧的构建。可根据需求自由设置,天数设置为10,构建个数20。
3.设置子节点的label:cwebtools。
4.设置svn的网址,用户名以及密码。
5.设置构建触发器,设为早晨8点和中午12点编译一次。
6.添加3个maven构建步骤(因为有3个maven项目),因为是maven项目,Goals设为clean install,POM设为pom文件的绝对路径,这里可以用全局变量WORKSPACE。
7.添加编译后脚本
8.这里实现的功能,把编译结果cp到cwebtools文件夹中,build一个image,push到registry中,删除原来的container,启动新的container,并且挂载3个volumes存放数据,同时会把生成的jar包拷贝到备份目录backup下,做一个备份,以便查阅。
9.点击构建,如果顺利的话,第一次编译大概需要2-3小时,因为需要下载maven和jdk的包,之后的编译加上部署,在1-2分钟以内。
大家若有什么问题,欢迎留言交流。
1.登陆虚拟机
物理机自然是资源有限了,所以申请了一台虚拟机(memory 4G, swap 10G,disk 200G),带有界面的,方便操作。1.连接
用putty连接上之后,安装vncyum install tigervnc tigervnc-server -y
2.分辨率
然后设置分辨率vncserver -geometry 1600x900
3.防火墙
关闭防火墙,开始不知道,所以尝试多次都连接不上systemctl stop firewalld.service
4.登陆
用 VNC Viewer登陆。2.安装docker,pull所用到的image
系统为CentOS7.2,安装docker步骤:https://docs.docker.com/engine/installation/linux/centos/下载image,如果已经有了相关的image的tar包,只需load进去即可。
docker pull jenkins docker pull tomcat docker pull registry docker pull index.tenxcloud.com/gavincook/jenkins
因为官方的jenkins比较大,并且不知道root密码,所以最后用的时速云的jenkins,大小为488M。
因为要发布web服务,所以需要tomcat。
因为要把生成的image保存,所以在本地搭建了一个registry。
3.搭建本地registry
docker run -d -p 5000:5000 -v /home/registry:/tmp/registry --name cwebtools_registry --restart=always registry
需要修改/usr/lib/systemd/system/docker.service这个配置文件,以便能通过内网的IP访问到registry
ExecStart=/usr/bin/docker -H unix:///var/run/docker.sock --insecure-registry 10.104.1.199:5000
其余细节,不再赘述。
4.部署Jenkins
docker run -d -p 8002:80 --restart=always --name cwebtools_jenkins 10.104.1.199:5000/cwebtools_jenkins --httpPort=80
1.端口
这里用的是8002端口,可以根据实际情况设置不同的端口号。2.访问
启动成功后,可以通过10.104.1.199:8002访问jenkins。3.设置
先设置Configure Global Security,启用相应的安全策略,开放用户注册,添加管理员策略,关闭匿名用户等。注册了一个用户:cwebtools,并给此用户设置了管理员权限。
注:最初想在jenkins的container里面安装jdk和docker,后来想到可以在slave节点安装,所以这个container就相对比较纯净,除了jenkins,不再安装其他的模块。
3.节点
添加节点,取名为cwebtools,开始是连接不上的,在宿主机安装ssh,并启动服务,即可连接上这个节点。rpm -qa |grep ssh //检查是否装了SSH包 yum install openssh-server //安装 chkconfig --list sshd //检查SSHD是否在本运行级别下设置为开机启动 chkconfig --level 2345 sshd on //如果没设置启动就设置下 systemctl restart sshd.service //重新启动 netstat -antp |grep sshd //看是否启动了22端口
4.插件
安装必要的插件,比如svn,maven,slave等,如果网速和控件允许的话,也可以把所有的插件都安装上。5.设置
系统设置,主要是设置jdk和maven路径,在安装了jdk和maven之后再设置。这里设置为:
JAVA_HOME=/usr/local/java
MAVEN_HOME=/usr/local/maven
5.在宿主机安装jdk和maven
因项目需求,这里安装的jdk为1.7版本,maven版本没有要求,我安装的是3.3.9。通过WinSCP,把jdk和maven拷贝到宿主机,按照习惯放在了/usr/local/目录下。
注:maven需要权限,所以要给maven的bin下文件设置执行权限。
jdk1.7需要设置JAVA_HOME,设置完后,需要重启系统,才能生效,如果之前有其他版本的jdk,还需要卸载以前的jdk。
过程如下:
java -version rpm -qa | grep java yum -y remove java java-1.8.0-openjdk-1.8.0.101-3.b13.el7_2.x86_64
设置环境变量/etc/profile文件最后添加
export JAVA_HOME=/usr/java/java export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin
这里遇到了一个很大的坑,费了很长时间,但不知是何原因,如果设置JAVA_HOME=/usr/java/jdk1.7.0_79,是不行的。文件夹只有改为java名字,slave才能连接上。
java文件夹下的bin和jre下的bin都要赋上执行权限,否则会报错:permission denied。
6.新建一个jenkins新任务
1.选择一个自由风格的项目,名字为cwebtools。2.丢弃旧的构建。可根据需求自由设置,天数设置为10,构建个数20。
3.设置子节点的label:cwebtools。
4.设置svn的网址,用户名以及密码。
5.设置构建触发器,设为早晨8点和中午12点编译一次。
6.添加3个maven构建步骤(因为有3个maven项目),因为是maven项目,Goals设为clean install,POM设为pom文件的绝对路径,这里可以用全局变量WORKSPACE。
7.添加编译后脚本
REGISTRY_URL=10.104.1.199:5000 cp -r $WORKSPACE/cwebpdf/target/pdftools /home/cwebtools1.2/cwebtools docker build -t $REGISTRY_URL/cwebtools:1.2 /home/cwebtools1.2 docker push $REGISTRY_URL/cwebtools:1.2 if docker ps -a | grep -i cwebtools_12;then docker rm -f cwebtools_12 fi docker run -d -p 8088:8080 \ -v /home/cwebtools_data/input:/home/cwebtools/input \ -v /home/cwebtools_data/output:/home/cwebtools/output \ -v /home/cwebtools_data/logs:/home/cwebtools/logs \ --name cwebtools_12 \ --restart=always \ $REGISTRY_URL/cwebtools:1.2 MYTIME=`date +%y%m%d_%R` cp $WORKSPACE/cwebpdf/target/pdftools.war /home/backup/pdftools_20$MYTIME.war
8.这里实现的功能,把编译结果cp到cwebtools文件夹中,build一个image,push到registry中,删除原来的container,启动新的container,并且挂载3个volumes存放数据,同时会把生成的jar包拷贝到备份目录backup下,做一个备份,以便查阅。
9.点击构建,如果顺利的话,第一次编译大概需要2-3小时,因为需要下载maven和jdk的包,之后的编译加上部署,在1-2分钟以内。
7.大功告成
至此,搭建成功,当代码有更新时,只需要点击构建,然后就可以在网页打开最新的cwebtools服务。大家若有什么问题,欢迎留言交流。
相关文章推荐
- Lync Server 2010部署与应用(九)---发布外部Web服务
- 品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署
- Docker容器使用jenkins部署web项目(总结)
- 自动化发布项目之jenkins + git + maven 自动化部署一个web项目
- 混合架构下的docker-tomcat容器协同部署JAVA WEB服务,内嵌ICE中间件服务的技术实现
- centos7 在docker swarm中运行Jenkins,利用gitlab的webhook触发自动部署脚本
- Centos7 & Docker & Jenkins & ASP.NET Core 2.0 自动化发布和部署
- 打造jenkins+docker+nodejs项目的自动部署环境(webhook)
- Axis2发布服务,支持Tomcat和Weblogic的SSHWeb项目部署
- 微服务之一键部署git+maven+jenkins+docker
- ISA+花生壳发布WEB+Mail+FTP服务器到Internet(单网卡部署WEB+Mail+FTP+ISA服务之终结
- 阿里云通过Docker部署Jenkins服务过程(支持Maven)
- Centos7 & Docker & Jenkins & ASP.NET Core 2.0 自动化发布和部署
- [整理]docker学习之使用jenkins容器部署git上的web到nginx容器中
- ASP.NET创建Web服务之发布和部署
- 集成安装6 jenkins构建发布 soa服务 和 web项目
- .NET Core微服务之基于Jenkins+Docker实现持续部署(Part 1)
- .net Core WebApi发布到Docker并推送到阿里云容器服务
- 品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署
- Git+Jenkins+Docker实现web项目的自动部署