netcore編程之後面對不習慣的xshell黑屏部署,是時候使用jenkins自動化發佈工具了

来源:https://www.cnblogs.com/huangxincheng/archive/2018/09/08/9608410.html
-Advertisement-
Play Games

在很久之前net還只能在windows上部署的時候,或許很多創業公司的朋友發佈項目還都是人肉部署,反正windows都是可視化的界面,拖拖拉拉,開開關關還不 是特別麻煩。。。現如今你的項目需要在linux上部署,可惜的是再也沒有什麼可視化的界面給你,全在xshell上操作,如果在xshell上部署個 ...


    

   在很久之前net還只能在windows上部署的時候,或許很多創業公司的朋友發佈項目還都是人肉部署,反正windows都是可視化的界面,拖拖拉拉,開開關關還不

是特別麻煩。。。現如今你的項目需要在linux上部署,可惜的是再也沒有什麼可視化的界面給你,全在xshell上操作,如果在xshell上部署個位數的項目大家或許還可

以接受,如果要部署10+以上的服務呢,估計很多人在xshell上敲的頭都大了。。。這就是為什麼docker會有dockerfile,會有容器編排的docker-compose,所以找

一款自動化發佈工具迫在眉睫了。

 

一: Jenkins部署

  它的官方網址是:https://jenkins.io/download/  ,使用docker模式部署的話太簡單了,本篇就不用Docker部署,而是直接部署到宿主機Centos上,如下圖:

1. 導入jenkins的key

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

 

2. 使用yum安裝

yum install jenkins

 

3. 啟動jenkins

[root@localhost ~]# service jenkins start
Starting jenkins (via systemctl):                          [  OK  ]

 

4. 然後在瀏覽器中輸入你的虛擬機IP:  http://192.168.23.173:8080,看到下麵的界面就算成功了。

  

  然後大家就可以按照步驟一步一步下去就可以了。

 

二:構建你的netcore程式

  先提供一個簡單的test程式,供後續做自動化部署只用。

 

  static void Main(string[] args)
        {
            var bgtask = Task.Run(() =>
            {
                for (int i = 0; i < 1000; i++)
                {
                    Log.Info($"i={i}");

                    Thread.Sleep(1000);
                }
            });

            AppDomain.CurrentDomain.ProcessExit += (s, e) =>
            {
                Log.Info($"{DateTime.Now} 恭喜,TestService服務程式已準備退出!");
                Environment.Exit(0);
            };

            bgtask.Wait();
        }

 

三:jenkins配置

1.  點擊新建任務

 

2. 選擇構建一個自由風格的軟體項目,然後點擊確定

 

3.   這裡的“源碼管理”tab頁是非常重要的,預設支持git和svn,這裡就選擇svn了,把你生成svn的地址貼上去,因為後續

      執行shell腳本的時候,會在jenkins的workspace文件夾中執行dotnet publish 的。

 

4. 在“構建” tab頁中,最最重要的就是裡面的shell腳本。

ps -ef | grep MemSql.Test.dll | grep -v grep | awk '{print $2}' | xargs --no-run-if-empty kill
cd ./MemSql.Test
mkdir -p /data/output/MemSql.Test/v${BUILD_NUMBER}
dotnet publish -o /data/output/MemSql.Test/v${BUILD_NUMBER} -c Release
cd /data/output/MemSql.Test/v${BUILD_NUMBER}
BUILD_ID=dontKillMe nohup dotnet MemSql.Test.dll &

 

   這裡要關心的幾處是:

   《1》 在kill pid的時候,如果pid不存在,你的預設腳本會報pid不存在的錯誤的,所以加上 --no-run-if-empty  的if判斷,沒有就

             不執行kill。

   《2》 使用了一個Jenkins的一個環境變數 {BUILD_NUMBER} , 也就是下圖中的這個位置,用這個編譯版本號作為文件夾。

 

  《3》 因為我是用nohup生成後臺進程的,所以要使用dotKillMe命令讓jenkins不要在生成完後kill 它。

 

然後點擊保存,這個Test項目的自動化部署就搞定了。。。

 

四:操作流程

       在操作之前,一定要記得讓 jenkins用戶提升一下許可權,否則你的 copy,mkdir可能許可權不足,這裡我就提升成root許可權。

 

1: 把jenkins用戶加入到root組中。

gpasswd -a root jenkins

 

2:修改/etc/sysconfig/jenkins文件, 把原來的 users= jenkins 改成root。

# Unix user account that runs the Jenkins daemon
# Be careful when you change this, as you need to update
# permissions of $JENKINS_HOME and /var/log/jenkins.
#
JENKINS_USER="root"
JENKINS_GROUP="root"

 

3:重啟Jenkins即可

service Jenkins restart

 

4. 然後你的步驟為:

   《1》 在svn中提交代碼。

  《2》 找到你的所屬項目,點擊“立即構建”。

  

 

    當然也可以讓jenkins自動化構建,但是考慮到生成項目,最好還是加上手工發佈這個按鈕,安全可靠, 構建完之後,大家可以看看 jenkins的 “控制台輸出”。

 

然後你可以通過ftp去生產看一下,果然都跑起來了,v21就是我的編譯版本號,而且你的日誌果然就是我的業務邏輯輸出,對吧,如下圖:

 

 

這時候,你覺得代碼有問題,需要修改一下,把i 改成 m ,接下來的步驟也就是 “提交代碼” -> “可視化立即編譯”  ->  "查看結果" 這樣的流水線作業而已啦。。。。

 

 

好了,本篇就說到這裡,希望對你有幫助。

 


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

-Advertisement-
Play Games
更多相關文章
  • eclipse安裝hibernate tools 下載地址: https://tools.jboss.org/downloads/jbosstools/photon/4.6.0.Final.html 線上安裝 離線安裝 新建java project後加入對應jar包 新建hibernate.cfg. ...
  • 作者作為一個蒟蒻,也是最近才自學了線段樹,不對的地方歡迎大佬們評論,但是不要噴謝謝 好啦,我們就開始說說線段樹吧 線段樹是個支持區間操作和查詢的東東,平時的話還是蠻實用的 下麵以最基本的區間加以及查詢區間和為例 線段樹顧名思義就是棵樹嘛,葉子節點是每個基本點,它們所對應的父親就是它們的和,具體如下圖 ...
  • 題目:消重輸出 題目介紹: 輸入一個正整數,給出消除重覆數字以後最大的整數,註意需要考慮長整數。 例: 輸入:988274320 輸出:9874320 題目分析:這個結果的實現需要兩個步驟:消重和排序。第一步,消重。先用string 和char 將數字分別儲存進char 數組,然後從左邊第一個字元開 ...
  • 想做自己的微博自媒體,微博大v,剛開始我們肯定要有粉絲才可以,但是我們上哪裡去找粉絲那?花錢買,都是僵屍粉,也就是湊湊數而已,所以我們需要加入互粉群,一個群大概1000人,我們每天關註的人上限大概500個,我們總不能一個一個點進去關註吧,好累的,所以我要批量關註,市面上很多批量關註的軟體不太敢用還是 ...
  • 1、網路三要素及傳輸協議 2、實現UDP協議的發送端和接收端 3、實現TCP協議的客戶端和伺服器 4、TCP上傳文件案例 ...
  • “大菜”:源於自己剛踏入猿途混沌時起,自我感覺不是一般的菜,因而得名“大菜”,於自身共勉。 擴展閱讀: "深入理解值類型和引用類型" 基本概念 string(嚴格來說應該是System.String) 類型是我們日常coding中用的最多的類型之一。那什麼是String呢?^ ~ ^ String是 ...
  • 封裝概念 C#是面向對象的一門語言,面向對象的語言有三大特性:封裝、繼承、多態。而封裝可以實現一個自定義的類,從而定義新的對象 封裝是將一個或多個項目集合在一個單元中,這個單元稱之為類。這樣可以防止對實現細節的訪問 C#封裝可以根據需要通過修飾符實現類成員的範圍和可見性。訪問修飾符有: public ...
  • for迴圈 格式: for(表達式1;迴圈條件;表達式2) { 迴圈體; } 解釋:先執行表達式1,再判斷迴圈條件是否為真,如果為真則執行迴圈體,執行完成後再執行表達式2 再次判斷迴圈條件,由此一直反覆迴圈,直到迴圈條件為假,退出迴圈 表達式1只在迴圈開始的時候執行一次 示例 結果 foreach ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...