08 Jenkins 關於發布

2022-07-05 11:18:10 字數 2766 閱讀 2893

寫在前面的話

jenkins 對於我們使用者而言,可能中間會有不同的需求,比如自動構建,介面測試,**質量檢測。但其實我們的最終目的還是打包上線。當然,各個公司的專案開發語言會不一樣,但是總體而言發布方式是幾乎一致的,不管不是前端還是後端。

外掛程式:publish over ssh

簡單說下該外掛程式的作用:該外掛程式能耐允許我們向配置好金鑰驗證的伺服器傳送檔案,並且在遠端 shell 的情況下執行命令。

這就相當於該外掛程式同時具有 scp 和 ssh 的功能。我們可以去外掛程式中心搜尋:

外掛程式安裝完成以後,開啟:系統管理 --> 系統設定

會多出 publish over ssh 的選項:

此時我們點選新增,就可以增加伺服器認證,比如我們新增一台測試:

開啟我們的任務,增加傳送和包的操作,在構建後操作 中有這樣一項:

配置說明:

此時我們點選觸發構建:

在構建的控制台輸出的最後,我們可以看到 ssh 操作,同時也可以發現,在 ssh 之後,使用ls -h .命令的時候,我們的目錄是當前使用者的家目錄。

而使用 ip 命令的時候卻發現未找到命令,這就是在這裡使用命令的乙個值得注意的地方。

建議命令都寫絕對路徑,如/usr/sbin/ip,否則可能出現找不到命令的情況。

在執行 shell 指令碼的時候,也建議在指令碼前面新增/bin/sh

連線伺服器檢視傳送情況:

可以看到檔案成功傳送到了遠端伺服器。

關於後續更新

在將更新包傳送到遠端伺服器以後,接下來的操作便是更新,這裡就不給具體的指令碼了,只給一些自己在使用過程中的以及設計的建議:

1. 我們在設計目錄結構的時候,建議設計三個目錄:

目錄作用

/data/service/tomcat-8080

應用目錄

/data/deploy/tomcat-8080

更新包傳輸臨時存放目錄

/data/backup/tomcat-8080

舊版包歸檔目錄

2. 更新過程大致如下:

傳送更新包到臨時目錄 --> 解壓更新包到指定的名稱 --> 停止應用服務 --> 備份舊版包到備份目錄 --> 解壓的新版包移動到應用目錄  --> 啟動服務 --> 傳送更新資訊

簡單說明:

傳送更新包到臨時目錄:就是之前我們使用的 publish over ssh 傳送檔案。

後續的步驟都是在 publish over ssh 中執行命令時候執行遠端伺服器上面的指令碼實現,該指令碼的功能包括解壓包,停服務,備份,更新,啟動,傳送通知。

對於傳送通知,我們這裡依然採用釘釘機械人 webhook 的方式:

對於通知訊息,建議設定兩個機械人,乙個用於通知成功,乙個用於通知失敗以及失敗原因。

這樣是為了當專案多了起來,一次可能得更新多個專案,為了更好的就行區分通知型別。

3. 規範化管理伺服器。

我們在設計伺服器的時候就要求伺服器設計目錄的一致性,這樣能夠減少我們很多不必要的操作,比如我第一條中的目錄結構設計。這樣的好處在於,我當前公司的發布指令碼一共只有 4 個,這還是為了維護方便的情況分成的 4 個:

乙個是傳統 ng **的前端靜態發布指令碼,乙個是 nodejs 啟動的前端服務發布指令碼。

乙個是傳統 tomcat 服務更新發布指令碼,乙個是 springboot 微服務啟動發布指令碼。

這其中又涉及多項服務,但是指令碼至始至終就這幾個,每個構建我們通過傳遞兩到三個不同引數用於區分不同專案。

因為目錄結構,設計都類似,所以引數也非常簡單。

4. 指令碼集中管理。

當我們又很多機器的時候,我們不能將指令碼儲存在伺服器本地。否則我們修改指令碼就意味著需要修改每台機器上面的指令碼,這樣工程量很大。我的建議是在發布傳輸更新包之前多一步操作,就是傳輸更新指令碼。這樣能夠時刻保持指令碼是最新狀態。且指令碼都在 jenkins 伺服器上面儲存,集中管理。

5. 關於回滾操作。

對於回滾操作,由於我們每次都有對服務包做備份,並將備份按照指定 tag 進行了歸檔,所以我們依然可以採用指令碼的形式,將舊版本從新從備份目錄更新到應用目錄下面。並且我們可以通過指定 tag 傳參的形式回滾到指定版本。

小結整個發布流程大致如此,當然我們可能在很多地方看到 deloy to container 這個外掛程式,其實它沒用 publish 那麼好用。

至於個人自己公司的發布方式到底怎麼取捨還是看個人,我這裡就是一些建議。

jenkins發布docker專案 harbor

jenkins 部署k8s 專案還是比較流暢的,本身建立多流水線專案,在專案中新增jenkinsfile就好了,映象需要額外的引數,還可以新增dokcerfile檔案。由於我現在的問題是不能夠修改原有的專案,還想利用專案中的dockerfile打包後發布到私服倉庫 harbor 中。這種構建有個劣勢...

Jenkins使用SSH遠端發布

遠端發布需要安裝publish over ssh外掛程式 比如我們的應用伺服器都是通過tomcat使用者啟動程式,因此,在jenkin伺服器上配置免密登入遠端伺服器tomcat使用者 生成金鑰對 ssh keygen t rsa 為了安全最好設定密碼 把公鑰加入到遠端伺服器tomcat使用者 ssh...

Jenkins簡單部署發布測試

部署的jenkins用作測試,部署的jenkins用docker啟動,部署之前需要先部署好docker 1 docker拉取映象 docker pull jenkins jenkins latest 2.建立目錄 由於防止jenkins中重要檔案因為容器損毀或刪除導致檔案丟失,因此建立檔案對外掛程式...