jenkins相关文档 https://www.jenkins.io/zh/doc/
1 相关说明
jenkins安装方式有多种,可以直接安装在服务器上,也可以使用docker拉取jenkins镜像,本文是直接安装到服务器上的方式
linux安装jenkins及相关配置可参考这里
一般来说,jenkins自动部署有下面的方式
对于我们大部分人来说,实际上很多工作都是在同一台服务器上完成,所以可以简化为下面的这种方式(唔...其实是我还没去摸索远程登陆这个问题=。=)
嗯看 起 来简单了好多~
所以本文将以这种方式进行配置
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私钥和账号获取代码
这种方式的安全性比较高,推荐这种方式,但是就比较麻烦
在服务器上生成公私钥对,当然也可以用其他软件生成
ssh-keygen -t rsa
然后会要输入保存地址,我这里保存在/root/id_rsa
,需要保存在其他地方自行更改
然后要输入密码,可以为空
生成完毕后,会产生两个文件id_rsa
和id_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
的名称根据自己的项目打包后的名字进行修改
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放在根目录
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包复制过来
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命令中写自己的部署命令
后记
讲一个小坑,一开始构建的时候,maven在编译到一半的时候总是莫名其妙地退出导致构建失败,找了很久原因,最后发现是系统内存不足...嗯1核2G的云服务器还是有点吃力,况且我的docker中还跑了几个容器,把占内存的容器停了后,终于构建成功了~
jenkins还是很强大的,而且有很多丰富的插件,摸索了一段时间才终于成功部署TAT...鉴于本人能力暂时介绍到这里,可能会有一些理解错误的地方,希望dalao们能够给我批评指正~