超簡單!asp.net core前後端分離項目使用gitlab-ci持續集成到IIS

来源:https://www.cnblogs.com/fanshaoO/archive/2019/12/17/12054985.html
-Advertisement-
Play Games

現在好多使用gitlab ci的持續集成的教程,大部分都是發佈到linux系統上的,但是目前還是有很大一部分企業使用的都是windows系統使用IIS在部署.NET應用程式。這裡寫一下如何使用gitlab ci配合gitlab runner持續集成到IIS吧。 安裝gitlab 網上有很多安裝git ...


現在好多使用gitlab-ci的持續集成的教程,大部分都是發佈到linux系統上的,但是目前還是有很大一部分企業使用的都是windows系統使用IIS在部署.NET應用程式。這裡寫一下如何使用gitlab-ci配合gitlab-runner持續集成到IIS吧。

安裝gitlab

網上有很多安裝gitlab的方法,這裡推薦使用docker安裝,真的超級超級方便。
這裡有一篇文章
docker安裝配置gitlab詳細過程
https://www.cnblogs.com/zuxing/articles/9329152.html
這裡就不細說了。畢竟重點不是說怎麼安裝gitlab哈哈哈。

配置windows伺服器環境

  1. windows配置IIS環境
  2. 需要在伺服器安裝Node,yarn,git,dotnet2.2-sdk,dotnet-hosting。所需安裝包如下圖所示(自己去找下載鏈接哈哈哈):

第一次需要手動使用git配置用戶密碼,否則無法拉取gitlab上的代碼。
單獨使用git clone命令,將代碼拉取下來。成功驗證完用戶許可權信息後可刪除文件。

在windows伺服器上安裝gitlab-runner

這裡說一下為什麼選gitlab-runner,不使用jenkins。(兩種方式我都嘗試過)
jenkins很強大很好,不需要自己安裝編譯環境,直接可以集成各種編譯環境。但是需要額外部署一個jenkins服務,和gitlab服務分開,需要gitlab的webhooks觸發事件。(沒有運維團隊一個人用的話覺得比較麻煩)
而gitlab-runner在windows環境把編譯環境安裝完,直接啟動一個服務,把gitlab-runner註冊到gitlab上即可。

在伺服器上安裝gitlab-runner
下載地址
https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-windows-amd64.exe

在伺服器中創建gitlab-runner目錄,將下載好的gitlab-runner.exe放入,打開CMD。執行安裝命令,gitlab-runner.exe install

其他操作系統安裝方式查看 https://docs.gitlab.com/runner/install/

註冊gitlab-runner到私有gitlab,執行命令gitlab-runner.exe register

打開http://gitlabserver/admin/runners 查看gitlab-runner註冊時所需的url以及註冊token。
./gitlab-runner.exe register

  • 第一步填入URL
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
http://gitlabserver/
  • 第二步填入token
Please enter the gitlab-ci token for this runner
xxx
  • 第三步填入runner描述
Please enter the gitlab-ci description for this runner
[hostname] my-runner
  • 第四步填入runner標簽
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tag
  • 第五步選擇runner執行環境
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
Shell

因為是直接部署到IIS,所以沒有選擇docker容器的方式。
這裡是windows伺服器所以使用powershell作為預設shell執行環境
啟動gitlab-runner
執行命令gitlab-runner.exe start即可啟動。

配置gitlab-ci.yml

使用gitlab-ci需要在項目跟路徑添加.gitlab-ci.yml文件,在文件中添加CI所需要的命令。
詳細的命令參數在此頁面可查看http://gitlabserver/help/ci/yaml/README
每一個最高級的名字分別表示一個任務。
before_script和after_script中的指令是在管道執行前後所運行的指令。
gitlab-ci中預設有三個管道,執行順序分別是build,test,deploy,同一個stage的任務是並行執行的。
這裡我們只需要配置執行的編譯發佈腳本即可,一步到位哈哈哈,當然也可以分幾個步驟,這裡我偷懶了哈哈哈
Script下表示需要執行的命令。Only表示限定哪個分支可以觸發。

超簡單!只要會寫powershell腳本即可

這裡配合IIS的話我們直接將編譯完的發佈文件拷貝到IIS的站點目錄下即可。
為了方便,將powershell腳本單獨編寫到build.ps1文件中,下麵針對52ABP前後端分離項目編寫如下powershell腳本。

# COMMON PATHS
$buildFolder = (Get-Item -Path "./" -Verbose).FullName
$slnFolder = Join-Path $buildFolder "src/aspnet-core"
$webHostFolder = Join-Path $slnFolder "src/Web.Host"
$ngFolder = Join-Path $buildFolder "src/angular"
Set-Location /
$rootFolder = (Get-Item -Path "./" -Verbose).FullName
$outputFolder = Join-Path $rootFolder "publish"
$endOutputFolder = Join-Path $outputFolder "Host"
$fontOutputFolder = (Join-Path $outputFolder "ng")

## RESTORE NUGET PACKAGES #####################################################
echo "開始還原後臺"
Set-Location $slnFolder
dotnet restore
echo "還原後臺結束"
## PUBLISH WEB HOST PROJECT ###################################################
echo "開始發佈後臺,發佈目錄為:"$endOutputFolder
Set-Location $webHostFolder
dotnet publish --output $endOutputFolder
echo "發佈後臺結束"
## PUBLISH ANGULAR UI PROJECT #################################################
echo "開始發佈前端,發佈目錄為:"$fontOutputFolder
Set-Location $ngFolder
& yarn
& yarn build
Remove-Item $fontOutputFolder -Force -Recurse -ErrorAction Ignore
Copy-Item (Join-Path $ngFolder "dist") $fontOutputFolder -Recurse
echo "發佈前端結束"

將.gitlab-ci.yml和build.ps1文件放入項目根目錄,提交文件。
Gitlab-CI識別到.gitlab.yml文件後會自動執行CI腳本。


大佬說這裡腳本寫的有點弱,菜雞水平沒辦法,powershell寫的牛逼的可以直接操作IIS的API哈哈哈,這裡我就不會了哈哈哈

配置IIS環境

Asp.net core發佈到IIS需要安裝Hosting Bundle,安裝後,在IIS上添加網站,配置好基本目錄信息後,修改應用程式池,選擇無托管代碼。

將asp.net core網站目錄指向發佈目錄即可自動運行。

IIS配置angular前端環境。
由於angular是單頁面前端項目,所以需要配置URL重寫,否則頁面刷新會出現404。
在IIS中安裝URL重寫功能,若沒有,可以通過Web平臺安裝程式安裝功能。

在angular項目的src目錄下添加web.config文件,添加如下內容。

然後在前端項目根路徑的angular.json文件中添加如下配置,將web.config配置成在發佈時複製過去。

在IIS添加網站配置好後,將發佈後的靜態文件複製到網站目錄即可。
這些複製的步驟直接可以通過powershell腳本自動化執行。

結果截圖

下圖就是我折騰過程中執行的截圖

That's all

看完是不是覺得好簡單的樣子哈哈哈,只需要安裝好相應的編譯環境,然後寫一下powershell腳本就行了,所以只要會寫powershell腳本,那其他都不是問題了是吧~~
覺得寫的不好的話,大佬們有意見歡迎評論吐槽~~~


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

-Advertisement-
Play Games
更多相關文章
  • property property是一種特殊的屬性,訪問它時會執行一段功能(函數)然後返回值;就是把一個函數屬性的訪問方式變成像訪問數據屬性的方式一樣。 我們首先來看一個對比效果 例一:在調用 bmi 函數的時候需要加括弧的,可是我們往往需要另一種調用方法——不想加括弧 class people() ...
  • 一 跨域 同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響。可以說Web是構建在同源策略基礎之上的,瀏覽器只是針對同源策略的一種實現。 同源策略,它是由Netscape提出的一個著名的安全策略。現在 ...
  • 在Web滲透流程的暴力登錄場景和爬蟲抓取場景中,經常會遇到一些登錄表單用DES之類的加密方式來加密參數,也就是說,你不搞定這些前端加密,你的編寫的腳本是不可能Login成功的。針對這個問題,現在有三種解決方式: ①看懂前端的加密流程,然後用腳本編寫這些方法(或者找開源的源碼),模擬這個加密的流程。缺 ...
  • 登錄系統(註意這裡啟動 tomcat 的用戶) 使用 MAT 分析 下載 dump.hprof ,使用 MAT 打開分析 ...
  • 通常系統都會限制同一個賬號的登錄人數,多人登錄要麼限制後者登錄,要麼踢出前者,Spring Security 提供了這樣的功能,本文講解一下在沒有使用Security的時候如何手動實現這個功能 demo 技術選型 SpringBoot JWT Filter Redis + Redisson JWT( ...
  • 一、概述通常來說,“行為請求者”與“行為實現者”是緊耦合的。但在某些場合,比如要對行為進行“記錄、撤銷/重做、事務”等處理,這種無法抵禦變化的緊耦合是不合適的。在這些情況下,將“行為請求者”與“行為實現者”解耦,實現二者之間的松耦合就至關重要。命令模式是解決這類問題的一個比較好的方法。二、命令模式命 ...
  • 環境:VS2019 .net 4.0 framework 根據教材使用ScriptManager在JavaScript中調用Web service 時,失敗。現將過程和解決方法記錄如下: 1、定義Web Service 2、定義JavaScript和.aspx頁面; 整個項目的目錄如下: 3、運行程 ...
  • 1、前言: WebAPI主要開放數據給手機APP,Pad,其他需要得知數據的系統,或者軟體應用。Web 用戶的身份驗證,及頁面操作許可權驗證是B/S系統的基礎功能。我上次寫的《Asp.Net MVC WebAPI的創建與前臺Jquery ajax後臺HttpClient調用詳解》這種跟明顯安全性不是那 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...