Springbootdockerjenkins持续集成实战操
1操作步骤1。1docker安装
在虚拟机(vitualBox)下执行yum命令:
〔rootcentosvagrant〕yuminstalldocker
安装完成后,使用下面的命令来启动docker服务,并将其设置为开机启动:
〔rootcentosvagrant〕servicedockerstart
查看镜像:
〔rootcentosvagrant〕dockerimages
安装问题:
在执行yuminstalldocker命令是安装不成功的问题:
清除一下缓存:
〔rootcentosvagrant〕yumcleanall
〔rootcentosvagrant〕yummakecache
再执行安装命令:
〔rootcentosvagrant〕yuminstalldocker
1。2配置springboot
pom。xml配置:
lt;?xmlversion1。0encodingUTF8?
projectxmlnshttp:maven。apache。orgPOM4。0。0
xmlns:xsihttp:www。w3。org2001XMLSchemainstance
xsi:schemaLocationhttp:maven。apache。orgPOM4。0。0http:maven。apache。orgxsdmaven4。0。0。xsd
modelVersion4。0。0spanmodelVersion
groupIdorg。zz。springbootspangroupId
artifactIdspringbootdemospanartifactId
versionlatestspanversion
parent
groupIdorg。springframework。bootspangroupId
artifactIdspringbootstarterparentspanartifactId
version1。5。2。RELEASEspanversion
spanparent
dependencies
dependency
groupIdorg。springframework。bootspangroupId
artifactIdspringbootstarterwebspanartifactId
spandependency
dependency
groupIdorg。springframework。bootspangroupId
artifactIdspringbootstartertestspanartifactId
scopetestspanscope
spandependency
spandependencies
properties
project。build。sourceEncodingUTF8spanproject。build。sourceEncoding
docker。image。prefixdemospandocker。image。prefix
spring。boot。version1。3。3。RELEASEspanspring。boot。version
spanproperties
build
plugins
plugin
groupIdorg。springframework。bootspangroupId
artifactIdspringbootmavenpluginspanartifactId
spanplugin
plugin
groupIdcom。spotifyspangroupId
artifactIddockermavenpluginspanartifactId
version0。4。3spanversion
configuration
imageName{docker。image。prefix}{project。artifactId}spanimageName
dockerDirectorysrcmaindockerspandockerDirectory
resources
resource
targetPathspantargetPath
directory{project。build。directory}spandirectory
include{project。build。finalName}。jarspaninclude
spanresource
spanresources
spanconfiguration
spanplugin
spanplugins
spanbuild
spanproject
详见附录:pom。xml文件
创建dockerfile文件:
项目中创建srcmaindockerDockerfile文件,如下:
配置dockerflie(用于生成镜像):
FROMfrolvladalpineoraclejdk8:slim
VOLUMEtmp
ADDdemo1。0。jarapp。jar
RUNshctouchapp。jar
ENVJAVAOPTS
ENTRYPOINT〔sh,c,javaJAVAOPTSDjava。security。egdfile:dev。urandomjarapp。jar〕
解释下这个配置文件:
VOLUME指定了临时文件目录为tmp。其效果是在主机varlibdocker目录下创建了一个临时文件,并链接到容器的tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。tmp目录用来持久化到Docker数据文件夹,因为SpringBoot使用的内嵌Tomcat容器默认使用tmp作为工作目录
项目的jar文件作为app。jar添加到容器的
ENTRYPOINT执行项目app。jar。为了缩短Tomcat启动时间,添加一个系统属性指向devurandom作为EntropySource
见附录Dockerfile文件
编写SpringBoot应用:
packagecom。test。demo;
importorg。springframework。boot。SpringApplication;
importorg。springframework。boot。autoconfigure。SpringBootApplication;
importorg。springframework。web。bind。annotation。RequestMapping;
importorg。springframework。web。bind。annotation。RestController;
主应用入口
authorwaylau。com
date2016年3月19日
SpringBootApplication
RestController
publicclassApplication{
RequestMapping()
publicStringhome(){
returnHelloDockerWorld。
Welcometowaylau。comli;
}
publicstaticvoidmain(String〔〕args){
SpringApplication。run(Application。class,args);
}
}
代码类见附件Application。java1。3构建DockerImage1。3。1虚拟机(vitualBox)挂载本地项目路径
启动虚机:
然后登录虚机:
〔rootcentosvagrant〕sshp2222root127。0。0。1
修改seetting文件:
〔rootcentosvagrant〕cdoptapachemaven3。5。0conf
修改地址:mediasfrepository
1。3。2生成镜像(mvnpackagedocker:build)
重启虚机
输入命令:
〔rootcentosvagrant〕df
进入到:
cdmediasfwlwciticworkspacetaskschedulerlose目录(也就是项目的目录):
执行命令:
〔rootcentosvagrant〕mvnpackagedocker:build
需要注意:
在执行mvnpackagedocker:build,先输入命令dockerimages如果提示如下图,请先启动docker,启动命令:systemctlstartdocker,再执行mvnpackagedocker:build命令,不然构建镜像会失败。
执行后构建成为docker镜像
输入命令:
〔rootcentosvagrant〕dockerimages
可以看到demodemo就是生成的镜像1。3。3启动项目
运行DockerImage(启动项目):
输入命令
〔rootcentosvagrant〕dockerrunp8080:8080tdemodemo
这里指定端口为8080
运行成功:
浏览器访问:
输入http:localhost:8080
发现访问不了,原因没有做端口映射,如下:
在虚机(vitualBox)里配置:
这个时候再输入http:localhost:8080就可以访问了
1。4杀掉已启动的镜像
先查看进程,杀掉已启动的进程:
〔rootcentosvagrant〕dockerps
然后输入命令:
〔rootcentosvagrant〕dockerkillsKILLbfbf6bcd0eb6
删除镜像:
先查询记录:
〔rootcentosvagrant〕dockerpsa
可以看到有4个线程在启动,我们杀掉他们:
〔rootcentosvagrant〕dockerrmb427a2d85040f91a2e1d0f860297d2ecbff3bc5ca853a648
再查看:
线程都清掉了:
此刻执行:
〔rootcentosvagrant〕dockerimages
1。5Docker清除所有多余的docker镜像释放空间
执行:
〔rootiz2ze215l4uqqv8jiei1aaz〕dockersystempruneaf
再执行,多余的都清除了
〔rootiz2ze215l4uqqv8jiei1aaz〕dockerimages
1。6本地虚机doc打包成tar上传至134服务器
打包镜像:
〔rootcentosvagrant〕dockersaveohomehub。dashboardengine。tarhub。dashboardenginehub。dashboardengine:latest
本地打包成tar文件,通过ftp传输到134服务器上
输入下列命令恢复镜像,自动加载到docker容器:
〔rootcentosvagrant〕dockerloadihomehub。dashboardengine。tar
查看镜像:
〔rootcentosvagrant〕dockerimages
启动项目:
〔rootcentosvagrant〕dockerrundp9090:9090thub。dashboardenginehub。dashboardengine
注意:d表示后台启动
输入地址访问:
http:10。247。32。134:9090iotgetMsgCount
1。7docker推送镜像至私服
把一个镜像push到私有仓库中
查看一下镜像
〔rootcentosvagrant〕dockerimages
以demodemo这个镜像为例。
接下来修改一下该镜像的tag,输入下面命令:
〔rootcentosvagrant〕dockertagdemodemoregistry。user。pcloud。citic。comzxywclouddemodemo:tag
发现tag被修改了,接下来执行推送命令:
〔rootcentosvagrant〕dockerpushregistry。user。pcloud。citic。comzxywclouddemodemo:tag
Gethttps:registry。user。pcloud。citic。comv1ping:dialtcp10。247。20。205:443:iotimeout
这时会发现推送超时了,此时需要修改docker的配置文件,解决办法如下:
〔rootcentosvagrant〕touchetcdockerdaemon。json
〔rootcentosvagrant〕vietcdockerdaemon。json
加入本地registry的地址,如:
{insecureregistries:〔registry。user。pcloud。citic。com〕}
需要注意:
registry。user。pcloud。citic。com为私服地址,这里我直接加在liverestore:true的后面,然后加了一个逗号隔开。
添加主机host:
vietcresolv。conf
nameserver10。247。64。29
nameserver10。247。64。28
vietchosts
10。247。20。205registry。user。pcloud。citic。com
然后重启docker服务:
〔rootcentosvagrant〕systemctlrestartdocker。service
执行推送命令:
〔rootcentosvagrant〕dockerpushregistry。user。pcloud。citic。comzxywclouddemodemo:tag
3f5ead2a3e3b:Pushed
decb4e431a22:Pushed
aea4c1b2c226:Pushed
dcf909146faa:Pushed
23b9c7b43573:Pushed
tag:digest:sha256:a62b8f4cf6f446b81c5cb398499ef11e34bfe491a417e2959e2d05086768005esize:1375
推送成功,1。7。1下载私服镜像
下载私服镜像:
〔rootcentosvagrant〕dockerpullregistry。user。pcloud。citic。comzxywclouddemodemo:tag
下载成功,查看一下镜像
〔rootcentosvagrant〕dockerimages
启动:
〔rootcentosvagrant〕dockerrunp8081:8081tregistry。user。pcloud。citic。comzxywclouddemodemo:tag
1。8dockercompose插件安装
输入下面命令安装插件:
〔rootcentosvagrant〕curlLhttps:github。comdockercomposereleasesdownload1。12。0dockercomposeunamesunamemusrlocalbindockercompose
安装完成后,执行运行权限:
〔rootcentosvagrant〕sudochmodxusrlocalbindockercompose
查看版本:
〔rootcentosvagrant〕dockercomposeversion
可以看到为当前为1。12。0版本,则安装成功。
1。8。1创建test。yml文件
把test。yml文件放入homevagrantcomposetest目录下:
复制下面内容到test。yml文件里:
srvmgtapp:
image:demodemo
hostname:service
volumes:
tmp
ports:
9090:9090
environment:
jdbc。driverClassName:com。mysql。jdbc。Driver
jdbc。username:mysql
jdbc。password:mysql123
jdbc。url:jdbc:jdbc:mysql:10。247。33。42:3306iot
restart:always
1。8。2启动dockercompose
〔rootcentosvagrant〕dockercomposeup
需要注意:
启动dockercompose,需要在yml文件存在的当前目录下执行,例如:我yml文件在homevagrantcomposetest这个目录
ps查看:
〔rootcentosvagrant〕dockerps:
CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
f66814e2b624demodemoshcjavaJAVAOP15minutesagoUp15minutes0。0。0。0:90909090tcpcomposetestsrvmgtapp1
浏览器访问:
http:localhost:9090test
1。9jenkins持续集成1。9。1jenkins安装
本文直接使用war包安装
下载地址:https:jenkinsci。orgcontentthankyoudownloadingwindowsinstaller
war包有两种安装方法
方法一
下载jenkins。war,拷贝到D:JavaTooljenkins()下,然后运行javajarjenkins。war。(注意需要先安装JDK,然后设置JAVAHOME环境变量且将JAVAHOMEbin加入到PATH环境变量中)
运行如下:
访问http:localhost:8080,jenkins的主界面如下:
方法二
把Jenkins1。409。1版解压,把得到的war包直接扔到tomcat下,启动tomcat,Jenkins就安装完毕,访问http:localhost:8080jenkins
这里采用方法二方式,直接放tomcat里启动。
1。9。2构建maven项目
构建maven项目前,把相关的插件安装上,如:
增加需要用到的插件:DeploytocontainerPlugin、GITplugin、MavenIntegrationplugin、PublishOverSSH、SSHSlavesplugin、SubversionPlugin,请用以下示范方法添加安装需要的插件
调整相关系统设置项,请自行找出列出的设置项并填写相关内容
jdk配置:
配置好点击save保存。1。9。3配置远程服务器
配置远程服务器,上传镜像1。9。4新建maven项目集成至远程服务器
配置git路径,从git的master下直接检出:
执行本地脚本:
deploy。sh文件在项目的根目录下,deploy。sh文件见附件2,如下图:
配置远程上传脚本命令:
hub。admin。engine。yml文件与Dockerfile文件见附件2,目录都在项目的根目录:
保存后:
点击项目:
点击立即构建,持续集成就开始了
这里构建成功:
注意
构建的项目地址在:
〔rootcentosvagrant〕cd。jenkinsworkspace
或者输入:
〔rootcentosvagrant〕cdroot。jenkinsworkspace
可以看到构建的所有项目,如下:
登录服务dockerimags查看镜像命令可以看到刚刚上传的镜像:
dockerps命令可以看到项目也启动了:
浏览器访问:
http:10。247。32。134:8093iotchannelManagergetChannelPageList
1。9。5Jenkins部署docker报错问题
错误如下:
errorpullingimageconfiguration:Gethttp:registry。osscnbeijingzxd01a。pcloud。citic。comdockerregistryv2blobssha2564646df8683ac8fea45852a4b218a1c611b08fb1195bafa790fe9e2eec8b2867662data?Expires1499156631OSSAccessKeyIdvIvJI9Xwy0M87Qb8SignatureqaQOMawAE1a7jbQ2P9N2ahIyDVw3D:dialtcp:lookupregistry。osscnbeijingzxd01a。pcloud。citic。comon100。100。2。136:53:nosuchhost
找不到主机映射问题:nosuchhost
解决办法:
vietcresolv。conf
添加相关的ip地址
1。9。6Jenkins配置部署发送邮件通知
步骤1:
步骤2:JenkinsLocation下:
步骤3:ExtendedEmailNotification下:
步骤4:
步骤5:jenkins点击部署的项目,如下:
点击配置:
选择:下拉选择:
在ProjectRecipientList里加入邮箱即可,多个用逗号隔开,如1126。com,2126。com
步骤6:最后点开:
选择:
保存就可以了。1。9。7虚拟机(virtualBox)登录jenkins
先安装vagrant:
进入到varant的目录:
C:Usersuisftechvagrant
启动:
vagrantup
登录:
sshp2222root127。0。0。1
默认密码:vagrant
修改C:UsersuisftechvagrantVagrantfile文件:
config。ssh。usernamevagrant
config。ssh。passwordvagrant
vb。namecentos。base
登录成功后:
启动tomcat并且启动jenkins:
注意:将jenkins。war包放到tomcat的webapps下:
启动完需在virtualBox配置端口映射:
这里做了端口映射才能正常访问,登录jenkins:
http:127。0。0。1:8080jenkins
如此登录成功1。10Jenkins持续集成至阿里云服务1。10。1新建项目
配置好git路径:
执行脚本:
注意:
dashboardengine。sh脚本放在项目的根目录,dashboardengine。yml也是在同目录下,如下图:
脚本详细见附录31。10。2集成至阿里云注意问题
集成之前需先在阿里云服务里建立appname,如:
appnamehubdashboardengineapp
需要先将hubdashboardengineapp添加阿里云服务后端,再做集成。1。11Linux定时任务1。11。1Linux定时清理过时的docker镜像
1。键入crontabe编辑crontab服务文件,如下:
3023binshhomeuserschedulercleardockerimg。sh每晚的11:30
注意:没有安装crontab键入yuminstallcrontabs安装。
2。查看该用户下的crontab服务是否创建成功,用crontabl命令
3。启动crontab服务
一般启动服务用sbinservicecrondstart若是根用户的cron服务可以用sudoservicecrondstart,这里还是要注意下不同版本Linux系统启动的服务的命令也不同,像我的虚拟机里只需用sudoservicecronrestart即可,若是在根用下直接键入servicecronstart就能启动服务
这里本地启动是:binsystemctlstartcrond。service
这里本地停止是:binsystemctlstopcrond。service
4。查看服务是否已经运行用psaxgrepcron
5。删除任务调度工作
crontabr删除所有任务调度工作
6。删除docker镜像shell脚本:
!binsh
dockerrmi(dockerimagesgrepdev)