【綜合學習】centos7 + maven + jenkins + springboot 多模塊module項目部署

  1. 先得有一個git倉庫,裏面是一個基於maven的spring boot項目,用IDE打開能直接運行成功的那種,不必多說。
  2. centos7 64 bit,自帶java1.8環境。(我的是deepin系統)
  3. 查看開發機器中安裝maven環境(爲了盡力在服務器中安裝同樣版本的maven)。
    查看IDEA 的maven版本。
    在這裏插入圖片描述
  4. 安裝jenkins並啓動,保證可用,略,上一篇文章就是。
  5. 安裝jenkins中必要的插件,maven-intergration,publish-over-ssh
  6. 配置插件。

maven-intergration的配置
maven的問題,在之前安裝一個maven工具可用也可,在jenkins中配置專門安裝一個maven也可(我用的就是這個辦法,但很慢,等了至少10min)。
略過。

Publish over SSH的配置

在這裏插入圖片描述
配置
https://blog.csdn.net/MenofGod/article/details/81941223

注意如果不想使用ssh的publickkey這樣的方式連接,也可以用username和password連接。
點“高級”即可,然後test connection可看效果。

  1. 多模塊module項目的構建
    如果是單模塊的項目構建很簡單找到對應的target文件夾裏生成的jar文件運行即可。
    但多模塊的項目怎麼做呢?

    我的這個試驗項目的結構如下圖:
    在這裏插入圖片描述
    在箭頭所指的這個pom文件(@SpringBootApplication所在的這個module的pom.xml文件)裏添加如下內容:

    </dependencies>

    <build>
        <finalName>testcode</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.0.1.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

最終項目build完成之後,會在starter項目的target文件夾中生成一個 testcode.jar 文件,直接用命令行運行這個jar即可,已親測。

java -jar testcode.jar

如此即可看到springboot項目的成功啓動,並可正常訪問。(當然前提是你的java命令可用,防火牆端口等已允許通過)

但實際上我們每次build的時候還是應該把原來的進程kil掉,再重新build生成。
因此我們並不會每次用手工,要用命令來完成。

  1. 相關命令和腳本

經查找生成的包的路徑var/lib/jenkins/jobs/flag2020-maven-springboot/workspace/starter/target

啓動命令:

java -jar testcode.jar

可看到項目啓動成功。
在這裏插入圖片描述

嘗試一下kill進程(這句命令有點複雜,以後還要學習,來自https://blog.csdn.net/zjh_746140129/article/details/80904876)):

ps -ef | grep testcode.jar | grep -v grep | awk '{print $2}' | xargs kill -9

在這裏插入圖片描述
可見kill成功。

擴展閱讀:

grep -v grep https://blog.csdn.net/dieyong/article/details/93008252
awk用法 https://www.cnblogs.com/bugingcode/p/8287914.html
linux判斷某個進程是否存在https://blog.csdn.net/dc_show/article/details/41806265

我專門打開一個瀏覽器頁面訪問這個springboot項目的swagger頁面。
幾次嘗試後,發現每當我啓動項目時,頁面有內容。
每當我kill之後,頁面就不可訪問。
可見這兩個命令確實實現了作用。

  1. 講上述kill進程等內容寫入腳本。
    學習了網上找到的其他資料,改寫了腳本如下:
#!/bin/bash
#判斷進程是否存在,如果不存在就啓動它如果存在就重啓它
PIDS=`ps -ef |grep testcode.jar |grep -v grep | awk '{print $2}'`
if [ "$PIDS" != "" ]; then
	kill -9 $PIDS
fi

#ps -ef | grep testcode.jar | grep -v grep | awk '{print $2}' | xargs kill -9
cd /var/lib/jenkins/jobs/my-project/workspace/starter/target
java -jar testcode.jar

在這裏插入圖片描述

然後執行,順利成功!
在這裏插入圖片描述

  1. 但由於腳本原因,啓動了springboot,腳本並不結束和返回,jenkins就一直處於“build進行中”的狀態,如下圖。
    如何處理呢?
    在這裏插入圖片描述
    這裏要提到nohup命令,資料很多,隨便搜一下就行了。
    這裏放上我之前的記錄。
    linux nohup

  2. jenkins 構建完成後又不可訪問了,怎麼回事?
    經查,是jenkins build完成後又kill掉了相關進程,現在設法不讓它kill就好了。

於是把腳本改造了一下,放在了兩個地方。
在這裏插入圖片描述
在這裏插入圖片描述
然後終於成功了。

在這裏插入圖片描述

終於算是完成了預想的結果,大致在這裏記錄一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章