美文网首页
简单的maven自动发布

简单的maven自动发布

作者: 带马界的神秘人 | 来源:发表于2017-04-17 20:14 被阅读0次

功能

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

实现

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

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

pom.xml中的配置

...
          <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                    <execution>
                        <phase>deploy</phase>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                        <configuration>
                            <executable>node</executable>
                            <commandlineArgs>${basedir}/ssh.js</commandlineArgs>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
...

这里功能就是在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自动发布

      本文链接:https://www.haomeiwen.com/subject/hkcxzttx.html