• 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的部署例子,视频已经录制好了,正在剪辑,视频中有更多细节,欢迎大家指正。

     

  • 相关阅读:
    node_modules/XXX/index.js:XXX;XX ||= XXX?.[level];SyntaxError: Une
    2023-11-17 服务器开发-性能分析-intel-vtune-安装
    微服务篇-C 深入理解第一代微服务(SpringCloud)_II 深入理解Eureka服务治理
    110.42.7.1ping IP延迟代表什么意思,自己延迟高会表示其他人也高延迟吗?
    Doris 集群的手动部署
    【华为OD机试真题 JAVA】分积木
    电商项目-day03
    代码随想录刷题记录 3 - 哈希
    Kruskal 重构树
    【区块链 | IPFS】IPFS cluster私有网络集群搭建
  • 原文地址:https://www.cnblogs.com/Tassdar/p/16228543.html