Jenkins的按照分支部署+部署后打包上传到服务器
安装Publish Over SSH 插件
配置Publish over SSH
这个配置就是说你把打包好的文件上传到哪台服务器上
逻辑关系为:Jenkins所在的主机为A,我们要把打包的文件上传到主机B,那我们就需要Jenkins登录到主机B上,按照正常的理解,比如说我要去朋友家,应该是朋友把他的钥匙,给我,我就可以出入他家了,但是ssh免密登录的逻辑是相反的,我要去朋友家,我要先把自己的钥匙给朋友,这样我就可以出入朋友家了,是不是很神奇?这个比喻,是我抄的,嗯,是抄的,至于为什么,请大家移步看下面两篇博客。如果不想看的话,我来复述一下它真实的交互流程
1、我们在主机A上生成了公钥和私钥
2、我们将公钥推送给了主机B
3、主机A请求主机B,主机B根据公钥加密一个请求返回给主机A
4、主机A根据自己的私钥解密这个请求,再返回给主机B
5、主机B发现这个内容和自己发出去的是一样的,那么就信任了这台主机A,主机A就可以登录主机B了 传送门1 传送门2 我们接下来就要在这里配置
但是在配置前,我们要先登录一下Jenkins所在的主机,也就是主机A
[root@hecs-82454 local]# ssh -keygen
Bad escape character 'ygen'.
[root@hecs-82454 local]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
The key's randomart image is:
+---[RSA 2048]----+
| +|
| + =.|
| . =o+|
| o . +X|
| S o o*+|
| . . .+oo|
| . . ..=o+=|
| . o = =o.EO|
| ... oo+ oo=+==|
+----[SHA256]-----+
[root@hecs-82454 local]# ls
复制代码
我们来看一下生成的文件,根据Your identification has been saved in /root/.ssh/id_rsa.这句话的提示,我们知道了私钥的存储地址,根据Your public key has been saved in /root/.ssh/id_rsa.pub.知道了公钥的存储地址
现在我们在主机A上生成密码了,那怎么让主机B获取到呢

命令
ssh-copy-id root@远程主机名
复制代码
我们来检查一下远程主机,也就是主机B,发现在/root/.ssh的authorized_keys的内容=我们主机A的公钥,
其实我是在同一台主机上做的,因为我就一台远程主机,但是这并不影响结果。
终于,我们可以开始配置Jenkins了! 但是,不知道为啥,我这里Path to key识别不到,就只能用Key来放置私钥了,把私钥复制下来放进去即可
新建一个 自由风格的项目
General
GitHub项目
丢弃旧的构建
参数化构建过程
源码管理
Git
这个Repositories不知道怎么获取的请参考另一片篇传送门
构建
构建后操作
Transfer Set Source files: 这个的意思是源文件,Jenkins把代码从GitHub上拉取代码后在本地通过maven编译打包,打包后的东西在target文件夹里,也会生成一个jar包,这就是源文件
Remove prefix: 写死为target就行,话说我也不太清楚这个是干啥的,删除前缀
Remote directory: 还记不记得我们在配置Publish over SSH的时候也有一个Remote Directory,/usr/local/JenkinsAndSpring,也就是远程主机的目录,现在这个Remote directory和Publish over SSH的Remote Directory是相对路径,比如我现在配置的是/jenkinsjars,那么就应该有一个目录为/usr/local/JenkinsAndSpring/jenkinsjars,如果没有的话,就会新建一个这个目录,我们Jenkins打包生成的jar包就会传到远程主机的这个目录下
Exec command: 这个就是我们可以执行脚本,比如我们远程主机已经获取到jar包了,我们需要停掉原来的服务,再启动新的jar包,这个功能就可以放到脚本里。这个可以加可以不加。
这样,配置任务就完成了。
执行-测试一下
接下来我们看一下Jenkins干了点什么
我们来看一下“/var/lib/jenkins/workspace/安得猛士兮守四”都有啥,发现,外层是源码,target里是打包后的文件
[root@hecs-82454 安得猛士兮守四]# cd target/
[root@hecs-82454 target]# ls
classes maven-archiver NewCRUD-0.0.1-SNAPSHOT.jar.original
generated-sources maven-status surefire-reports
generated-test-sources NewCRUD-0.0.1-SNAPSHOT.jar test-classes
[root@hecs-82454 target]# ls
classes maven-archiver NewCRUD-0.0.1-SNAPSHOT.jar.original
generated-sources maven-status surefire-reports
generated-test-sources NewCRUD-0.0.1-SNAPSHOT.jar test-classes
[root@hecs-82454 target]# pwd
/var/lib/jenkins/workspace/安得猛士兮守四/target
[root@hecs-82454 target]# cd ..
[root@hecs-82454 安得猛士兮守四]# ls
mvnw mvnw.cmd pom.xml src target testng2.xml testng.xml
[root@hecs-82454 安得猛士兮守四]#
复制代码
同时也做了单元测试 还将/var/lib/jenkins/workspace/安得猛士兮守四/target/NewCRUD-0.0.1-SNAPSHOT.jar复制了一份到/var/lib/jenkins/.m2/repository/com/NewCRUD/0.0.1-SNAPSHOT/NewCRUD-0.0.1-SNAPSHOT.jar,这一步的目的,我没搞明白
最后,我们来检查一下远程主机是不是已经收到了jar包,看来是有的,这个restart.sh是抄的,还没抄明白,所以就不加进去了。
[root@hecs-82454 jenkinsjars]# pwd
/usr/local/JenkinsAndSpring/jenkinsjars
[root@hecs-82454 jenkinsjars]# ls
NewCRUD-0.0.1-SNAPSHOT.jar restart.sh
复制代码
然后我们再来试一下部署其他的分支,比如我现在是dev分支,变化是我在dev分支新增了一个testng3.xml文件
执行了testng3.xml的单元测试
至此,大功告成,虽然还有可改进的很大空间,但至少流程是通过了的。