主頁 > 軟體工程 > 從零開始針對 .NET 應用的 DevOps 運營實踐 - 運行環境搭建

從零開始針對 .NET 應用的 DevOps 運營實踐 - 運行環境搭建

2020-10-10 14:20:43 軟體工程

一、Overview

最近的一段時間,在公司里我都在進行基于 Jenkins 和 SonarQube 配合已有的 Gitlab 搭建部門的持續集成環境的作業,雖然之前有使用過 GitHub Actions 和 Azure DevOps,但是從頭開始搭建這樣的一套 DevOps 環境還是學習到了一些新的知識點,因此,借著這個中秋國慶假期的機會,分享下整個工具鏈的搭建程序,如果你也有相似的需求的話,希望可以對你有所幫助

二、Contents

  1. 從零開始針對 .NET 應用的 DevOps 運營實踐 - 運行環境搭建

三、Step by Step

3.1、一些概念

DevOps, Development 和 Operations,從名稱上就可以看出,這一名詞包含了軟體的開發與運營,當然,這里提到的 DevOps 是一種方法論,更多的是為了打破開發與運營人員之間的壁壘,用來促進開發人員、運營人員以及 QA 人員之間的溝通與協作,通過引入 DevOps 中使用的各種工具,我們可以通過自動化的方式,完成軟體系統的構建、測驗、發布,從而降低因人工操作所造成的不確定性,提升軟體的交付速度、系統質量

在踐行 DevOps 方法論時,經常會提到三個概念,持續集成、持續交付、持續部署,這里借由 Redhat 上介紹相關概念的一張圖片來說明三者之間的聯系

ci cd workflow

  • 持續集成(Continuous Integration):在傳統的軟體開發程序中,將個人開發的代碼與整個專案代碼的合并一般都會置于比較靠后的階段,而持續集成強調的是開發人員提交了新代碼之后,立刻進行構建、單元測驗,根據測驗的結果,確定新代碼和原有代碼能否正確地集成在一起
  • 持續交付(Continuous Delivery):持續交付是一種自動化的軟體交付手段,在持續集成的基礎上,代碼庫中的代碼已經做好了部署到正式環境的準備,在目前的通用做法中,將構建之后的代碼通過持續交付變更部署到測驗環境、預發布環境中,實作對持續集成的擴展,出于業務方面的考慮,我們可以手動選擇是否部署到正式環境
  • 持續部署(Continuous Deployment):作為對持續交付的延伸,持續部署能夠自動的將最終的代碼部署到生產環境中,完成整個的 CI/CD 流程

雖然目前的需求僅僅是為了實作持續集成,完成對于系統的自動化代碼檢查、自動化單元測驗,但是因為后續的功能對于我們完整的實施 DevOps 方法論也是必須的,所以在這幾篇的博客內容中,我也會完成對于后續功能的實踐分享

3.2、前期調研

與持續集成的場景存在一些的差異,我們在實際的開發中,并不會在新的功能分支上按照每個開發人員再建立單獨的分支,因此,這里的持續集成更多的想要實作的是當開發人員提交代碼到 Gitlab 時,自動觸發代碼檢查以及單元測驗,產出代碼檢查報告、單元測驗報告、以及整個專案的測驗覆寫率

因此,基于目前的需求,整個系統主要依賴于三個主要的軟體系統,Gitlab、Jenkins、以及 SonarQube,當然,這里缺少了一個 bug 管理工具,因為我們部門人數不是很多,目前是和別的部門共用的 Redmine 進行的專案管理,所以本次并沒有納入到我們的需求范圍內,當然, bug 管理也是推行 DevOps 中不可缺少的一部分

在挑選組件時,本著不給自己和別人挖坑的原則,優先考慮使用人數多的軟體系統,因此,作為事實上的開源 CI/CD 工具的標準,毫無疑問選擇 Jenkins,而對于代碼的自動化檢查,結合我們需要實作私有化部署,滿足對多種開發語言的支持、能夠與 CI/CD 工具進行有效結合的需求,這里最終選擇的是 SonarQube

由于歷史原因,部門系統的框架版本橫跨了 VB.NET、.NET Framework 2.x,4.x 與 .NET Core,.NET 框架的程式涵蓋了 Web Form、MVC、Web API,排除掉已經不維護的系統,最終需求的范圍限定在支持 .NET Framework 4.x+ 以及 .NET Core 程式上,因此,這里只能選擇將 Jenkins 和 SonarQube 部署到 Windows 服務器上,如果你不需要兼容 .NET Framework 的程式,推薦你部署到 Linux 服務器上

在選定好使用的軟體后,就需要完成環境的配置,Jenkins 與 SonarQube 都是基于 Java 的軟體,因此在安裝軟體之前,需要我們在服務器上完成 Java 環境的配置,同時,基于我們的系統現狀,需要在服務器上安裝好 .NET Framework、.NET Core、Git 以及 Node

對于 Git、Node、.NET SDK 的安裝,下載安裝包后,一直 next 即可,加上這里主要針對的是 .NET 程式員,以及我們的服務器是斷網的,所以這里主要列舉的是兩個相對來說稍微復雜的環境配置,一個是對于 MSBuild 工具的離線下載,另一個則是 Java 環境的配置

3.3、MSBuild 安裝

因為在整個程序中會涉及到對應用程式的編譯生成,對于 .NET Core 應用,完全可以采用 .NET Core CLI 中的各種命令來實作,而對于 .NET Framework 程式來說,則需要一個執行應用程式生產的平臺,MSBuild 就是這樣的一個工具,我們在開發程序中使用 Visual Studio 進行程式編譯時,其實也是會借用 MSBuild 來進行的

因此,最簡單的辦法,就是在服務器上安裝 VS 即可,當然,這個過于簡單粗暴了,以及在服務器上安裝我們開發使用的 IDE 也過于浪費,所以這里還是會選擇獨立的安裝 MSBuild

與 VS 相似,MSBuild 也有不同的版本,為了避免一些莫名其妙的問題,在 MSBuild 的版本選擇上,最好選擇與你們開發時用的 VS 匹配的版本,因為我們在開發中會使用到了 VS 2017 和 VS 2019 這兩個版本,所以這里我會安裝兩個 MSBuild 到服務器上

對于 MSBuild,之前很多文章中說可以直接把你本地電腦中的 VS 所包含的 MSBuild,丟到服務器上就可以了,經過我的多次嘗試,在踩坑的路上越走越遠,這里還是建議你通過 Visual Studio Build Tools 進行安裝

在 VS 的下載頁面,這里是以 VS 2019 的下載頁面進行示例,在 Visual Studio 2019 工具這個內容塊中,找到生成工具這個下載項,下載即可

Visual Studio Build Tools

這里你可以直接通過我給出的這兩個地址,直接下載對應的生成工具,打開軟體,找到 MSBuild 這個組件進行安裝即可

  • Visual Studio 2017 Build Tools:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15
  • Visual Studio 2019 Build Tools:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16

當然,這個下載完成的也只是一個在線安裝包,還是需要連接網路進行下載的,如果你們的服務器也是沒有連接外網權限的話,這里需要換個方式

對于離線安裝,找到下載后的安裝器所在的路徑,打開 CMD,輸入下面的命令,即可按需下載需要的組件到指定的位置,例如這里我是將下載好的檔案放在我桌面上的 msbuild 檔案夾下的 offline 檔案夾中

vs_buildtools.exe --layout C:\Users\danvi\Desktop\msbuild\offline --add Microsoft.VisualStudio.Workload.MSBuildTools --add Microsoft.VisualStudio.Workload.WebBuildTools --lang zh-CN

整個命令包含了三個部分的內容

  • --layout:指定離線安裝檔案所在的路徑
  • --add:指定需要下載的組件,因為我們的系統是 Web 專案,為了防止在 MSBuild 中生成出錯,所以這里除了 MSBuild 還需要下載了一個 WebBuildTools
  • --lang:指定安裝包的語言

離線下載安裝包

同新版本的 VS 的安裝一樣,當我們輸入命令之后,會打開如下的頁面,等待安裝器的下載完成即可

下載安裝器

當下載器安裝完成后,會自動彈出一個新的控制臺頁面,坐和放寬,此時已經開始自動下載我們需要的組件,當全部組件下載完成時,按照提示的內容關閉彈出的頁面即可

組件安裝完成

找到你所指定的下載路徑,將整個檔案夾拷貝到服務器上,然后點擊 vs_buildtools.exe 進行安裝,具體安裝的組件則可以通過右側的安裝詳細資訊進行查看,如果你在使用中發現缺少你需要的,按照上面的方法添加新的引數即可

安裝 MSBuild

3.4、Java 環境配置

因為 Jenkins 與 SonarQube 均是 Java 程式,并且 SonarQube 對 Java SDK 的版本有具體的要求,這里我選擇的是 OpenJDK 11,你可以從此處(https://jdk.java.net/archive/) 獲取到 OpenJDK 的各個發行版本

下載 Java SDK

與 .NET SDK 不同,在習慣了一路 next 就可以安裝各種的操作后,在安裝 OpenJDK 時,需要手動的將 SDK 的路徑以及相關的環境變數添加到作業系統中

解壓下載完成的壓縮包到指定的路徑,例如這里我的路徑是 E:\sdk\jdk-11.0.2,此時我們需要對環境變數進行配置,從而確保 Java 環境的正確安裝

右擊我的電腦,選擇屬性,打開系統資訊頁面,點擊右側的高級系統設定,打開系統屬性彈窗,當然,你也可以通過 Windows 10 的搜索直接搜索環境變數關鍵字找到這個頁面

環境變數設定

點擊環境變數按鈕,在系統變數的類別下,我們執行如下的三步操作

  • 新建系統環境變數 JAVA_HOME,變數值為解壓后的 OpenJDK 所在的路徑,例如我這里配置的 E:\sdk\jdk-11.0.2

    新建 JAVA_HOME 變數

  • 新建系統環境變數值 CLASS_PATH,具體對應的值為 %Java_Home%\lib;

    新建 CLASS_PATH 環境變數

  • 修改已經存在的 PATH 變數,將 %JAVA_HOME%\bin 添加到環境變數中

    修改 PATH 變數

至此,針對 Java 的環境配置已經完成,此時為了避免一些奇怪的錯誤,建議你重啟下電腦,在重啟之后,可以通過 java --version 命令來查看是否已經配置成功,如果如下圖一樣可以顯示出 Java 的版本資訊,則代表 Java 環境已經配置成功

Java 版本資訊

3.5、總結

自此,目前使用到的軟體所需的環境就已經安裝配置完成了,在下一篇中就可以安裝我們主要使用到的兩個軟體 Jenkins 和 SonarQube,從而配合我們已經存在的 Gitlab,構建自己的 CI/CD 服務

四、References

  • 在攜程,我們如何實踐 DevOps
  • The Product Managers’ Guide to Continuous Delivery and DevOps
  • CI/CD是什么?如何理解持續集成、持續交付和持續部署

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/166205.html

標籤:其他

上一篇:從零開始針對 .NET 應用的 DevOps 運營實踐 - 運行環境搭建

下一篇:軟體工程之軟體工程介紹

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more