Azure DevOps (十二) 通過Azure Devops部署一個SpringBoot應用

Tassdar發表於2022-05-06

文章配套視訊專欄:

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的部署例子,視訊已經錄製好了,正在剪輯,視訊中有更多細節,歡迎大家指正。

 

相關文章