概述
Jenkins的入门使用,请参考CentOS 8安装并配置Jenkins,以及Jenkins + GitLab实现自动化构建。
基于前述实现功能,即向GitLab提交代码,自动触发Jenkins构建,此文希望进一步实现把构建产物,如jar包,或者war包,部署到远程服务器。
友情提示:赶时间的同学,请直接阅读构建后操作。
build
本地开发时,代码提交并不会很频繁,而且存在前后端联调的过程,此时也没有Jenkins这个角色的介入。使用wagon插件来完成构建和部署,参考文章wagon-maven-plugin插件实现自动化构建部署到服务器。
对于单个module的应用(如file-center),在IDEA的terminal里面只需要输入一行命令:
mvn clean install -Dmaven.test.skip=true wagon:upload-single wagon:sshexec
对于多个module的应用(如edfi),在IDEA的terminal里面只需要输入3行命令:
mvn clean install -Dmaven.test.skip=true
cd edfi-webapp
mvn -Dmaven.test.skip=true wagon:upload-single wagon:sshexec
理论上,edfi-webapp
依赖于edfi-dal
和edfi-service
,在edfi-webapp
目录下面执行命令:mvn clean install -Dmaven.test.skip=true
,会把依赖的两个module下面的target文件夹删除,然后重新构建,事实上并不是如此,木办法,只好敲三条命令。
故而,在build里面配置如下命令,期待达到构建并部署的效果:
但是控制台输出报错:
[INFO] --- wagon-maven-plugin:2.0.2:upload-single (default-cli) @ user-center ---
The authenticity of host '114.215.175.236' can't be established.
RSA key fingerprint is a3:71:8c:48:75:3d:d7:c7:0a:1b:6e:1c:df:87:40:1e.
Are you sure you want to continue connecting? (yes/no): The authenticity of host '114.215.175.236' can't be established.
RSA key fingerprint is a3:71:8c:48:75:3d:d7:c7:0a:1b:6e:1c:df:87:40:1e.
Are you sure you want to continue connecting? (yes/no): The authenticity of host '114.215.175.236' can't be established.
……
然后在一直输出最后两行。
于是想着在Jenkins所在服务器执行scp命令,从测试部署服务器copy一份文件过来:scp root@114.215.175.236:/root/a.txt .
。如我所愿,出现下图输入yes/no
的交互式界面,意味着下一次执行scp命令不再需要输入密码。
然而现实,啪啪打脸。再次构建,控制台输出还是同样的问题。
此时,如果想着在Jenkins构建时,交互式输入yes。就走偏了。
事后想一想,Jenkins build就不可能支持部署,它仅仅只是完成构建功能,输出jar
或war
,即所谓的artifact产物。
构建后操作
知道build不能实现部署,那就是在构建后才能实现部署,wagon的scp命令实际上是基于SSH协议。
首先需安装publish over ssh插件,才能确保出现 Send build artifacts over SSH:
既然是通过SSH协议,毫无疑问需要先添加SSH服务器配置。System Configuration—configure system,拉到底部,SSH Servers新增,注意需要勾选 Use password authentication, or use a different key
任何IP配置,如此处的SSH Server,JDBC数据源添加,都应该有测试环节,此处亦不例外,点击Test connection。报错:
jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection. Message: [Failed to change to remote directory [/data/app/]]
很简单,目录写错!
来到Maven 项目配置,
Remove prefix不是可有可无的,点击问号,查看一下其意义;
Source files指向需要加target,否则文件scp失败。
友情提示:通过MobaXterm之类的SSH客户端,连接到部署服务器,随时使用jps | grep user-center
验证,有问题,修改配置信息。
最终的正确配置: