在搭建基于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脚本中的暴露,请谨慎使用。

0 0