Azure的DevOps发布和打包Springboot程序

标签: Azure 分类: 软件 创建时间:2019-11-01 03:14:20 更新时间:2024-11-24 10:03:59

我在代理服务器上安装了maven环境,在部署服务器上只安装了java环境而没有安装maven环境,我的想法是通过代理服务器上使用maven对springboot进行打包,然后将生成的jar包部署到远程服务器上,然后再远程服务器进行部署。理论上应该可以实现自动部署的,结果很折腾。
(1) 首先我尝试使用文件复制的方式

结果不成功,因为文件复制的方式只能是在本地机器上服务,比如再代理服务器上添加任务,那么只能在代理服务器上面来回复制,同理,在部署服务器上添加任务,只能在部署服务器上来回复制,而不管你添加了什么样的变量。

这几个地方可以添加变量,参考文章中有对预设变量的说明,有些东西只能在代理服务器上,有些变量只能在部署服务器上用(这是我个人理解的),反复实验,都无法使用。

参考文章:
1.Predefined variables

(2) 第二我尝试使用下载生成项目

在下载生成项目的参数设置中,我填了很多版本,让我郁闷的是,最后下载到部署服务器上的,都是空的。

理论上生成了一个项目,我也把管道设置成了管道从生成项目开始,就应该可以将生成的项目下载到部署服务器上了。结果,并不如我意。

(3) 最后,我通过使用ssh的方式,实现了将生成的项目直接复制到远程服务器上
点击项目设置,选择服务连接,选择新建服务连接,添加ssh连接

添加远程linux主机的地址,用户名密码等内容

然后添加任务,选择ssh文件复制

编写复制参数

执行生成任务即可

总结

1.新建发布管道

点击项目左侧的列表,选择发布,然后新建发布管道

2.添加项目

选择项目,添加项目,选择Azure Repo代码库

3.添加阶段

在项目后面的阶段中,添加空阶段

4.为阶段添加任务

点击阶段下面的作业,编辑任务

5.添加打包任务

在代理作业上点击加号,添加maven打包任务

6.编辑打包任务参数

填写任务的名称,maven所在的pom.xml文件位置

7.添加ssh任务

然后再次点击代理作业右边的加号,添加通过ssh复制文件

8.编辑ssh任务参数

选择ssh服务连接,点击右侧的下拉箭头,选择添加的ssh服务

(1) 源文件目录选择:$(System.DefaultWorkingDirectory)变量代表的文件目录;
(2) 内容中可以添加正则表达式,“ ** ”,表示全部文件,或者是*/.war 表示.war文件;
(3) 目标目录填写部署服务器的目标目录。
(4) 高级选项中,选择精简文件夹和覆盖

参考文章:
1.Copy Files Over SSH task

9.保存和发布

编辑完任务,点击保存和发布

点击创建

10.查看日志

点击上面的Reles

鼠标放到解决上,点击出现的日志按钮

11.查看每一步的日志

打开日志列表,可以点击每一步,查看每一步的日志内容。

每一个任务的日志

将文件复制到部署服务器上,就可以在部署服务器上执行其他的命令了

12.添加部署服务器作业

右键点击阶级右侧的三个点(鼠标放上去,就显示了),添加部署作业

编辑部署作业,选择部署服务器

13.添加部署作业的任务

增加完了部署作业,选择完了部署服务器,在部署作业的右侧加号,添加多个任务

可以添加命令行工具,也可以添加其他的任务

后面的内容,比如添加哪些脚本,如何自动触发部署,就不具体写了,在其他文章中都写过了,多练习就好了。

最后保存配置,手动创建新的发布即可。

参考文章:
1.使用Azure Devops持续集成部署SpringBoot项目 这篇文章是我后来回顾的时候,重新看的一篇文章,这里有一个地方,就是可以借鉴,在使用后台执行java程序的时候,以及删除已有的程序的时候的代码,第一条命令:kill -9 $(netstat -nlp | grep :8080 | awk ‘{print $7}’ | awk -F”/“ ‘{ print $1 }’)是表示查询8080端口的进程id并kill停止它, 以免在发布新版本的时候提示端口被占用, 第二条命令:nohup /usr/java/jdk1.8.0_201/bin/java -jar /tmp/azure-demo-0.0.1-SNAPSHOT.jar > log.file 2>&1 &表示后台启动运行jar文件,并把日志打印到log.file文件中
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。