使用Azure Devops持续集成部署SpringBoot项目

-----很详细的Az Devops部署java项目的文章

提示:
此文是本人打着想玩一玩devops的想法,来记录的,用的是最直接简单的方法来实现持续部署的,适合个人玩玩demo,内容不一定适合实际生产,大家就当逛逛就行


好吧,切入正题,先简单讲讲Azure Devops是什么:
简介:

  • Azure Devops是MS Azure下的产品,提供devops自动集成和部署的服务平台:
    是MS Azure下的产品,提供devops服务的平台
    -----近年来devops的理念越来越被更多的人所提及, 敏捷开发模型下的CI连续集成, CD持续部署的概念也逐渐走向自动化, 而促成这些自动化的工具和服务又有许多种,如Jenkins,ElectricFlow和Azure Devops,它们都是为了解决自动集成部署的难题的服务,我们今天要讲的主角就是Azure Devops.

正式进入主题:
那么要完成使用Azure Devops自动集成部署一个Springboot项目我们需要那些准备工作呢?

第1步:
1.因为我们需要有自动部署连接的云服务器, 当然先要有一台可远程连接的云服务器啦,这里我选择了腾讯的学生体验服务器,(当然你也可以使用阿里的),在使用微信扫码支付0.01元实名认证后,我免费获取了一个体验服务器,注意这里的root用户的ip和密码,我们在后面需要使用到

2.给你的云服务器安装JDK,并配置好环境变量,
因为我买的云服务器莫得安装JDK,所以我们需要安装jdk,(如果你已经安装jdk,可以跳过这步)这里你可以选择手动ssh连接你的云服务器安装.

第2步: 需要有一个Azure Devops的账号,这个账号使用你的微软账户登录/邮箱注册都行, 且是免费的.

注册登陆后, 你需要创建一个组织和项目(例如我的组织190...项目名azure-devops,且是public的):

到此我们的准备工作已经做好
第3步:
在本地新建一个以maven管理的Springboot Start Web项目,并在Controller层写一个测试连接的Http api接口,在本地运行成功后, 提交到github仓库
附:我的仓库地址我的项目github:

第4步(使用Azure Devops的Pipelines构建CI管道)
回到我们在第2步的页面
点击进入azure-devops项目, 选择pipelines新建一个管道
(注意: 对于新的Azure DevOps帐户,这里会自动带你进入使用YAML构建管道体验,我们要提前在 点击右上角头像|Preview features|New YAML pipeline creation experience关闭这个选项)

选中github,随便取一个连接的名字,点击验证

验证完你的github账户后,就可以选择我们刚push到GitHub的springboot项目加入自动CI集成的管道:

点击继续后,我们找到Maven的编译构建模板任务组,点击应用

可以看见中间的3个任务就是maven模板的任务,分别是在代理主机上根据pom测试构建项目,复制构建好的项目,上传构建的项目drop到CI管道,右边是选择代理的主机系统,和pom文件位置

点击Triggers配置我们的CI管道会根据github的提交自动集成测试,并且保存任务排队

点击左边栏的Builds可以看到我们正在排队运行的集成任务

点进我们的build任务中,等待云端代理主机运行任务后,可以看到我们所有的集成测试build工作已经在代理主机上运行完成

点击Maven项可以查看日志,提示构建成功

点击Copy Files项查看日志,可以看到我们项目的jar包在代理主机上已经复制移动到某工作目录

点击Publish Artifac项查看我们在代理主机工作目录中的项目文件已经上传到我们的CI管道目录下


到此我们的Springboot项目已经通过CI管道自动集成了,接下来就是准备发布Releases工作了:

1.配置devops的连接服务通过ssh连接到我们的云服务器

其中host name是云服务器的公网ip,密码是云服务器的初始root账户密码
image.png

准备工作好了后

回到Devops点击右边的Releases,选择New一个发布管道,选择一个空的Empty job工作

选择我们要发布的项目,选择我们从CI管道build的项目,点击添加

设置我们的发布管道的触发条件是自动

给部署的第一Stage1的工作台更名为copyJAR,并点击3进入设置任务

进入后给工作添加任务,选择添加ssh复制文件任务

点击编辑任务,其中SSH service connection填我们在前面配置的连接云服务的ssh连接名,Source folder选择到..../target这一级,因为target下存放的是我们的jar包文件, **表示该目录下的所有文件, 最后目标目录选择/tmp, 这样jar包文件就可以发送到云服务器主机的/tmp下(注意目标目录最好是所有人可操作权限(文件是绿色的),以免出现无权操作报错)

再点击Tasks左边的选项pipeline回到工作台,并再新建一个工作命名为RunSpringboot

进入RunSpringboot添加任务,步骤和上个工作一样,这里我们添加ssh远程执行命令

添加远程运行jar包的命令来运行我们的项目(注意由于ssh远程直接运行命令可能会读取不到云主机的环境变量配置,导致提示java命令未找到,所以这里写成全路径来执行jar文件), 我们的第一条命令:
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文件中
最后点击Save保存工作

到此我们的CD持续部署的管道就搭好了, 我们去先手动发布一次:
点击左边Releases选项,点击Create a release,点击Create

可以看到我们的发布工作已经在排队运行!

点击进入查看发布任务进度,我们的RunSpringboot,的任务已经成功!

我们在浏览器输入 云主机ip:8080/test/sayHi 访问, 果然我们的项目已经启动了!!!

接下来我们将在本地修改代码并提交一次到github,以验证我们的自动集成部署是否已经成功

1.在本地修改,并提交push到github仓库:

2.查看devops的构建管道,发现我们刚才的提交已经在自动集成测试构建了:

3,集成测试完成后,点击到发布管道,发现我们新的提交版本已经在自动部署了:

4.部署完成后,再次访问 云主机ip:8080/test/sayHi, 更新的版本已经发布运行成功!!!

到此,本文章就结束了,我们实现了在本地更新代码,修改成一个稳定的版本后,直接push到github的主分支,我们就可以回家睡觉了,而我们此次版本的修改会通过Azure Devops自动集成发布,这样所有连接我们的服务的请求就都有了这次新的更新.

(我在写演示的过程中,并不是一次成功的,我重新修改任务命令发布了几次,所以发布的版本号来到了18,但本文章是最后我完全可以一次运行成功的截图版本,所以在发布的版本号上有点不同,不过不影响大致流程)

(演示中我们关闭了使用YAML文件来构建管道,其实YAML文件就是用来描述我们每个自动集成部署阶段要执行的任务,和我们手动设置管道任务一样,具体使用YAML构建可以看这里官方文档)

其实Azure Devops的玩法还可以有许多种,它支持很多语言框架和容器的自动集成部署,比如ASP.NET, Node.js的NPM, Python, Docker容器等,并且可定制性高,各位大佬可以根据官方文档自行摸索,并且结合MicroSoft 的Azure云计算服务平台还有更丰富的玩法,不过由于Azure的使用有点复杂,这篇文章中我也就没有用到Azure的服务(主要是注册Azure的国际账户需要VISA信用卡,我没有,而且我也不会玩Azure哈哈哈),而是使用了最简单的云服务ssh连接来完成自动集成部署.

最后谢谢阅读

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339