jenkins + docker自动化部署maven项目

2022-03-05 12:53:58 浏览数 (1)

1 相关说明

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

graph TB A(代码上传到git) --> B(jenkins从git拉取代码) B --> C(jenkins在本地编译代码并构建docker镜像) C --> D(将docker镜像上传到docker仓库) D --> E(jenkins远程登陆生产环境的服务器) E --> F(从docker仓库拉取构建的镜像并运行)

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

graph TB A(代码上传到git) --> B(jenkins从git拉取代码) B --> C(jenkins在本地编译代码并构建docker镜像) C --> D(remove旧的镜像并运行新镜像)

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

2 准备

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

3 配置jdk、git、maven

3.1 JDK

直接点击在全局工具配置就可以进行配置了 JAVA_HOME是本机JDK地址

3.2 GIT

然后配置git,因为jenkins初始化的时候已经安装git插件,而且我的CentOS自带了git,所以默认就可以,根据自己实际情况配置即可

3.3 MAVEN

最后是配置maven,同样是根据自己实际maven路径进行配置

4 配置凭据

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

注意,是用左边的那个进行配置,而不是右边的

有两种方式,第一种直接用git的账号密码来获取代码

第二种用SSH私钥和账号获取代码 这种方式的安全性比较高,推荐这种方式,但是就比较麻烦 在服务器上生成公私钥对,当然也可以用其他软件生成

代码语言:javascript复制
ssh-keygen -t rsa

然后会要输入保存地址,我这里保存在/root/id_rsa,需要保存在其他地方自行更改 然后要输入密码,可以为空

生成完毕后,会产生两个文件id_rsaid_rsa.pub,带.pub的是公钥,把这个文件的内容复制到git上,我用的是gitee,github也一样 因为我只需要jenkins能够拉取代码就够了,所以在仓库上添加公钥,而不是git账户上添加全局的公钥,以保证安全

然后在jenkins中输入用户名和私钥,注意类型需要选择SSH的那个

5 构建项目

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

首先到gitee或者github上复制代码的地址下来,因为我们用的是SSH私钥来拉取代码,所以复制地址的时候记得选择SSH

然后新建一个自由风格的项目,进入配置界面 输入刚刚的地址,以及选择上一步添加的SSH凭据,jenkins将使用这个凭据去拉取代码

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

构建添加前面配置好了的Maven,并clean和install,-Dmaven.test.skip=true跳过测试

配置完毕后就可以构建看看效果了

6 加入一点点docker

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

6.1 编写Dockerfile

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

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

代码语言:javascript复制
FROM java:8RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime     && echo 'Asia/Shanghai' > /etc/timezoneCOPY xxxxxxxxxx-0.0.1-SNAPSHOT.jar app.jarENTRYPOINT ["java","-jar","-Xms256m","-Xmx256m","/app.jar"]EXPOSE 8080

一般我喜欢将Dockerfile放在根目录

6.2 jenkins配置shell命令

在Maven的后面添加一个执行shell的构建步骤

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

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

代码语言:javascript复制
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

不出意外的话,就可以成功部署啦~ 如果不使用docker的话,也可以在shell命令中写自己的部署命令

0 人点赞