简单的maven自动发布

功能

通过maven的exec-maven-plugin实现自动发布并查看服务端日志

实现

exec-maven-plugin可以在maven的某个阶段运行一段程序,只要在deploy之后,服务器下载war到指定位置,重启服务,查看日志 就可以完成一套简单的的发布流程

ssh有很多语言版本的这里选用nodeJS版本的 因为改起来方便,代码也简单

pom.xml中的配置

...
          
                org.codehaus.mojo
                exec-maven-plugin
                1.2.1
                
                    
                        deploy
                        
                            exec
                        
                        
                            node
                            ${basedir}/ssh.js
                        
                    
                
            
...

这里功能就是在deploy之后,调用node执行项目目录下的ssh.js

ssh.js

var Client = require('ssh2').Client;

var conn = new Client();
conn.on('ready', function() {
    console.log('Client :: ready');
    conn.shell(function(err, stream) {
        if (err) throw err;
        stream.on('close', function() {
            console.log('Stream :: close');
            conn.end();
            process.exit(0);//退出程序
        }).on('data', function(data) {
            process.stdout.write(data);
        }).stderr.on('data', function(data) {
            console.log('STDERR: ' + data);
        });
        //跳转到webapps目录
        stream.write("cd /home/webapps\n");
        //删除所有文件
        stream.write("rm -rf *\n");
        //下载发布的war包
        stream.write("wget -O xxx.war http://ip:port/nexus/content/repositories/snapshots/com/xxx/xxx/1.0/xxx-1.0.war\n");
       //回到初始目录
        stream.write("cd\n");
        stream.write("cd tomcatN\n");
        //重启docker
        stream.write("docker-compose restart\n");
        //打印日志
        stream.write(`docker-compose logs --tail="100" -f\n`);
    });
}).connect({
    host: 'ip',
    port: 22,
    username: 'username',
    password:"password"//这里也可以使privatekey
});

ssh.js主要是实现了 下载war包和打印日志功能 这样基本和本地运行没有什么区别

后续

如果通过java实现ssh是可以实现交互的,这里没有延伸交互的功能 用处不是很大

你可能感兴趣的:(简单的maven自动发布)