在搭建基于jenkins+maven+git+docker的全自动化部署时遇到的问题
来源:互联网 发布:java中字符串拼接函数 编辑:程序博客网 时间:2024/04/29 05:31
系统版本:
由于docker的安装要求linux系统内核必须在3.10以上,因此,系统版本我选择的是centos7.2,采用的是淘宝的云服务器,因此在更换系统以及在今后的docker等方面都简单了不少,不得不说阿里的东西还是很不错的,由于公司要求,我们将root用户禁掉了,但在我的部署过程中有不少小的问题,大多是由于权限的问题或者由于用户的问题。
docker:
由于采用的系统版本较高,因此,在安装docker的时候就不用那么费劲了,一条命令搞定:
yum install docker-engine
然后启动docker:
service docker start
在选择镜像时,千万不要选择直接下载dockerhub上的镜像,因为下载的速度会让你抓狂,这里不得不再次提起“淘宝”,阿里为docker提供了镜像云加速功能,网址是这个:https://dev.aliyun.com/search.html?spm=5176.100208.8.1.xzVy1v下载镜像的速度提高了好多倍。
我选择下载了几个镜像,安装了jdk8的镜像,安装了jenkins的镜像,安装了redis的镜像。
jdk:
由于项目采用的是spring boot,因此jdk版本采用的是jdk1.8。jdk的安装在我之前的博客中有详细步骤。
maven:
maven采用的目前最新的3.3.9版本,maven的安装就不说了,在官网下载然后找个文件夹解压,将maven的主目录添加的PATH中就可以了。这里推荐一个依旧是“淘宝”的福利,阿里巴巴的Maven镜像,速度杠杠的!
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
jenkins:
jenkins在这我要多说几句,jenkins安装方式非常简单,只需要在官网下载war包,然后找个tomcat容器,把war包扔进去,启动就可以了。因为我这里采用的docker,因此我在docker官网找了一个jenkins的镜像,直接启动的jenkins的镜像,但因此让我走了不少的弯路,为自己后面的部署安装埋下了不少坑,因此我建议各位如果选用jenkins,最好还是在宿主机上直接安装,这样可以省掉不少麻烦。
坑1.由于我采用的jenkins是一个docker镜像,因此,镜像内部并没有maven等一些程序,在配置maven的时候真是蓝瘦香菇,后来通过采用docker持久化存储的方法将这个坑填了起来。接下来我贴出我的启动命令:
sudo docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v /home/ziteng/mysoft/jenkins:/var/jenkins_home -v /home/ziteng/mysoft/apache-maven-3.3.9:/usr/local/maven -v /usr/java/jdk1.8.0_112:/usr/local/jdk jenkins
-v后面就是我将宿主机的安装路劲映射到镜像中,这样在jenkins中就可以配置了。
坑2.用过jenkins的人肯定知道,jenkins的插件下载真是一种折磨,无数次失败,让人崩溃。后来通过找资料发现国内的一个镜像:http://mirror.esuni.jp/jenkins/updates/update-center.json,感觉速度提高了不少,当然还是会失败,只能多试几次,而且在使用中我发现,jenkins的插件有相互依赖的问题,如果被依赖的插件没有下载成功,那么随后会有一连串的失败下载,因此我在发现一连串的插件下载失败后,不要慌,只需要从第一个错误开始逐个尝试下载,我的插件下载问题就这样实现的。
坑3.在jenkins镜像通过ssh连接到宿主机以后,会发现好多命令都执行不了了,这个问题纠结了我好久,后来查资料发现,原来没有了环境变量,因此,在执行ssh远程脚本时,需要首先采用:
export PATH="/bin:/usr/local/sbin:/usr/local/bin..."
将PATH声明,然后就可以继续执行命令了。
坑4.由于我的jenkins安装在镜像中,在执行自动化构建项目的时候,需要执行maven和docker的命令,但是这些命令在宿主机中,因此jenkins需要通过ssh连接到宿主机,然后进行执行。在jenkins中配置ssh时需要下载一个Publish Server的插件,在系统管理中配置ssh的主机信息,然后在jenkins中就可以选择执行远程ssh的shell脚本了。在这里有一个小技巧如果在脚本中执行sudo提权语句的时候,可以采用:
echo "你的密码"|sudo -S 你的命令
当然这种方法会导致密码在shell脚本中的暴露,请谨慎使用。
- 在搭建基于jenkins+maven+git+docker的全自动化部署时遇到的问题
- 【Jenkins教程三】基于Linux实现Jenkins+maven+git+tomcat的自动化构建部署项目
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
- jenkins+maven+docker+github全自动化部署SpringBoot
- Jenkins+Maven+Git集成和自动化部署的配置
- jenkins+maven+git+tomcat实现web项目的自动化部署
- jenkins+maven+git+tomcat实现web项目的自动化部署
- Jenkins学习总结(3)——Jenkins+Maven+Git搭建持续集成和自动化部署的
- jenkins+git+maven搭建自动化部署项目环境
- Jenkins Git Maven搭建自动化部署项目环境 邮件通知
- Linux下的Jenkins+Tomcat+Maven+Gitlab+Shell环境的搭建使用(jenkins自动化部署)
- Git+Docker+Jenkins+React App自动化部署
- 【Jenkins教程二】基于Linux实现Jenkins+maven+tomcat的自动化构建部署项目
- docker安装jenkins搭建自动化部署
- 博为峰Java技术题 ——JavaSE 泛型Ⅰ
- 润乾报表左主格
- Flume 小记(一) 入门、小结、注意事项
- 虚拟机中 CentOS 无法上网(connect: network is unreachable)
- Servlet 和Filter的生命周期
- 在搭建基于jenkins+maven+git+docker的全自动化部署时遇到的问题
- spring mvc通过拦截器加载会员信息 HandlerInterceptor妙用
- 通知(Notification)入门
- 关于共轭分布,beta分布,二项分布和Dirichlet分布、多项式分布的关系
- SPIN LOCK死锁问题
- 深入理解java虚拟机-读书笔记6-程序编译与代码优化
- TBSchedule初识
- Android最佳性能实践(二)——分析内存的使用情况
- eclipse 导出maven 项目关联jar 文件