Azure DevOps (十二) 通过Azure Devops部署一个SpringBoot应用
文章配套视频专栏:
https://space.bilibili.com/38649342/channel/seriesdetail?sid=2267536
视频正在努力更新。
上一篇文章中,我们通过Azure Devops完成了一个.NET Corey应用的部署,今天我们来实现一下JAVA的Spring Boot应用的部署。
首先我们创建一个springboot的模板项目,直接使用IDEA的Spring Initializr我们选择JDK的版本为1.8,springboot的版本我们选择2.3,当然也可以用更新版本的,这个根据大家自己的喜好来。
创建完成,之后我们按照之前的步骤,把我们的代码同步到azure上去,首先我们创建一个名叫:azure_java_app的仓库
创建好仓库之后,我们把我们的代码同步到仓库里去,这里还是要注意,azure和我们的使用习惯不太一样的点就是,他的默认仓库是main不是我们习惯的master
不知道怎么同步代码到azure仓库的可以查看我之前的文章:
Azure DevOps (一) 托管自己的Git仓库
代码同步完成之后,我们开始创建我们的编译流水线
首先,我们创建一条新的流水线叫:azure_java_app,创建流水线的时候一定要注意,不要选错了分支,流水线默认是创建在main分支上的,我们需要在左上角切换到master分支
或者我们可以在项目文件中,先创建一个名为:azure_pipeline.yml的空白yaml文件,创建流水线的时候,切换到master分支选择根据yaml文件创建,即可。
然后我们开始编辑流水线的文件,我们需要添加两个步骤:使用maven编译springboot应用和上传我们编译好的jar包到流水线仓库
点击右侧插件搜索框,分别搜索和添加:maven和PublishBuildArtifacts,注意顺序不要乱,一定要看左侧的流水线脚本的真实代码顺序。
首先我们先只添加一下maven的编译插件,添加完成后指定好POM的目录,这个目录是以你仓库的根目录的相对路径,如果你的POM就是放在根目录下的使用默认的就可以。
我的pom是放在根目录下的,这个是我的流水线脚本
- task: Maven@3
inputs:
mavenPomFile: 'pom.xml'
publishJUnitResults: true
testResultsFiles: '**/surefire-reports/TEST-*.xml'
javaHomeOption: 'JDKVersion'
mavenVersionOption: 'Default'
mavenAuthenticateFeed: false
effectivePomSkip: false
sonarQubeRunAnalysis: false
然后我们先执行一下编译,看看是否可以正常编译成功,并且我们要看一下我们编译后的输出目录在哪,用于填写下一步的制品上传。
我们可以看到我们的工作目录是/home/vsts/work/1/s
我们修改一下我们项目的pom文件,更改一下最终输出jar包的名称,方便我们后续进行操作,我们在pom的build节点中加入<finalName>app</finalName>,这样最后
我们输出的jar包的名称就会叫app.jar
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.7.RELEASE</version>
<configuration>
<mainClass>com.example.azure_java_app.AzureJavaAppApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>app</finalName>
</build>
然后我们添加上传流水线制品步骤,把编译好的jar包上传到仓库里去
我们在上传流水线制品的时候不要把所有的东西都传上去,浪费空间而且杂乱无章,我们只需要上传我们的app.jar就够了。
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '/home/vsts/work/1/s/target/app.jar'
ArtifactName: 'drop'
publishLocation: 'Container'
然后运行一下我们的流水线,看看执行结果。
可以看到流水线制品已经成功上传了。
然后我们开始编写部署流水线
我们创建一条部署流水线,通过SFTP上传我们的jar包到服务器上去,创建服务连接信息的步骤不在赘述,前几篇文章中都有写过。
然后我们去服务器上编写一下守护进程的文件,要注意指定对工作目录和执行用户
[Unit]
Description=Example JAVA APP running on Ubuntu [Service]
WorkingDirectory=/home/azure_app
ExecStart=/usr/bin/java -jar /home/azure_app/app.jar
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=azure_java
User=root [Install]
WantedBy=multi-user.target
接下来启动一下我们的守护进程
#app是service文件的名字
systemctl enable app
systemctl start app
访问一下我们的服务地址看看效果
然后我们在部署流水线中添加第二个步骤,用来重启我们的守护进程。
然后我们修改一下我们的返回结果重新执行一下流水线,看看效果。
重新运行流水线后,访问地址:
重新访问,输出友好问候。
到这里我们就完成了一个简单的JAVA的部署例子,视频已经录制好了,正在剪辑,视频中有更多细节,欢迎大家指正。
Azure DevOps (十二) 通过Azure Devops部署一个SpringBoot应用的更多相关文章
- docker 中部署一个springBoot项目
docker 中部署一个springBoot项目 (1)介绍 springBoot项目 1.项目结构 2.pom.xml <?xml version="1.0" encodi ...
- 使用 Visual Studio 开发、测试和部署 Azure Functions(二)测试,部署
1,引言 上一篇介绍了使用使用 Visual Studio 开发 "Azure Functions" 函数,此篇介绍 “Azure Functions” 的测试以及直接从 Vist ...
- 玩转Django2.0---Django笔记建站基础十二(Django项目上线部署)
第十二章 Django项目上线部署 目前部署Django项目有两种主流方案:Nginx+uWsGI+Django或者Apache+uWSGI+Django.Nginx作为服务器最前端,负责接收浏览器的 ...
- Kubernetes 学习笔记(二):本地部署一个 kubernetes 集群
前言 前面用到过的 minikube 只是一个单节点的 k8s 集群,这对于学习而言是不够的.我们需要有一个多节点集群,才能用到各种调度/监控功能.而且单节点只能是一个加引号的"集群&quo ...
- Azure Devops(十四) 使用Azure的私有Nuget仓库
哈喽大家好,最近因为工作的原因没有时间写文章,断更了俩月,今天我们开始继续研究Azure上的功能. 今天我们开始研究一下Azure的制品仓库,在之前的流水线的相关文章中,我们都使用到了制品仓库用来保存 ...
- Azure Devops(十五) 使用Azure的私有Maven仓库
上一篇文章中,我们介绍了如何使用Azure的nuget仓库,今天我们来研究一下如何使用azure给我们提供的maven仓库. 首先,我们打开azureDevops,点击到制品界面,然后选择maven. ...
- Android学习笔记(十二)——实战:制作一个聊天界面
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...
- 二十二、SAP中创建一个内表,并添加内容循环输出显示
一.直接上代码 二.输出如下
- Android项目实战(二十二):启动另一个APP or 重启本APP
一.启动另一个APP 目前公司项目需求,一个主APP,需要打开某些小APP,这些小APP是整合了Unity的,但是还是android程序(所有小APP的包名是已知的). 以前没做过,查询了一下实现方法 ...
随机推荐
- spring集成mongodb简单使用和测试方式
@EnableMongoRepositories @ComponentScan(basePackages = "cn.example") @Configuration public ...
- 为什么线程通信的方法 wait(), notify()和 notifyAll()被定 义在 Object 类里?
Java 的每个对象中都有一个锁(monitor,也可以成为监视器) 并且 wait(),notify() 等方法用于等待对象的锁或者通知其他线程对象的监视器可用.在 Java 的线程中 并没有可供任 ...
- 在chrome浏览器英文环境下为什么上面现行代码不起作用?
因为后面的客户端区域会覆盖前面的用户区域所以上面现行代码不起作用
- 使用kindeditor
首先在http://kindeditor.net/demo.php下载样式 点击右上角的下载按钮 点击官方下载下载之后解压出来 然后在桌面创建一个文件夹 然后回到刚才的http://kindedito ...
- 学习SVN02
代码发布方案: 1,安装,优化 软件环境,(nginx,lvs) <-------运维工程师 2,程序代码(不断更新). <--------开发工程师,(开发,运维都可以发布) 3, ...
- Linux 基础优化
1.操作的最小化原则 1)安装系统最小化 一般情况下安装OS时,软件安装包组(Package Group)的选择: base--------------------------基本环境 editors ...
- 学习Kvm(三)
虚拟化(将一个物理硬件平台虚拟成多个) vmware(模拟出一堆硬件设备,每一个硬件设备都是独立平台) 虚拟化要解决的问题(硬件之上的OS,有用户空间.内核空间:vmware虚拟机所模拟出的多个硬件平 ...
- canvas —— globalCompositeOperation
globalCompositeOperation 属性设置或返回如何将一个源(新的)图像绘制到目标(已有)的图像上. 源图像 = 您打算放置到画布上的绘图. 目标图像 = 您已经放置在画布上的绘图. ...
- 2022DASCTF X SU 三月春季挑战赛 ezpop
复现一道dactf的ezpop <?php class crow { public $v1; public $v2; function eval() { echo new $this->v ...
- EMS查看邮箱容量限制的方法
以Exchange管理员身份打开EMS控制台.在PowerShell命令行提示符下,输入以下命令. Get-MailboxDatabase | FL name,IssueWarningQuota,Pr ...