功能
通过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是可以实现交互的,这里没有延伸交互的功能 用处不是很大