10分鐘實現dotnet程序在linux下的持續部署

背景

一直以來,程序署都是非常麻煩且無聊的事情,在公司一般都會有 devops 方案,整個 cicd 過程涉及的工具還是挺多的,搭建起來比較麻煩。那么對于一些自己的小型項目,又不想搭建一套這樣的環境,怎么辦呢。。。前段時間嘗試了一下 阿里云效 pipeline + gitee + ecs ,還是挺方便的,主要是免費^ ^,服務器也可以用自建的或者其他的,下面就分享一下如何使用

代碼準備

隨便準備個demo項目,并提交到 gitee

##?創建aspnetcore?web項目
dotnet?new?web?-o?aspnetcoredemo
e30eed7344cda51356dfe90fd8d6bf7a.png

服務器環境

首先去服務器安裝下 dotnet 運行時,我這里是用centos。

參考官方文檔 在 CentOS 上安裝 .NET - .NET | Microsoft Docs[1]

##?安裝 .NET 之前,請運行以下命令,將 Microsoft 包簽名密鑰添加到受信任密鑰列表,并添加 Microsoft 包存儲庫。?打開終端并運行以下命令:
sudo?rpm?-Uvh?https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm##?通過 ASP.NET Core 運行時,可以運行使用 .NET 開發且未提供運行時的應用。?以下命令將安裝 ASP.NET Core 運行時,這是與 .NET 最兼容的運行時。?在終端中,運行以下命令:
sudo?yum?install?aspnetcore-runtime-6.0

安裝完成:

c9901f531f88dda980c37afe95fd7f95.png

自動部署

進入云效平臺流水線

e093bf44345b79b7ce596a5e5c54056b.png

選擇 .NET Core 流水線模板,創建

1de7c77c0e03912ffefe1a32ade1ef23.png

配置流水線

第一步是配置流水線源

選擇代碼源:碼云(當然你也可以選別的,github,自建git之類的)

授權一下,然后選擇你的代碼倉庫,默認分支名。下面的工作目錄隨便寫一個,比如:demo

7dab4ce4790bfb2b847c52229f443dfb.png

第二步配置構建

b6635548b2e03dd9a2e9076ec0f5bb27.png602267e2b30537f6aee8a510a4cdc6e0.png

主要是執行命令,和打包路徑 注意下,其他的選項默認就行

##?cd到項目目錄
cd?aspnetcoredemo##?還原項目
dotnet?restore
##?發布項目
dotnet?publish?-c?Release?-o?out

第三步配置部署

主機組我這里選 阿里云 ecs (你也可以選其他非阿里云的主機,要裝插件)

b39368ad35d3ef1e25a891f1bba2d0a4.png

添加服務器連接,授權創建即可

c95af1258f33261388eb8c8426fc26cf.png

選擇主機,下一步,保存(我這里就一臺機器,也可以多臺機器部署)

e951abb8c301553481b615cbb3173a3f.png

部署腳本:

49dd893760dda8aa9392b91c3fe63422.png
##?創建目錄
mkdir?-p?/home/admin/aspnetcoredemo/##?解壓文件到?/home/admin/aspnetcoredemo/?目錄
tar?zxvf?/home/admin/aspnetcoredemo/package.tgz?-C?/home/admin/aspnetcoredemo/##?執行部署腳本
sh?/home/admin/aspnetcoredemo/deploy.sh?restart

部署腳本

這個 deploy.sh 加到項目代碼中,這個腳本的大概內容就是 殺死進程->重新啟動程序->健康檢查->部署完成

內容如下:

#!/bin/bash#?修改APP_NAME為云效上的應用名
APP_NAME=aspnetcoredemoPROG_NAME=$0
ACTION=$1
APP_START_TIMEOUT=20????#?等待應用啟動的時間
APP_PORT=5000??????????#?應用端口
HEALTH_CHECK_URL=http://127.0.0.1:${APP_PORT}/HealthChecks??#?應用健康檢查URL
HEALTH_CHECK_FILE_DIR=/home/admin/status???#?腳本會在這個目錄下生成nginx-status文件
APP_HOME=/home/admin/${APP_NAME}?#?從package.tgz中解壓出來的dll放到這個目錄下
DLL_NAME=${APP_HOME}/${APP_NAME}.dll?#?dll的名字
DLL_OUT=${APP_HOME}/logs/start.log??#應用的啟動日志#?創建出相關目錄
mkdir?-p?${HEALTH_CHECK_FILE_DIR}
mkdir?-p?${APP_HOME}
mkdir?-p?${APP_HOME}/logs
usage()?{echo?"Usage:?$PROG_NAME?{start|stop|restart}"exit?2
}health_check()?{exptime=0echo?"checking?${HEALTH_CHECK_URL}"while?truedostatus_code=`/usr/bin/curl?-L?-o?/dev/null?--connect-timeout?5?-s?-w?%{http_code}??${HEALTH_CHECK_URL}`if?[?"$?"?!=?"0"?];?thenecho?-n?-e?"\rapplication?not?started"elseecho?"code?is?$status_code"if?[?"$status_code"?==?"200"?];thenbreakfifisleep?1((exptime++))echo?-e?"\rWait?app?to?pass?health?check:?$exptime..."if?[?$exptime?-gt?${APP_START_TIMEOUT}?];?thenecho?'app?start?failed'exit?1fidoneecho?"check?${HEALTH_CHECK_URL}?success"
}
start_application()?{echo?"starting?dotnet?process"#?chmod?+x?${DLL_NAME}#?chmod?+x?${APP_HOME}/appsettings.json#?nohup?dotnet?${DLL_NAME}?Urls=http://*:${APP_PORT}?>?${DLL_OUT}?2>&1?&cd?${APP_HOME}nohup?dotnet?${APP_NAME}.dll?Urls=http://*:${APP_PORT}?>?${DLL_OUT}?2>&1?&echo?"started?dotnet?process"
}stop_application()?{checkdotnetpid=`ps?-ef?|?grep?dotnet?|?grep?${APP_NAME}?|?grep?-v?grep?|grep?-v?'deploy.sh'|?awk?'{print$2}'`if?[[?!?$checkdotnetpid?]];thenecho?-e?"\rno?dotnet?process"returnfiecho?"stop?dotnet?process"times=60for?e?in?$(seq?60)dosleep?1COSTTIME=$(($times?-?$e?))checkdotnetpid=`ps?-ef?|?grep?dotnet?|?grep?${APP_NAME}?|?grep?-v?grep?|grep?-v?'deploy.sh'|?awk?'{print$2}'`if?[[?$checkdotnetpid?]];thenkill?-9?$checkdotnetpidecho?-e??"\r????????--?stopping?dotnet?lasts?`expr?$COSTTIME`?seconds."elseecho?-e?"\rdotnet?process?has?exited"break;fidoneecho?""
}
start()?{start_applicationhealth_check
}
stop()?{stop_application
}
case?"$ACTION"?instart)start;;stop)stop;;restart)stopstart;;*)usage;;
esac
b000a315ecf3b33e0eb53162391623e9.png

記得復制到輸出目錄:

ea37eae1c8e9fa20e6ff426ea4866bf3.png

增加一個 HealthChecks 接口用于部署腳本的健康檢查:

7429a7137637ade84764f69232f979e6.png

手動構建

流水線 點擊運行,如果前面配置沒有問題的話,可以看到構建部署成功。

749b1677a544f3348f37246de7ce6a16.png

訪問一下,ok:

f3f0c60a621b841c7de18e82018dfede.png

自動構建

下面通過 webhook 配置,實現提交代碼,自動構建部署

流水線,選擇觸發配置,打開 webhook 觸發:

e7767c57365fa9c251d9662ae4ea600e.png

將這個 webhook 地址復制,配置到你的 gitee 倉庫中,保存:

e3a19749fb12d84b7ce394ced2865113.png

接下來隨便修改下代碼,測試下:

94053942914df26fbefdddce92166d32.png

提交代碼后自動觸發了流水線構建部署:

d2dd09680abb552bd71f4010baf30fc0.png

ok:

dc4f68dae7370191e8775b45a484635f.png

結束

Happy coding ...

參考資料

[1]

在 CentOS 上安裝 .NET - .NET | Microsoft Docs: https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-centos

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285322.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285322.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285322.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言試題131之將一個數組逆序輸出。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:將一個數組逆序輸出。 分析:…

【錯誤異常大全】:無法加載 DLL“ArcGISVersion.dll”: 找不到指定的模塊。 (異常來自 HRESULT:0x8007007E)。

文章目錄 錯誤異常解決方案錯誤異常 無法加載 DLL“ArcGISVersion.dll”: 找不到指定的模塊。 (異常來自 HRESULT:0x8007007E)。 解決方案 將目標平臺改為x86,具體步驟如下: 點擊【配置管理器】。 下拉活動解決方案平臺,點擊【新建】。 選擇x86,點擊【確定】。

Go語言之反射

和Java語言一樣,Go也實現運行時反射,這為我們提供一種可以在運行時操作任意類型對象的能力。比如我們可以查看一個接口變量的具體類型,看看一個結構體有多少字段,如何修改某個字段的值等。TypeOf和ValueOf在Go的反射定義中&#x…

博客即簡歷

本文轉載自:http://www.cnblogs.com/stoneniqiu/p/5271248.html。 我個人也是在一直堅持寫博客,每月至少一篇,并慢慢地將其變成了自己的習慣。一些想法與本文不謀而合,所以決定轉載此文。 --------------------------------------…

C語言試題132之取一個整數 a 從右端開始的 4~7 位。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:取一個整數 a 從右端開始的 …

【錯誤異常大全】:ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS

文章目錄 問題描述解決方法問題描述 ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS components. 解決方法 打開program.cs,把ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop); 放到Application…

統一建模語言 UML

目錄 統一建模語言 UMLUML定義了5類10種模型圖一用例圖用于建立需求模型二靜態圖主要描述系統的靜態表示和關系包括類圖包圖對象圖三行為圖描述系統動態模型和對象組成的交換關系包括狀態圖和活動圖四交互圖用于描述對象間的交互關系由一組對象和它們之間的關系組成包含它們之間…

[轉]npm生成的package.json文件中依賴項版本號前的波浪號(~)和插入符號(^)是啥意思?

package.json一般也就長這么模樣: {"name": "","description": "","version": "4.17.1","author": "","contributors": [],"license": "MIT",&quo…

使用 C# 提取 PDF 文件中的所有文字(支持 .NET Core)

PDF 是 Portable Document Format 的簡稱,意為“可攜帶文檔格式”,是由 Adobe Systems 用于與應用程序、操作系統、硬件無關的方式進行文件交換所發展出的文件格式。PDF 文件以 PostScript 語言圖象模型為基礎,無論在哪種打印機上都可保證精確…

【錯誤異常大全】:正嘗試在 OS 加載程序鎖內執行托管代碼。不要嘗試在 DllMain 或映像初始化函數內運行托管代碼,這樣做會導致應用程序掛起。

文章目錄 錯誤異常:解決方案一:解決方案二:錯誤異常: 正嘗試在 OS 加載程序鎖內執行托管代碼。不要嘗試在 DllMain 或映像初始化函數內運行托管代碼,這樣做會導致應用程序掛起。 解決方案一: 1、把VS菜單的 調試->異常->Managed Debuggin Assistants->LoaderLo…

Linux——JDK的部署

1.檢查一下系統中的jdk版本[java] view plaincopy $>java -version java version "1.7.0_"OpenJDK Runtime Environment (IcedTea6 1.11.1) (rhel-1.45.1.11.1.el6-x86_64)OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)2.檢測JDK安裝包[java] view pla…

python字符串格式化方法 format函數的使用

python從2.6開始支持format,新的更加容易讀懂的字符串格式化方法,從原來的% 模式變成新的可讀性更強的花括號聲明{}、用于渲染前的參數引用聲明, 花括號里可以用數字代表引用參數的序號, 或者 變量名直接引用。從format參數引入的…

C語言試題133之畫圓形

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:畫圓形 2 、溫馨提示 想獲取…

ReactDom.render和React.render的區別

這個是react最新版api,也就是0.14版本做出的改變。主要是為了使React能在更多的不同環境下更快、更容易構建。于是把react分成了react和react-dom兩個部分。這樣就為web版的react和移動端的React Native共享組件鋪平了道路。也就是說我們可以跨平臺使用相同的react組…

[轉]阿里編程規范(精簡版)

文章目錄 1、簡介2、命名:3、格式規約4、注釋規約5、OOP規約6、集合處理7、控制語句8、異常9、日志10、單元測試11、工程規約1、簡介 統一規范標準將有助于提高行業編碼規范化水平,幫助行業人員提高開發質量和效率、大大降低代碼維護成本 2017年年初,首次…

C#(Sharp)GDI plus與圖形編程(計算機圖形學必備知識)

文章目錄 9.1 GDI+與圖形編程9.1.0 GDI概念9.1.1 GDI+繪圖命名空間9.1.2 坐標系統9.1.3 Graphics類9.2 繪圖工具類9.2.1 Pen類9.2.2 常用圖形的繪制方法9.2.3 Brush 類9.3 繪制相關圖形9.3.1 繪制曲線9.1 GDI+與圖形編程 9.1.0 GDI概念 GDI是Graphics Device Interface的縮寫…

.Net之延遲隊列

介紹具有隊列的特性,再給它附加一個延遲消費隊列消息的功能,也就是說可以指定隊列中的消息在哪個時間點被消費。使用場景延遲隊列在項目中的應用還是比較多的,尤其像電商類平臺:訂單成功后,在30分鐘內沒有支付&#xf…

C語言試題134之畫直線

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:用 line 畫直線 2 、溫馨提示…

KeyMob應用開發者服務平臺幫助開發者推廣和盈利

為什么80%的碼農都做不了架構師?>>> 2014年10月,新版KeyMob移動廣告聚合平臺正式上線,登入KeyMob移動廣告聚合平臺即可看到聚合功能,目前新KeyMob整合了國內外多家主流的廣告平臺,實實在在的為應用開發者賺…

Android GIS開發系列-- 入門季(13)Gdal簡單寫個shp文件

Gdal是用來讀寫柵格與矢量數據的,在Gdal官網,可以下載相關的資源進行平臺的編譯。其實Arcgis底層也是用Gdal來讀取shp文件的,那在Android中可以直接讀寫shp文件嗎,是可以的。這里已經有人編譯了Android端的so ,下載地址…