概述

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-daledfi-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就不可能支持部署,它仅仅只是完成构建功能,输出jarwar,即所谓的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验证,有问题,修改配置信息。

最终的正确配置:
在这里插入图片描述

参考

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐