日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

半天搭建你的Jenkins持续集成与自动化部署系统

發(fā)布時(shí)間:2023/12/4 windows 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 半天搭建你的Jenkins持续集成与自动化部署系统 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

????相信每一位程序員都經(jīng)歷過深夜加班上線的痛苦!而作為一個(gè)加班上線如家常便飯的碼農(nóng),更是深感其痛。由于我們所做的系統(tǒng)業(yè)務(wù)復(fù)雜,系統(tǒng)龐大,設(shè)計(jì)到多個(gè)系統(tǒng)之間的合作,而核心系統(tǒng)更是采用分布式系統(tǒng)架構(gòu),由于當(dāng)時(shí)對(duì)系統(tǒng)劃分的不合理等等原因?qū)е旅看伟l(fā)版都會(huì)設(shè)計(jì)到多個(gè)系統(tǒng)的發(fā)布,小的版本三五個(gè),大的版本十幾個(gè)甚至幾十個(gè)系統(tǒng)的同時(shí)發(fā)布!而我們也沒有相應(yīng)的基礎(chǔ)設(shè)施的支撐,發(fā)版方式更是最傳統(tǒng)的,開發(fā)人員將發(fā)布包發(fā)給運(yùn)維人員,由其講各個(gè)發(fā)布包一個(gè)一個(gè)覆蓋到生產(chǎn)環(huán)境。因此每次上線僅僅發(fā)版就需要2-3個(gè)小時(shí)。這種方式不僅僅耗時(shí)、耗力,更是由于人工操作經(jīng)常導(dǎo)致一些丟、落的現(xiàn)象。而我們當(dāng)時(shí)的測(cè)試也是采用純手工的測(cè)試,發(fā)版完畢后一輪回歸測(cè)試就需要3-4個(gè)小時(shí)(當(dāng)時(shí)主要是手工測(cè)試)。之前也一直提倡持續(xù)集成、自動(dòng)化的測(cè)試和運(yùn)維,但遲遲沒有推進(jìn)落地。終于在一個(gè)加班到凌晨四點(diǎn)的夜晚后,我再也受不了。回家后躺在床上遲遲睡不著,心想這個(gè)自動(dòng)化的發(fā)布能有多難,他們搞不了,老子自己搞,于是6點(diǎn)爬起來來到公司,正式開始了我的持續(xù)集成、自動(dòng)化部署的研究與推進(jìn)之路。

一、初識(shí)Jenkins

????由于之前亦沒有相關(guān)知識(shí)的積累,因此也是對(duì)如何實(shí)現(xiàn)也是一頭霧水。于是只能找度娘,關(guān)鍵字"自動(dòng)化發(fā)布"。搜索到很多工具和方法,但都是以Java平臺(tái)居多,.net平臺(tái)相關(guān)資料不多。其中以Jenkins介紹較多,微軟也提供一套自動(dòng)化部署的方式,也有一些其他持續(xù)集成工具可以實(shí)現(xiàn)自動(dòng)化的發(fā)布,但最終還是選擇了Jenkins。主要有以下幾個(gè)原因:

  • 代碼開源、插件豐富完善、系統(tǒng)穩(wěn)定

  • 社區(qū)活躍,成功實(shí)踐和網(wǎng)上資源較為豐富

  • 安裝配置簡單

  • web形式的可視化的管理頁面

1. Jenkins是什么

?????Jenkins是一個(gè)開源軟件項(xiàng)目,是基于Java開發(fā)的一種持續(xù)集成工具,用于監(jiān)控持續(xù)重復(fù)的工作,旨在提供一個(gè)開放易用的軟件平臺(tái),使軟件的持續(xù)集成變成可能。

持續(xù)集成:

????持續(xù)集成是一種軟件開發(fā)實(shí)踐,即團(tuán)隊(duì)開發(fā)成員經(jīng)常集成他們的工作,通過每個(gè)成員每天至少集成一次,也就意味著每天可能會(huì)發(fā)生多次集成。每次集成都通過自動(dòng)化的構(gòu)建(包括編譯,發(fā)布,自動(dòng)化測(cè)試)來驗(yàn)證,從而盡早地發(fā)現(xiàn)集成錯(cuò)誤。

2.Jenkins能干什么

????眾所周知,工業(yè)革命解放了人類的雙手,使得人們避免了很多重復(fù)性的工作,而Jenkins能幫助開發(fā)測(cè)試運(yùn)維人員解決很多重復(fù)性工作,我們可以將一些重復(fù)性的工作,寫成腳本,如:代碼提交,執(zhí)行單元測(cè)試,程序的編譯、構(gòu)建、發(fā)布等封裝成腳本,由Jenkins替我們定時(shí)或按需執(zhí)行。事實(shí)上Jenkins的眾多插件就是如此,究其根本就是執(zhí)行一個(gè)或多個(gè)windows或linux命令來完成我們的需求。

3.Jenkins的一個(gè)工作流程

????通過對(duì)Jenkins的簡單了解后,對(duì)完成自動(dòng)化發(fā)布有了大致思路,如下圖為Jenkins的一個(gè)工作流程

思路已經(jīng)有了,接下來就是針對(duì)此流程,一步一步簡單實(shí)現(xiàn).NET Web應(yīng)用程序基于Jenkins的自動(dòng)化部署。

二、Jenkins 安裝

????Jenkins有windows版本也有l(wèi)inux版本,由于我們項(xiàng)目都是基于.net freamwork進(jìn)行開發(fā),而jenkins構(gòu)建需要編譯.net程序,為了更方便的編譯,因此選擇安裝windows版本。

1.下載

????可從Jenkins官網(wǎng)https://jenkins.io/download/下載windows安裝包。

2.安裝

????下載完成后,可按照提示進(jìn)行安裝即可。(windows下傻瓜式安裝,注意Jenkins是java開發(fā),因此需先安裝對(duì)應(yīng)jdk版本)

3.配置

????安裝完成后會(huì)自動(dòng)安裝并啟動(dòng)一個(gè)windows服務(wù),名為Jenkins,打開瀏覽器localhost:8080(Jenkins默認(rèn)端口號(hào)為8080,如需修改可打開Jenkins安裝目錄找到Jenkins.xml修改其中端口,然后打開服務(wù)重啟Jenkins服務(wù)即可)之后按照提示進(jìn)行配置即可!配置完成后看到如下界面代表安裝成功!

????整個(gè)安裝過程非常簡單,基本上是傻瓜式按照提示操作即可,期間并未遇到問題,基本上10分鐘左右就搞定了!接下來將介紹如何按照上述流程實(shí)現(xiàn).NET下Jenkins的持續(xù)集成與自動(dòng)化部署!

三、通過SVN獲取源代碼

1.安裝插件

?????根據(jù)我們的思路,首先要做的就是獲取到我們的源代碼。由于我們公司使用的源代碼管理工具主要是SVN因此在這里主要介紹SVN的方式方法。根據(jù)度娘的指引,我們需要安裝一個(gè)SVN的插件:Subversion Plug-in(如果:安裝Jenkins時(shí)選擇的安裝推薦的插件,則Jenkins會(huì)直接給安裝上這個(gè)插件,無需自己安裝)。

2.項(xiàng)目配置

????安裝插件后,選擇新建一個(gè)自由風(fēng)格的軟件項(xiàng)目,起個(gè)名字,進(jìn)入到項(xiàng)目配置后,找到源代碼管理選項(xiàng):

主要有以下幾個(gè)選項(xiàng)需要配置:

  • Repository URL:要獲取的SVN的路徑,如:https://127.0.0.1:9666/svn/HS.Mall/SoureCode/Trunk/Test

  • Credentials:配置SVN用戶名和密碼

  • Ignore externals:是否忽略SVN外部引用(這個(gè)很重要,稍后會(huì)用到,關(guān)于SVN外部引用,可自行百度)

  • Additional Credentials:當(dāng)你的SVN版本庫使用外部引用關(guān)聯(lián)其它版本庫是這個(gè)就很重要了

    Realm:填寫SVN服務(wù)器的地址

    <https://127.0.0.1:9666> VisualSVN Server //(注意這個(gè)格式)

    Credentials:填寫SVN用戶名和密碼信息

其它一些選項(xiàng)直接按照默認(rèn)值就可以,關(guān)于每一項(xiàng)的詳細(xì)介紹可以點(diǎn)擊后面的小?號(hào)查看。

配置完成后點(diǎn)擊保存后,構(gòu)建該項(xiàng)目查看結(jié)果。若能夠?qū)⒃创a更新至Jenkins的工作空間內(nèi),則代表配置成功!

四、通過MSBuild編譯應(yīng)用程序

1.安裝插件與環(huán)境

?????編譯.NET應(yīng)用程序可通過微軟提供的MSBuild工具,先安裝插件:MSBuild。(注意:Jenkins服務(wù)器需安裝MSBuild,建議在Jenkins上安裝VS開發(fā)工具,可以在構(gòu)建出問題的時(shí)候打開VS調(diào)試,省去很多不必要的麻煩)。

2.全局配置

????插件安裝完畢后,進(jìn)入系統(tǒng)管理->全局工具配置(ConfigureTools)找到MSBuild配置選項(xiàng):

  • Name:自己起個(gè)名字

  • Path to MSBuild:MSBuild.exe程序的物理路徑

注意:此處MSBuild.exe必須與程序所使用freamwork版本相對(duì)應(yīng),此處我在這就遇到了一個(gè)大坑,一開始隨便找個(gè)一個(gè)MSBuild工具,沒想到根本編譯不了C#6.0的語法。建議直接指向visual studio安裝目錄內(nèi)的MSBuild.exe,可以避免很多問題。如VS2017在:Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin路徑內(nèi)。

3.項(xiàng)目配置

?????打開我們之前創(chuàng)建的項(xiàng)目,找到構(gòu)建選項(xiàng)->增加構(gòu)建步驟->Build a Visual Studio project or solution using MSBuild

  • Name:選擇全局MSBuild配置的名稱

  • MSBuild Build?File:填寫我們的要構(gòu)建的項(xiàng)目.csproj文件,所相對(duì)工作的路徑。如:/Test.csproj

  • Command Line Arguments:MSBuild的參數(shù)如:/t:Rebuild /P:Configuration=Release /p:VisualStudioVersion=14.0 /p:DeployOnBuild=True;PublishProfile=Test.pubxml

    配置完成后,點(diǎn)擊構(gòu)建,查看控制臺(tái)信息,如能構(gòu)建成功,則代表我們的配置無誤!

    • /t:Rebuild 重新生成

    • /p:Configuration=Release Release 生成模式

    • /p:VisualStudioVersion=14.0 指定子工具集(VS2015為14.0,2017為15.0),不設(shè)置會(huì)報(bào)錯(cuò)

    • /p:DeployOnBuild=True;PublishProfile=Test.pubxml 使用 Test.pubxml 發(fā)布文件來發(fā)布項(xiàng)目 .pubxml文件可在VS發(fā)布時(shí)配置,位于Properties文件夾內(nèi)。

4.遇到的問題

????原以為按照度娘的一系列解決方案能夠很順利的構(gòu)建,可是在連續(xù)失敗了幾十次之后,才明白遠(yuǎn)遠(yuǎn)沒有那么簡單。期間主要遇到幾個(gè)問題:

  • MSBuild版本不對(duì)導(dǎo)致構(gòu)建不了C#6.0的語法

  • Jenkins 是講版本庫源代碼更新到自己的工作空間內(nèi),再執(zhí)行后續(xù)的構(gòu)建工作。我們的程序很不規(guī)范,其中引用了許多不屬于自己版本庫的第三方依賴包,和一些自己開發(fā)的公共庫,當(dāng)時(shí)這些第三方包和公共庫放在我們SVN的另一個(gè)版本庫里進(jìn)行管理,因此在構(gòu)建的時(shí)候?qū)е潞芏喑绦蚣也坏揭谩?/span>

關(guān)于問題1:上面已經(jīng)提過,只需要找到對(duì)應(yīng)版本即可

而問題2:一開始找了很多資料也沒有找到解決方案,后來還是從源代碼管理上找到了方案。

方案1:

????借鑒Nuget的思想,使用Nuget服務(wù)器管理我們自己開發(fā)的一些公共依賴庫。關(guān)于Nuget管理依賴的文章在另一篇博客里。

方案2:

????就是上面提到的SVN 外部引用,當(dāng)時(shí)也是走投無路,于是瘋狂翻譯Jenkins的這些英文解釋,在翻譯到SVN插件的Ignore externals時(shí),找到了這種方案,就是SVN可以設(shè)置外部引用,這樣在更新版本庫的時(shí)候就可以把依賴的版本庫也更新下來,然后Jenkins SVN插件把這個(gè)Ignore externals選項(xiàng)去掉,然后在Additional Credentials選項(xiàng)里填上所依賴版本庫的SVN配置,就能夠把這些依賴也更新到SVN工作空間內(nèi)。

????以上兩個(gè)問題解決后,基本沒有遇到太難的問題。由此可見我們的源代碼管理的科學(xué)、規(guī)范是多么的重要。

幾十次的構(gòu)建失敗,一堆亂七八糟的引用是多么痛的領(lǐng)悟!

五、通過Ftp發(fā)布至應(yīng)用服務(wù)器

????構(gòu)建成功后,Test.pubxml會(huì)指定發(fā)布的包的路徑(最好是放到工作空間下),按照思路,接下來就是要想辦法把發(fā)布包Copy到應(yīng)用服務(wù)器的根目錄下。由于我們的應(yīng)用服務(wù)器都是windows系統(tǒng),因此不能像linux系統(tǒng)一樣通過ssh遠(yuǎn)程Copy過去,當(dāng)時(shí)能想到的就是使用Ftp直接上傳到應(yīng)用服務(wù)器。

1.安裝插件與環(huán)境

????Jenkins 安裝插件Publish Over FTP,應(yīng)用服務(wù)器上需開啟Ftp。

 2.全局配置

????系統(tǒng)管理->系統(tǒng)配置下找到Publish over FTP配置項(xiàng)

  • Name:起個(gè)名字,后面項(xiàng)目配置里會(huì)用的到

  • HostName:Ftp主機(jī)名(端口號(hào)默認(rèn)21,在高級(jí)里面可以改)

  • Username:Ftp用戶名

  • Password:Ftp密碼

3.項(xiàng)目配置

????打開我們之前建的項(xiàng)目,找到構(gòu)建后操作->增加構(gòu)建后操作步驟->Send build artifacts over FTP

  • Name:選擇全局配置里的

  • Source files:選擇你的發(fā)布包路徑(這里是相對(duì)于工作空間的路徑)

  • Remote directory:放到遠(yuǎn)程的哪個(gè)路徑里(這里是相對(duì)于Ftp根目錄的路徑)

配置完成后,點(diǎn)擊保存,構(gòu)建即可!

六、結(jié)束語

????如上,就基本實(shí)現(xiàn)了我們的自動(dòng)化發(fā)布的需求,這期間從早晨六點(diǎn)開始,差不多中午就完成了,當(dāng)然也并不像上面介紹的那么簡單,期間也遇到了許多問題,構(gòu)建了大概一百多次,才最終成功了第一次。本文主要介紹實(shí)現(xiàn)自動(dòng)化部署的一種基本的思路,當(dāng)然還有很多方案可以實(shí)現(xiàn)我們的需求,甚至不僅僅局限于Jenkins。而這種方案其中也有許多細(xì)節(jié)的地方在文章中沒有提到,如:如何實(shí)現(xiàn)自動(dòng)化的Nunit單元測(cè)試,如何定時(shí)構(gòu)建......,因?yàn)楫?dāng)時(shí)我在完成之后也給我的團(tuán)隊(duì)成員提供了一個(gè)非常詳細(xì)的配置文檔,并且培訓(xùn)了很多次,但事實(shí)證明,講的越詳細(xì)越會(huì)限制他們自己的主動(dòng)思考與動(dòng)手的能力。這也導(dǎo)致了后來我去做其他工作的時(shí)候,我們將近一年的時(shí)間還是停留在我這半天的研究結(jié)果的層面上,而生產(chǎn)環(huán)境更是遲遲沒有使用。其實(shí)思路才是最重要的,有了思路我們就可以通過各種方式來解決我們的問題,還是建議大家注重解決問題的思路,多動(dòng)手,自己實(shí)踐,才能學(xué)得更透!關(guān)于.NET 平臺(tái)下Jenkins實(shí)現(xiàn)持續(xù)集成與自動(dòng)化部署的落地與實(shí)現(xiàn)的問題與討論,可以在文章下留言。

相關(guān)文章:

  • VSTS + XX云服務(wù)器構(gòu)建netcore+docker持續(xù)集成交付部署

  • .NET Core 從 Github到 Nuget 持續(xù)集成、部署

  • ASP.NET Core + Docker + Jenkins + gogs + CentOS 從零開始搭建持續(xù)集成

  • 一步步部署基于Windows系統(tǒng)的Jenkins持續(xù)集成環(huán)境

  • 部署:持續(xù)集成(CI)與持續(xù)交付(CD)——《微服務(wù)設(shè)計(jì)》讀書筆記

  • 基于Jenkins快速搭建持續(xù)集成環(huán)境

  • .Net項(xiàng)目使用持續(xù)集成服務(wù)AppVeyor,Travis-CI實(shí)戰(zhàn)

  • .NET Core微服務(wù)之基于Jenkins+Docker實(shí)現(xiàn)持續(xù)部署(Part 1)

  • .Net Core 自動(dòng)化部署:使用jenkins部署應(yīng)用

  • jenkins~集群分發(fā)功能的具體實(shí)現(xiàn)

原文地址:https://www.cnblogs.com/hunternet/p/9590287.html


.NET社區(qū)新聞,深度好文,歡迎訪問公眾號(hào)文章匯總 http://www.csharpkit.com

總結(jié)

以上是生活随笔為你收集整理的半天搭建你的Jenkins持续集成与自动化部署系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。