范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Springbootdockerjenkins持续集成实战操作

  1 操作步骤1.1 docker安装
  在虚拟机(vitualBox)下执行yum命令:
  [root@centos-vagrant ~]# yum install docker
  安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:
  [root@centos-vagrant ~]# service docker start
  查看镜像:
  [root@centos-vagrant ~]# docker images
  安装问题:
  在执行yum install docker 命令是安装不成功的问题:
  清除一下缓存:
  [root@centos-vagrant ~]# yum clean all
  [root@centos-vagrant ~]# yum makecache
  再执行安装命令:
  [root@centos-vagrant ~]# yum install docker
  1.2 配置springboot
  pom.xml配置:
  <? xml version=  "1.0"   encoding=  "UTF-8"  ?>
  <  project   xmlns=  "http://maven.apache.org/POM/4.0.0"
  xmlns:  xsi  =  "http://www.w3.org/2001/XMLSchema-instance"
  xsi  :schemaLocation=  "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"  >
  <  modelVersion  > 4.0.0 modelVersion  >
  <  groupId  > org.zz.springboot groupId  >
  <  artifactId  > springbootdemo artifactId  >
  <  version  > latest version  >
  <  parent  >
  <  groupId  > org.springframework.boot groupId  >
  <  artifactId  > spring-boot-starter-parent artifactId  >
  <  version  > 1.5.2.RELEASE version  >
   parent  >
  <  dependencies  >
  <  dependency  >
  <  groupId  > org.springframework.boot groupId  >
  <  artifactId  > spring-boot-starter-web artifactId  >
   dependency  >
  <  dependency  >
  <  groupId  > org.springframework.boot groupId  >
  <  artifactId  > spring-boot-starter-test artifactId  >
  <  scope  > test scope  >
   dependency  >
   dependencies  >
  <  properties  >
  <  project.build.sourceEncoding  > UTF-8 project.build.sourceEncoding  >
  <  docker.image.prefix  > demo docker.image.prefix  >
  <  spring.boot.version  > 1.3.3.RELEASE spring.boot.version  >
   properties  >
  <  build  >
  <  plugins  >
  <  plugin  >
  <  groupId  > org.springframework.boot groupId  >
  <  artifactId  > spring-boot-maven-plugin artifactId  >
   plugin  >
  <  plugin  >
  <  groupId  > com.spotify groupId  >
  <  artifactId  > docker-maven-plugin artifactId  >
  <  version  > 0.4.3 version  >
  <  configuration  >
  <  imageName  > ${docker.image.prefix}/${project.artifactId} imageName  >
  <  dockerDirectory  > src/main/docker dockerDirectory  >
  <  resources  >
  <  resource  >
  <  targetPath  > / targetPath  >
  <  directory  > ${project.build.directory} directory  >
  <  include  > ${project.build.finalName}.jar include  >
   resource  >
   resources  >
   configuration  >
   plugin  >
   plugins  >
   build  >
   project  >
  详见附录:pom.xml文件
  创建dockerfile文件:
  项目中创建"src/main/docker/Dockerfile"文件,如下:
  配置dockerflie(用于生成镜像):
  FROM frolvlad/alpine-oraclejdk8:slim
  VOLUME /tmp
  ADD demo-1.0.jar app.jar
  RUN sh -c "touch /app.jar"
  ENV JAVA_OPTS=""
  ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
  解释下这个配置文件:
  · VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
  · 项目的 jar 文件作为 "app.jar" 添加到容器的
  · ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间 ,添加一个系统属性指向 "/dev/urandom" 作为 Entropy Source
  见附录Dockerfile 文件
  编写 Spring Boot 应用:
  package  com.test.demo;
  import  org.springframework.boot.SpringApplication;
  import  org.springframework.boot.autoconfigure.SpringBootApplication ;
  import  org.springframework.web.bind.annotation.RequestMapping ;
  import  org.springframework.web.bind.annotation.RestController ;
  /**
  * 主应用入口
  *  @author   waylau.com
  *  @date  2016年3月19日
  */
  @SpringBootApplication
  @RestController
  public class  Application {
  @RequestMapping ( "/" )
  public  String home() {
  return  "Hello Docker World."
  +  "
  Welcome to waylau.com" ;
  }
  public static void  main(String[] args) {
  SpringApplication. run (Application. class , args);
  }
  }
  代码类见附件Application.java 1.3 构建 Docker Image1.3.1 虚拟机(vitualBox)挂载本地项目路径
  启动虚机:
  然后登录虚机:
  [root@centos-vagrant ~]# ssh -p 2222 root@127.0.0.1
  修改seetting文件:
  [root@centos-vagrant ~]# cd /opt/apache-maven-3.5.0/conf/
  修改地址: /media/sf_repository
  1.3.2 生成镜像(mvn package docker:build)
  重启虚机
  输入命令:
  [root@centos-vagrant ~]# df
  进入到:
  cd /media/sf_wlw_citic/workspace_task_scheduler_lose目录(也就是项目的目录):
  执行命令:
  [root@centos-vagrant ~]# mvn package docker:build
  需要注意:
  在执行mvn package docker:build ,先输入命令docker images 如果提示如下图,请先启动docker,启动命令:systemctl start docker,再执行mvn package docker:build 命令,不然构建镜像会失败。
  执行后构建成为 docker镜像
  输入命令:
  [root@centos-vagrant ~]# docker images
  可以看到demo/demo就是生成的镜像1.3.3 启动项目
  运行 Docker Image(启动项目):
  输入命令
  [root@centos-vagrant ~]# docker run -p 8080:8080 -t demo/demo
  这里指定端口为8080
  运行成功:
  浏览器访问:
  输入http://localhost:8080/
  发现访问不了,原因没有做端口映射,如下:
  在虚机(vitualBox)里配置:
  这个时候再输入http://localhost:8080/ 就可以访问了
  1.4 杀掉已启动的镜像
  先查看进程,杀掉已启动的进程:
  [root@centos-vagrant ~]# docker ps
  然后输入命令:
  [root@centos-vagrant ~]# docker kill -s KILL bfbf6bcd0eb6
  删除镜像:
  先查询记录:
  [root@centos-vagrant ~]# docker ps –a
  可以看到有4个线程在启动,我们杀掉他们:
  [root@centos-vagrant ~]# docker rm b427a2d85040 f91a2e1d0f86 0297d2ecbff3 bc5ca853a648
  再查看:
  线程都清掉了:
  此刻执行:
  [root@centos-vagrant ~]# docker images
  1.5 Docker清除所有多余的docker镜像释放空间
  执行:
  [root@iz2ze215l4uqqv8jiei1aaz ~]# docker system prune -a –f
  再执行,多余的都清除了
  [root@iz2ze215l4uqqv8jiei1aaz ~]# docker images
  1.6 本地虚机doc打包成tar上传至134服务器
  打包镜像:
  [root@centos-vagrant ~]# docker save -o /home/ hub.dashboardengine.tar hub.dashboardengine/hub.dashboardengine:latest
  本地 打包成tar文件,通过ftp传输到134 服务器上
  输入下列命令恢复镜像,自动加载到docker容器:
  [root@centos-vagrant ~]# docker load -i /home/ hub.dashboardengine.tar
  查看镜像:
  [root@centos-vagrant ~]# docker images
  启动项目:
  [root@centos-vagrant ~]# docker run -d -p 9090:9090 -t hub.dashboardengine/hub.dashboardengine
  注意:-d表示后台启动
  输入地址访问:
  http://10.247.32.134:9090/iot/getMsgCount
  1.7 docker推送镜像至私服
  把一个镜像push到私有仓库中
  查看一下镜像
  [root@centos-vagrant ~]# docker images
  以demo/demo这个镜像为例。
  接下来修改一下该镜像的tag,输入下面命令:
  [root@centos-vagrant ~]# docker tag demo/demo registry.user.pcloud.citic.com/zxyw/cloud/demo/demo:tag
  发现tag被修改了,接下来执行推送命令:
  [root@centos-vagrant ~]# docker push registry.user.pcloud.citic.com/zxyw/cloud/demo/demo:tag
  Get https://registry.user.pcloud.citic.com/v1/_ping : dial tcp 10.247.20.205:443: i/o timeout
  这时会发现推送超时了,此时需要修改docker的配置文件,解决办法如下:
  [root@centos-vagrant ~]# touch /etc/docker/daemon.json
  [root@centos-vagrant ~]# vi /etc/docker/daemon.json
  加入本地registry的地址, 如:
  { "insecure-registries":["registry.user.pcloud.citic.com"] }
  需要注意:
  registry.user.pcloud.citic.com为私服地址,这里我直接加在"live-restore":true的后面,然后加了一个逗号隔开。
  添加主机host:
  vi /etc/resolv.conf
  nameserver 10.247.64.29
  nameserver 10.247.64.28
  vi /etc/hosts
  10.247.20.205 registry.user.pcloud.citic.com
  然后重启docker服务:
  [root@centos-vagrant ~]# systemctl restart docker.service
  执行推送命令:
  [root@centos-vagrant ~]# docker push registry.user.pcloud.citic.com/zxyw/cloud/demo/demo:tag
  3f5ead2a3e3b: Pushed
  decb4e431a22: Pushed
  aea4c1b2c226: Pushed
  dcf909146faa: Pushed
  23b9c7b43573: Pushed
  tag: digest: sha256:a62b8f4cf6f446b81c5cb398499ef11e34bfe491a417e2959e2d05086768005e size: 1375
  推送成功,1.7.1 下载私服镜像
  下载私服镜像:
  [root@centos-vagrant ~]# docker pull registry.user.pcloud.citic.com/zxyw/cloud/demo/demo:tag
  下载成功,查看一下镜像
  [root@centos-vagrant ~]# docker images
  启动:
  [root@centos-vagrant ~]# docker run -p 8081:8081 -t registry.user.pcloud.citic.com/zxyw/cloud/demo/demo:tag
  1.8 docker-compose插件安装
  输入下面命令安装插件:
  [root@centos-vagrant ~]# curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  安装完成后,执行运行权限:
  [root@centos-vagrant ~]# sudo chmod +x /usr/local/bin/docker-compose
  查看版本:
  [root@centos-vagrant ~]# docker-compose --version
  可以看到为当前为1.12.0版本,则安装成功。
  1.8.1 创建test.yml文件
  把test.yml文件放入/home/vagrant/composetest目录下:
  复制下面内容到test.yml文件里:
  srvmgt-app:
  image: demo/demo
  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:3306/iot
  restart: always
  1.8.2 启动docker-compose
  [root@centos-vagrant ~]# docker-compose up
  需要注意:
  启动docker-compose,需要在yml文件存在的当前目录下执行,例如:我yml文件在/home/vagrant/composetest这个目录
  ps查看:
  [root@centos-vagrant ~]# docker ps:
  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  f66814e2b624 demo/demo "sh -c "java $JAVA_OP" 15 minutes ago Up 15 minutes 0.0.0.0:9090->9090/tcp composetest_srvmgt-app_1
  浏览器访问:
  http://localhost:9090/test/
  1.9 jenkins持续集成1.9.1 jenkins安装
  本文直接使用war包安装
  下载地址:https://jenkins-ci.org/content/thank-you-downloading-windows-installer
  war包有两种安装方法
  方法一
  下载jenkins.war, 拷贝到D:JavaTooljenkins()下,然后运行java -jar jenkins.war. (注意需要先安装JDK,然后设置JAVA_HOME环境变量且将%JAVA_HOME%bin加入到PATH环境变量中)
  运行如下:
  访问http://localhost:8080 , jenkins的主界面如下:
  方法二
  把Jenkins 1.409.1版解压,把得到的war包直接扔到tomcat下,启动tomcat,Jenkins就安装完毕,访问http://localhost:8080/jenkins
  这里采用方法二方式,直接放tomcat里启动。
  1.9.2 构建maven项目
  构建maven项目前,把相关的插件安装上,如:
  增加需要用到的插件:Deploy to container Plugin、GIT plugin、Maven Integration plugin、Publish Over SSH、SSH Slaves plugin、Subversion Plug-in,请用以下示范方法添加安装需要的插件
  调整相关系统设置项,请自行找出列出的设置项并填写相关内容
  jdk配置:
  配置好点击save保存。1.9.3 配置远程服务器
  配置远程服务器,上传镜像1.9.4 新建maven项目集成至远程服务器
  配置git路径,从git的master下直接检出:
  执行本地脚本:
  deploy.sh文件在项目的根目录下,deploy.sh文件见附件2 ,如下图:
  配置远程上传脚本命令:
  hub.admin.engine.yml文件与Dockerfile文件见附件2 ,目录都在项目的根目录:
  保存后:
  点击项目:
  点击立即构建,持续集成就开始了
  这里构建成功:
  注意
  构建的项目地址在:
  [root@centos-vagrant ~]# cd ~/.jenkins/workspace/
  或者输入:
  [root@centos-vagrant ~]# cd /root/.jenkins/workspace
  可以看到构建的所有项目,如下:
  登录服务docker imags查看镜像命令可以看到刚刚上传的镜像:
  docker ps命令可以看到项目也启动了:
  浏览器访问:
  http://10.247.32.134:8093/iot/channelManager/getChannelPageList
  1.9.5 Jenkins部署docker报错问题
  错误如下:
  error pulling image configuration: Get http://registry.oss-cn-beijing-zx-d01-a.pcloud.citic.com/docker/registry/v2/blobs/sha256/46/46df8683ac8fea45852a4b218a1c611b08fb1195bafa790fe9e2eec8b2867662/data?Expires=1499156631&OSSAccessKeyId=vIvJI9Xwy0M87Qb8&Signature=qaQOMawAE1a7jbQ2P9N2ahIyDVw%3D : dial tcp: lookup registry.oss-cn-beijing-zx-d01-a.pcloud.citic.com on 100.100.2.136:53: no such host
  找不到主机映射问题:no such host
  解决办法:
  vi /etc/resolv.conf
  添加相关的ip地址
  1.9.6 Jenkins配置部署发送邮件通知
  步骤1:
  步骤2:Jenkins Location下:
  步骤3:Extended E-mail Notification下:
  步骤4:
  步骤5:jenkins点击部署的项目,如下:
  点击配置:
  选择:下拉选择:
  在Project Recipient List里加入邮箱即可,多个用逗号隔开,如1@126.com,2@126.com
  步骤6:最后点开:
  选择:
  保存就可以了。1.9.7 虚拟机(virtualBox)登录jenkins
  先安装vagrant:
  进入到varant 的目录:
  C:Usersuisftechvagrant
  启动:
  vagrant up
  登录:
  ssh -p 2222 root@127.0.0.1
  默认密码:vagrant
  修改C:UsersuisftechvagrantVagrantfile 文件:
  config.ssh.username = "vagrant"
  config.ssh.password = "vagrant"
  vb.name= "centos.base"
  登录成功后:
  启动tomcat并且启动jenkins:
  注意:将jenkins.war包放到tomcat的webapps下:
  启动完需在virtualBox配置端口映射:
  这里做了端口映射才能正常访问,登录jenkins:
  http://127.0.0.1:8080/jenkins
  如此登录成功1.10 Jenkins持续集成至阿里云服务1.10.1 新建项目
  配置好git路径:
  执行脚本:
  注意:
  dashboardengine.sh脚本放在项目的根目录,dashboardengine.yml也是在同目录下,如下图:
  脚本详细见附录3 1.10.2 集成至阿里云注意问题
  集成之前需先在阿里云服务里建立appname,如:
  appname="hub-dashboardengine-app"
  需要先将hub-dashboardengine-app添加阿里云服务后端,再做集成。 1.11 Linux定时任务1.11.1 Linux定时清理过时的docker镜像
  1. 键入 crontab -e 编辑crontab服务文件,如下:
  30 23 * * * /bin/sh /home/user/scheduler/cleardockerimg.sh  //每晚的11:30
  注意:没有安装crontab 键入yum install crontabs安装。
  2. 查看该用户下的crontab服务是否创建成功, 用 crontab -l 命令
  3. 启动crontab服务
  一般启动服务用 /sbin/service crond start 若是根用户的cron服务可以用 sudo service crond start, 这里还是要注意 下 不同版本Linux系统启动的服务的命令也不同 ,像我的虚拟机里只需用 sudo service cron restart 即可,若是在根用下直接键入service cron start就能启动服务
  这里本地启动是: /bin/systemctl start crond.service
  这里本地停止是: /bin/systemctl stop crond.service
  4. 查看服务是否已经运行用 ps -ax | grep cron
  5. 删除任务调度工作
  crontab -r //删除所有任务调度工作
  6. 删除docker镜像shell脚本:
  #!/bin/sh
  docker rmi $(docker images | grep dev-)

天堑变通途,黄河一号公路临汾段年内主线贯通近日,山西晚报记者拍摄的黄河一号公路临汾段大宁县马头关黄河大桥附近的画面,昔日的天堑变通途,犹如一条巨龙盘绕在河边山间。2018年起,山西黄河长城太行3条旅游一号公路开始建设并陆续电动版XC90?沃尔沃推出旗舰版电动SUV!早在1年之前,就有海外媒体曝光了沃尔沃最新纯电动SUV的旗舰车型。然而,就在大家非常期待的时候,这台车却突然销声匿迹了。最近,这款车终于露出了庐山真面目,似乎用纯电动版XC90来形煮小米粥,直接下锅煮就错了,学会2个小技巧,营养好喝还出米油煮小米粥,直接下锅煮就错了,学会2个小技巧,营养好喝还出米油!说起小米粥,这可是大家再熟悉不过的了吧,小米素来有营养黄金之称,尤其是女人坐月子,小孩子开始吃辅食生病难受后都习惯制作陈梦面临退役!基本无缘巴黎奥运,替身浮出水面陈梦面临退役!基本无缘巴黎奥运,替身浮出水面球迷都知道,刚刚结束的全禁赛,陈梦多次爆冷输球,更是无缘最后的决赛圈,要知道陈梦目前是中国女乒的一姐,但是在东京奥运会结束之后,陈梦就再男人到了中年,长得再帅也别穿这4种衣服,会显老有油腻感都说男人40一枝花,可是不知道大家有没有发现,在现实生活当中,大多数男人踏入了40岁的年龄阶段,都很容易显得油腻感十足,这种油腻感或许体现在贴头皮的发型上或许在于满脸的胡渣上过于在回想与ULTRABOOST的这些年一年一度的双11购物狂欢节已然结束,但在今年的狂欢之中,跑圈的欢呼声似乎更多地投向了各大国产品牌,而我们曾经的老朋友adidas却只是静静的等待着。曾经双11的adidas有多疯狂纸张摞起的秋,见证了梦的跋涉早晨六点,天雾蒙蒙的。马路上车流稀少,阵阵冷瑟的风顺着羊毛外套灌进了我的脖颈里,桂花冒出了一口温吞的热气,微微倾着身子靠在树下面颤微微地抖。我站在墨绿的漆皮公交车牌旁等,看见路过行人民日报金句摘录(11。14)1。青春孕育无限希望,青年创造美好明天。2。身处伟大时代,当不负韶华青春无垠,唯奋斗以成。3。怀抱梦想又脚踏实地,敢想敢为又善作善成,在担当中历练,在尽责中成长。4。心合意诚,未来做自己就很好,我们又不是人民币做不到人人喜欢我们生命赐予我们每个人都是不一样的,我们所能做的,就是要接受。接受甜蜜,也接受公正,也接受不平接受自己的缺点,也接受自己的优点,有时候没有必要为了别人的小心眼,过激的语言,就觉得自己是为什么故宫里没有树?难道皇帝不喜欢树?可能导游都不知道去过故宫的朋友,有没有想过为什么故宫三殿四周没有树?紫禁城作为一座宏伟且保存完好的皇宫建筑群,是来北京旅游的必去之地。游览线路一般沿紫禁城中轴线游览,如吴门太和门太和殿中和殿保和殿从大脑中汲取灵感,能效提高了1000倍,新芯片拓展AI的可能性编译白菜叶人工智能算法无法以目前的速度保持增长。像深度神经网络这样的算法它受到大脑的松散启发,多层人工神经元通过称为权重的数值相互连接每年都在变大。但如今,硬件改进已无法跟上运行这
头条,每日开心歇后语(129)亲爱的友友,周四好!又到了提现的日子,不管你今天能不能提现,还是要坚持在头条写作。坚持是一件不是太难的事情,只要我们记得每天来头条,每天做我们喜欢的事情,就可以了,一起来吧。1站干总会有些句子,触动你的心(第一集)夜幕下的城市,迎来了他的主场,山顶的救世主在俯瞰着红尘,俯瞰着众生。在她的眼里可能所有的悲欢离合都没有什么大不了,但是我们毕竟深处红尘,每一次的夜晚都将为我们带来巨大的情感上的波动念你在心,牵挂到老一个人,一条街。风吹,叶落,落叶静静地铺满了这条街,街还是从前的街,叶也似从前的叶,可是蓦然回首却发现,那一个转身,竟是岁岁年年。物是人非,山河远阔,你在我不在的远方是否一切安然无香香第二章六十八这些路的面貌既庄重又和顺,椰树圆滚滚的树干上纹理有条不紊,如是树木们悄悄过着幸福的时光。椰子在上面八九十个宛如靠在一起的青色脑袋,窃窃私语,羽状叶片摇着些许的风声。这些,时过境迁我宏琪说交通当遇到小碰擦宏琪说交通行车上路发生小碰擦一定要理性解决切莫情绪上头,因小失大视频加载中一辆电动自行车在掉头时与一辆停在路边的白色车辆发生碰擦。交通小知识车辆发生碰擦后,驾驶员表现出有攻击性或愤我的这十年(1)一个中年的男人的这十年,从青葱岁月的大学毕业开始,直至人到中年,根据个人生活经历改编,共计20篇,读着朋友们可以理解成一个人的日记,记叙了这些年的路如何走。本篇绝无爽文经历,全部现身处低谷期的我,希望能带给你一丝温暖大家好,周末愉快哟!这篇文章是昨天坐车回家的路上,随意想起的,就写出来,分享给你。1人生低谷是常态人生这条路,除了有高峰也有低谷。我们要有一颗平常心。只有经历过低谷期的人,才能真的拜登360度战略剑指何方丨智库视点美国总统拜登(新华社亚伦图)美国时间2022年10月12日,白宫正式发布了拜登政府版的美国国家安全战略报告。拜登将其国家安全战略描述为立足于当今世界的360度战略,规划美国寻求的未交广会客厅坚守战一线担当展作为大秦线迁安北站的施工现场上,有一个小伙儿,他紧锁着眉头,站在两股道之间,一边指挥着钩机出轨拨轨入轨填砟,一边观察着钢轨更换后的设备状态,手里举着对讲机,这边来几个人把螺栓紧上来两人乘坐飞机,若有需要该怎么称呼空姐?过来人说出背后猫腻随着人们物质生活水平的不断提高,越来越多的人都会选择出门旅行。希望通过这样的方式来缓解自己的心情,也可以增长自己的见识和阅历。毕竟每个城市都有着独特的风俗习惯和文化气息,我们不断的一群吃肉的孙吧人,想破掉素食吧老哥的戒律由于工作性质以及日常生活习惯的原因,我每天的大部分时间都是坐在电脑前码字打游戏。和这种生活习惯相对应的,是体重的上升。所以,我也有考虑过自律节食这个操作但很可惜,在连续快两个月不吃