智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务

Posted 华云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务相关的知识,希望对你有一定的参考价值。

智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务

随着云计算业务的快速发展,国内外云计算企业的专利之争也愈发激烈。在云计算这样的技术领域,专利储备往往代表着企业最新的技术实力。华云数据本期“智汇华云”专栏将解析如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务,与大家共同分享云计算领域的最新技术与解决方案。


本期讲解人


智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务

王明星

华云数据资深开发工程师,擅长利用SpringCloud、SpringBoot等Java构建微服务,在华云数据主要负责Java对接虚拟化接口任务开发、Java微服务架构实现等工作。


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


环境准备

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


编写好ansibe脚本

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


ansibe文件目录:

智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务

                            

文件说明:



智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务


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

 

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


智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务


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


智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务


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


智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务

                  

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


智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务


Jenkins新建任务

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


智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务


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


智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务


智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务



智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务


4.添加执行maven命令。


智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务


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



详细脚本如下:


ansibe_install=/opt/ansibe ##之前写好的ansibe脚本

FOLDNAME=user

JARFILE=user.jar

SERVERNAME=user.service

cd ${ansibe_install}/roles/project/vars

rm -rf main.yml

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

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

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

cd ${ansibe_install}

rm -rf hosts

echo '' >> hosts

echo '[project]' >> hosts

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

cd ${ansibe_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 ";exp_continue}

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

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

    }

    expect eof

"

cd ${ansibe_install}

expect -c "

set timeout 3000

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

    expect {

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

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

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

    }

    expect eof

"

总结


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


相关阅读



点击阅读原文,了解华云数据更多信息



以上是关于智汇华云 | 如何利用Jenkins+ansibe+maven(java)方式自动化更新微服务的主要内容,如果未能解决你的问题,请参考以下文章

智汇华云 | 浅谈微服务架构下的服务发现机制

智汇华云 | 通过TProxy实现haproxy 透传用户IP

智汇华云 | Ceph的正确玩法之SSD作为HDD的缓存池

智汇华云 | ArSDN之分布式路由及浮动IP简介

智汇华云 | ArSDN之分布式路由及浮动IP简介

智汇华云 | ArSDN之分布式路由及浮动IP简介