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

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

    

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

是特別麻煩。。。現現在你的項目須要在linux上部署,惋惜的是再也沒有什麼可視化的界面給你,全在xshell上操做,若是在xshell上部署個位數的項目你們或許還可linux

以接受,若是要部署10+以上的服務呢,估計不少人在xshell上敲的頭都大了。。。這就是爲何docker會有dockerfile,會有容器編排的docker-compose,因此找git

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

 

一: Jenkins部署shell

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

1. 導入jenkins的keywindows

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,看到下面的界面就算成功了。svn

  

  而後你們就能夠按照步驟一步一步下去就能夠了。

 

二:構建你的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 ,接下來的步驟也就是 「提交代碼」 -> 「可視化當即編譯」  ->  "查看結果" 這樣的流水線做業而已啦。。。。

 

 

好了,本篇就說到這裏,但願對你有幫助。

相關文章
相關標籤/搜索