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

2019-08-29    来源:IT运维网

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

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

环境准备

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

编写好ansible脚本

在服务器事先准备好微服务的ansible脚本。
ansible文件目录:


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

 

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

  • 文件内容如下:

  • 文件内容如下:

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


Jenkins新建任务

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

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

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

  1. 添加执行maven命令

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


详细脚本如下:

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等)只要事先准备好脚本,同样可以实现自动化更新服务。当然还有缺点,目前还不可以自定化更新数据库、安装服务、多节点服务安装和更新等场景,后续有兴趣的同学可以实现这些场景。

标签: 微服务 

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:征集令|“2019 IT运维十大样板工程” 评选启动

下一篇:ATEN宏正智能化运维管理公开课开讲