使用PasteSpider實現類似Jenkins的功能,讓你的2G伺服器也可以飛起

来源:https://www.cnblogs.com/pastespider/p/18341574
-Advertisement-
Play Games

或許你接觸過Jenkins, 在我理解就是拉取源碼,然後構建成鏡像,最後啟動容器! 但是這個功能對於小記憶體的伺服器來說就是奢望了! 今天介紹一個新版本,把你這個遺憾彌補下! 在PasteSpider中,也是支持拉取源碼,然後編譯發佈的!!! 以下案例使用svn作為源碼管理 如果你使用git作為源碼管 ...


或許你接觸過Jenkins,

在我理解就是拉取源碼,然後構建成鏡像,最後啟動容器!

但是這個功能對於小記憶體的伺服器來說就是奢望了!

今天介紹一個新版本,把你這個遺憾彌補下!

在PasteSpider中,也是支持拉取源碼,然後編譯發佈的!!!

以下案例使用svn作為源碼管理

如果你使用git作為源碼管理,道理差不多

以我的代碼為例

dotnet 6.0 + Linux AliBaba + PasteSpider v24.07.20.01

1.按照論壇的方式安裝PasteSpider

一鍵安裝PasteSpider

2.在伺服器linux上安裝dotnet

這個可以查看微軟官方網站

https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-scripted-manual#scripted-install

安裝完成後執行命令監測下

dotnet --info
 

SVN/GIT的配置

3.打開PasteSpider的管理端,找到菜單

image.png
以我的為例,我為項目

image.png

如果你啟用了docker registry的私人倉庫,則上面的配置中倉儲那邊要對應的選擇,選擇哪個要看你所選的服務

上面中要註意的是 克隆編譯命令

我的如下

#刪除舊的源碼
rm -rf /spider/source/blog/tool/
#創建文件夾,可能文件夾不存在
mkdir -p /spider/settings/blog/tool/
#刪除舊的配置文件,這一步看實際情況,因為拉取源碼會把所有代碼都覆蓋
rm -rf /spider/settings/blog/tool/appsettings.json
#複製配置文件,留著備用
cp -f /spider/publish/blog/tool/appsettings.json /spider/settings/blog/tool/appsettings.json
#從服務端拉取源碼,這個第一次的時候一般會失敗,所以要直接去服務端試著拉取代碼
svn checkout svn://your_svn_ip:your_svn_port/PasteSoft/PasteSoft --username=your_svn_name --password=your_svn_password /spider/source/blog/tool/
#構建命令,不同語言不一樣處理,目的就是發佈到文件夾
dotnet publish /spider/source/blog/tool/ -c release -r linux-x64 --self-contained false -o /spider/publish/blog/tool/
#刪除拉取的配置文件
rm -rf /spider/publish/blog/tool/appsettings.json
#從剛剛備份的配置文件複製到發佈文件夾
cp -f /spider/settings/blog/tool/appsettings.json /spider/publish/blog/tool/appsettings.json
#後續的動作由系統接管,其實就是構建鏡像和升級!

 

以上需要註意的地方有

 

目錄說明

/spider/這個是工作目錄,就是PasteSpider的工作目錄,對於宿主伺服器的路徑而言的,預設是/spider/

這個目錄下有幾個功能文件夾

source 表示用於存放svn拉取的源碼的

publish 表示用於存放服務編譯後(發佈)的文件的

settings 用於存放項目服務的特別文件的,這個看需求

克隆編譯命令 的目的就是拉取源碼到source文件夾,然後通過對應語言的發佈命令,發佈到publish文件夾

功能文件夾下還有幾層 

/spider/source/blog/tool/為例

spider是PasteSpider的工作目錄

source是功能文件夾 表示源碼

blog表示這個項目的代碼

tool表示這個服務的代碼

 

命令說明

命令一行一條,每行之間沒有上下關係,也就是沒有相對路徑的說法,你得寫全路徑

如果是#開頭的,則這一行命令不會被執行,是註釋

 

更新說明

在配置的下方有一個表示,其實是多少個環境就多少行,然後註意後面那個命令開頭

意思是源碼提交的備註是這個字母開頭的,才會觸發升級,比如我的配置是

update 的開頭 就可以觸發

驗證密鑰註意下,下麵的步驟4要使用

 

4 post-commit

假設你一鍵有一個SVN代碼管理器的服務端,則參考如下文章進行配置並設置post-commit的hook文件

https://soft.pastecode.cn/Article/1

精華部分其實就在

post-commit的內容上

#REPOS="$1"
#REV="$2"
export LANG=zh_CN
MESSAGE=$(svnlook log -r $2 $1)
curl -d "token=your_token&repos=$1&version=$2&info=$3&info=$MESSAGE" "https://spider.abc.com/api/spider/Code/svncommit"

假設訪問https://spider.abc.com/page/index.html可以訪問到我的PasteSpider管理端,則有如上配置

註意上面的your_token,和我們3步驟配置的驗證密鑰需要一致,一會有個地方要用

上面的文件保存好了後,註意修改post-commit的執行許可權,需要能夠執行,否則是不會生效的

 

 

5檢查流程

以上按照要求配置後,特別註意的是命令相關的內容

伺服器是否支持相關的命令

是否支持curl 這個用於推送信息到PasteSpider的介面上的

是否支持dotnet 這個要看你是啥語言,不同語言的編譯發佈命令是不一樣的

是否支持svn 這個是拉取源碼的,比如我這個伺服器上找不到這個命令,就使用yum -y install svn 不同伺服器要基於自己的去安裝

一些登陸操作是否已經執行

比如svn這個拉取代碼的操作,一般是要求第一次執行,會有一個提示,大致意思是登陸,授權啥的,你可以手動執行下

 

6.準備測試

以上信息保存後,我們來提交一下代碼!

image.png

註意看我的備註是update打頭的,這個和我的步驟3的相對應!

我的啟動前的資源使用情況

image.png

提交後,到PasteSpider的管理端的任務列表查看

image.png

在接收到對應的post-commit的推送後,會先執行鏡像的構建,然後會基於配置執行升級!

或者是等待通知,比如我的

image.png

當然,如果執行失敗了,則需要到任務的詳細中查看,具體哪個命令失敗了,比如我以前的

image.png

打開後,查看這個任務裡面的子任務,哪條執行失敗!

image.png

點擊詳細,會看到具體執行的命令,你可以把這個命令自己複製到伺服器上去執行,看看為啥錯誤!

基於任務詳細的反饋,如果有錯誤的修正後重新提交嘗試!

升級後

image.png
多的部分,就是克隆命令後的編譯發佈花費的,使用ps -aux 可以查看到對應多出來的

image.png

查過資料,一段時間後這個會自己退出!

所以資源占用是非常划算的!

多測試幾次,發現時間還是有差的!

image.png

 

寫在後面

其實克隆代碼執行完成後,走的就是預設的服務的發佈模式(就是開發者在開發機上發佈項目到文件,然後把發佈後的項目文件同步到伺服器上,然後伺服器基於發佈的文件執行鏡像的構建和對應服務的發佈!)

也就是說克隆代碼執行完成後,其他的步驟執行的邏輯就和發佈模式一致了

比如會運行幾個容器

埠配置

IP配置

nginx配置等


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java RMI(Remote Method Invocation)是一種允許Java虛擬機之間進行通信和交互的技術。它使得遠程Java對象能夠像本地對象一樣被訪問和操作,從而簡化了分散式應用程式的開發。一些應用依然會使用 RMI 來實現通信和交互,今天的內容我們來聊聊 RMI 的那些事兒。 一、先 ...
  • 作者:小塵 鏈接:https://juejin.cn/post/7357172505961578511 前言 見過幾千行代碼的 controller嗎?我見過。 見過全是 try catch 的 controller 嗎,我見過。 見過全是欄位校驗的 controller 嗎,我見過。 見過全是業務 ...
  • memset() 描述 C 庫函數 void *memset(void *str, int c, size_t n) 用於將一段記憶體區域設置為指定的值。 memset() 函數將指定的值 c 複製到 str 所指向的記憶體區域的前 n 個位元組中,這可以用於將記憶體塊清零或設置為特定值。 在一些情況下,需 ...
  • C 庫函數 - strcmp() 描述 C 庫函數 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字元串和 str2 所指向的字元串進行比較。 聲明 下麵是 strcmp() 函數的聲明。 int strcmp(const cha ...
  • 前言 今天推薦一款用 .NET 和 Vue3 實現的開源許可權管理系統。它的界面清爽乾凈,功能強大,還具備靈活的角色許可權分配功能,能夠滿足不同規模企業的管理需求。無論你是開發新手還是大神,都能輕鬆上手,快速搭建起自己的許可權管理體系。別再猶豫了,趕快來試試吧! 項目簡介 Malus是海棠的意思,顧名思義 ...
  • 委托與事件是C#中歷史比較悠久的技術,從C#1.0開始就有了,核心作用就是將方法作為參數(變數)來傳遞和使用。其中委托是基礎,需要熟練掌握,編程中常用的Lambda表達式、Action、Func都是委托,包括事件也是基於委托實現的。 ...
  • 自動生成欄位值,咱們首先想到的是主鍵列(帶 IDENTITY 的主鍵)。EF Core 預設的主鍵配置也是啟用 Identity 自增長的,而且可以自動標識主鍵。前提是代表主鍵的實體屬性名要符合以下規則: 1、名字叫 ID、id、或 Id,就是不分大小寫; 2、名字由實體類名 + Id 構成。比如, ...
  • 前言 這算是一篇學習記錄博客了,主要是學習語義內核(Semantic Kernel)的實踐,以及Aspire進行全棧開發的上手體驗,我是採用Aspire同時啟動API服務,Blazor前端服務以及WinUI的桌面端項目,同時進行三個項目的代碼修改,整體感覺很方便,如果代碼都修改了只需要啟動Aspir ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...