jenkins + docker自动化部署maven项目

jenkins相关文档 https://www.jenkins.io/zh/doc/

1 相关说明

jenkins安装方式有多种,可以直接安装在服务器上,也可以使用docker拉取jenkins镜像,本文是直接安装到服务器上的方式
linux安装jenkins及相关配置可参考这里
一般来说,jenkins自动部署有下面的方式

代码上传到git
jenkins从git拉取代码
jenkins在本地编译代码并构建docker镜像
将docker镜像上传到docker仓库
jenkins远程登陆生产环境的服务器
从docker仓库拉取构建的镜像并运行

对于我们大部分人来说,实际上很多工作都是在同一台服务器上完成,所以可以简化为下面的这种方式(唔…其实是我还没去摸索远程登陆这个问题=。=)

代码上传到git
jenkins从git拉取代码
jenkins在本地编译代码并构建docker镜像
remove旧的镜像并运行新镜像

嗯看 起 来简单了好多~
所以本文将以这种方式进行配置

2 准备

1.一台服务器
2.已安装配置好docker
3.已安装好jenkis并完成初始化
4.服务器上已配置好jdk、maven、git环境

3 配置jdk、git、maven

3.1 JDK

直接点击在全局工具配置就可以进行配置了
JAVA_HOME是本机JDK地址
jenkins + docker自动化部署maven项目_第1张图片

3.2 GIT

然后配置git,因为jenkins初始化的时候已经安装git插件,而且我的CentOS自带了git,所以默认就可以,根据自己实际情况配置即可
jenkins + docker自动化部署maven项目_第2张图片

3.3 MAVEN

最后是配置maven,同样是根据自己实际maven路径进行配置
jenkins + docker自动化部署maven项目_第3张图片

4 配置凭据

一般我们的个人项目是私人仓库,所以需要配置凭据让jenkins能够访问到自己的gti仓库

注意,是用左边的那个进行配置,而不是右边的
jenkins + docker自动化部署maven项目_第4张图片
有两种方式,第一种直接用git的账号密码来获取代码
jenkins + docker自动化部署maven项目_第5张图片
第二种用SSH私钥和账号获取代码
这种方式的安全性比较高,推荐这种方式,但是就比较麻烦
在服务器上生成公私钥对,当然也可以用其他软件生成

ssh-keygen -t rsa

然后会要输入保存地址,我这里保存在/root/id_rsa,需要保存在其他地方自行更改
然后要输入密码,可以为空
jenkins + docker自动化部署maven项目_第6张图片
生成完毕后,会产生两个文件id_rsaid_rsa.pub,带.pub的是公钥,把这个文件的内容复制到git上,我用的是gitee,github也一样
因为我只需要jenkins能够拉取代码就够了,所以在仓库上添加公钥,而不是git账户上添加全局的公钥,以保证安全

jenkins + docker自动化部署maven项目_第7张图片
然后在jenkins中输入用户名和私钥,注意类型需要选择SSH的那个
jenkins + docker自动化部署maven项目_第8张图片

5 构建项目

完成上面步骤后,就可以开始构建项目了

首先到gitee或者github上复制代码的地址下来,因为我们用的是SSH私钥来拉取代码,所以复制地址的时候记得选择SSH
jenkins + docker自动化部署maven项目_第9张图片
然后新建一个自由风格的项目,进入配置界面
输入刚刚的地址,以及选择上一步添加的SSH凭据,jenkins将使用这个凭据去拉取代码
jenkins + docker自动化部署maven项目_第10张图片

如果凭据用的是git的用户名和密码,那么代码URL则选择HTTPS的

构建添加前面配置好了的Maven,并clean和install,-Dmaven.test.skip=true跳过测试
jenkins + docker自动化部署maven项目_第11张图片
配置完毕后就可以构建看看效果了

6 加入一点点docker

上面介绍的是最简单的构建maven项目的方式,算是一个hello world了。然而很多时候不仅仅是让jenkins拉一下代码并编译,我们希望能够在jenkins中点一下构建,就能够将git上最新的代码重新部署完毕,所以在maven构建完毕后,执行shell命令来部署我们的代码。

6.1 编写Dockerfile

如果没有使用docker,而直接部署到自己机子上,那么可以跳过这步

java项目的dockerfile可参考下列配置,xxxxxxxxxx-0.0.1-SNAPSHOT.jar的名称根据自己的项目打包后的名字进行修改

FROM java:8
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo 'Asia/Shanghai' > /etc/timezone
COPY xxxxxxxxxx-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","-Xms256m","-Xmx256m","/app.jar"]
EXPOSE 8080

一般我喜欢将Dockerfile放在根目录
jenkins + docker自动化部署maven项目_第12张图片

6.2 jenkins配置shell命令

在Maven的后面添加一个执行shell的构建步骤
jenkins + docker自动化部署maven项目_第13张图片
然后在里面写相关shell命令,在maven打包完成后,就会执行这些shell命令
我的思路是:
1.复制maven打包好的jar包到jenkin的工作目录
2.cd到jenkin工作目录,移除正在运行的docker容器和镜像
3.构建新的docker镜像并运行
4.删除jar包
可参考我下面的命令,需要根据自己maven和jenkins实际目录进行修改

因为jenkins拉取代码的时候会将代码保存在他的工作目录中,而dockerfile也会在此目录,且dockerfile的COPY命令是从当前目录来找jar包,所以要把jar包复制过来

cp /usr/local/apache-maven-3.6.3/repository/com/xxxxxxxxxx/0.0.1-SNAPSHOT/xxxxxxxxxx-0.0.1-SNAPSHOT.jar /var/lib/jenkins/workspace/xxxxxxxxxx/xxxxxxxxxx-0.0.1-SNAPSHOT.jar &&
cd /var/lib/jenkins/workspace/xxxxxxxxxx/ &&
docker rm -f myapp &&
docker rmi myapp &&
docker build -t myapp . &&
docker run -itd --name myapp -m 600m -p 8000:8080 myapp &&
rm /var/lib/jenkins/workspace/xxxxxxxxxx/xxxxxxxxxx-0.0.1-SNAPSHOT.jar

jenkins + docker自动化部署maven项目_第14张图片
不出意外的话,就可以成功部署啦~
如果不使用docker的话,也可以在shell命令中写自己的部署命令

后记

讲一个小坑,一开始构建的时候,maven在编译到一半的时候总是莫名其妙地退出导致构建失败,找了很久原因,最后发现是系统内存不足…嗯1核2G的云服务器还是有点吃力,况且我的docker中还跑了几个容器,把占内存的容器停了后,终于构建成功了~
jenkins还是很强大的,而且有很多丰富的插件,摸索了一段时间才终于成功部署TAT…鉴于本人能力暂时介绍到这里,可能会有一些理解错误的地方,希望dalao们能够给我批评指正~

你可能感兴趣的:(docker,Java,linux,docker,maven,jenkins)