华云数据:如何利用Jenkins+ansible+maven(java)方式自动化更新微服务

砍柴网  •  扫码分享
我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

一般在开发过程中,都会出现在联调的过程中频繁修改代码,然后将最新代码部署到开发环境中,提供给其他微服务的小伙伴联调使用。传统的方式都需要手动编译代码并打包,然后将打包传到开发环境中,最后重启服务,这种方式非常耗时耗人力。为了节省开发联调的时间,可以使用Jenkins+ansible+maven(java)的方式自动打包上传到开发环境并自动重启服务。

环境准备

服务器中安装好JDK1.8、Jenkins、ansible、git客户端等基础软件,这里就不详细介绍每个软件如何使用。

编写好ansible脚本

在服务器事先准备好微服务的ansible脚本。

ansible文件目录:

华云数据:如何利用Jenkins+ansible+maven(java)方式自动化更新微服务

文件说明:

hosts文件主要记录要更新微服务的服务器地址详情,这里只需要ip地址和端口号,这里的地址详情可以随意写,下面会在Jenkins任务中动态修改,文件内容如下:


roles文件夹下表示是每个项目执行ansible所需要的配置和文件。roles/project文件夹表示执行的一个任务,project文件夹就是该任务所需要的ansible配置和文件,roles/project/files是ansible任务执行所需要的文件,roles/project/tasks是任务执行的配置,这里可以配置需要在目前服务器执行的shell脚本,roles/project/vars是任务执行的所需要的参数,注意var下的配置都会在下面的Jenkins任务中动态修改。

roles/project/task/main.yml文件内容如下:


roles/project/task/user.yml文件内容如下:

华云数据:如何利用Jenkins+ansible+maven(java)方式自动化更新微服务

roles/project/var/main.yml文件内容如下:


project.xml是执行project这个任务的关联主机和roles信息,文件内容如下:

华云数据:如何利用Jenkins+ansible+maven(java)方式自动化更新微服务

Jenkins新建任务

新建一个maven项目任务,这里maven项目中必须要包含pom.xml文件。


在新建的任务中添加构建过程中的所需要的参数,这里只要增加server_ip、server_port、server_pass这2个参数

华云数据:如何利用Jenkins+ansible+maven(java)方式自动化更新微服务

华云数据:如何利用Jenkins+ansible+maven(java)方式自动化更新微服务

添加版本控制地址,这里以git作为例子,可以执行响应的版本号,这里的版本号也可以通过参数来指定。

华云数据:如何利用Jenkins+ansible+maven(java)方式自动化更新微服务

添加执行maven命令

华云数据:如何利用Jenkins+ansible+maven(java)方式自动化更新微服务

最后一步新增maven命令执行完了之后执行的shell脚本。最好保存就可以构建了。

华云数据:如何利用Jenkins+ansible+maven(java)方式自动化更新微服务

详细脚本如下:

ansible_install=/opt/ansible ##之前写好的ansible脚本

FOLDNAME=user

JARFILE=user.jar

SERVERNAME=user.service

cd ${ansible_install}/roles/project/vars

rm -rf main.yml

echo FOLDNAME: ${FOLDNAME} >> main.yml

echo JARFILE: ${JARFILE} >> main.yml

echo SERVERNAME: ${SERVERNAME} >> main.yml

cd ${ansible_install}

rm -rf hosts

echo '' >> hosts

echo '[project]' >> hosts

echo ${server_ip} ansible_ssh_port=${server_port} >> hosts

cd ${ansible_install}

cd roles/project/files/

rm -rf ./*.jar

cp ${WORKSPACE}/user/target/${JARFILE} ./

expect -c "

set timeout 300

spawn ssh-copy-id -i /root/.ssh/id_rsa.pub -p ${server_port} root@${server_ip}

expect {

\"(yes/no)?\" {send \"yes\r\";exp_continue}

\"*password:\" {send \"$server_pass\r\"}

\"*again.\" {send \"$server_pass\r\"}

}

expect eof

"

cd ${ansible_install}

expect -c "

set timeout 3000

spawn ansible-playbook -i ${ansible_install}/hosts user.yml

expect {

\"(yes/no)?\" {send \"yes\r\";exp_continue}

\"*password:\" {send \"$server_pass\r\"}

\"*again.\" {send \"$server_pass\r\"}

}

expect eof

"

总结

完成自动化脚本之后,在开发联调时就不用再手动打包部署了,只要在Jenkins中构建下对应Job就可以完成服务自动打包更新,提高了开发人员联调效率。本文是针对mavne项目为例,其他语言(go、PHP、react等)只要事先准备好脚本,同样可以实现自动化更新服务。当然还有缺点,目前还不可以自定化更新数据库、安装服务、多节点服务安装和更新等场景,后续有兴趣的同学可以实现这些场景。

随意打赏

java面试题
提交建议
微信扫一扫,分享给好友吧。