站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          軟件開(kāi)發(fā)一般來(lái)說(shuō)是一項(xiàng)團(tuán)隊(duì)作業(yè),在本系列文章開(kāi)始就提到過(guò)軟件的編碼是由一個(gè)團(tuán)隊(duì)“并行”完成的,為了保證編碼任務(wù)正常完成,首先引入版本控制工具來(lái)完成代碼管理,為了保證代碼質(zhì)量引入了代碼分析器以及代碼測(cè)試。

          版本控制工具可以保證代碼有一個(gè)主版本,但代碼分析和測(cè)試均是開(kāi)發(fā)人員手動(dòng)在本地完成的(通過(guò)編譯、執(zhí)行測(cè)試等方式),在進(jìn)行代碼分析和測(cè)試時(shí)可能并沒(méi)有將本地代碼更新到最新版本,這樣就會(huì)出現(xiàn)一個(gè)問(wèn)題,當(dāng)多個(gè)開(kāi)發(fā)人員向版本庫(kù)提交代碼時(shí),無(wú)法保證最新代碼庫(kù)的代碼是正確的,為了解決這個(gè)問(wèn)題,提出了持續(xù)集成,持續(xù)集成的集成指的是持續(xù)的對(duì)多個(gè)開(kāi)發(fā)人員編寫的代碼進(jìn)行集成,本文從下面幾個(gè)方面介紹持續(xù)集成以及基于Github進(jìn)行持續(xù)集成實(shí)踐:

        • CI&CD
        • 常用的持續(xù)集成工具
        • GitHub市場(chǎng)簡(jiǎn)介
        • 使用AppVeyor實(shí)現(xiàn)持續(xù)集成
        • 使用Codecov顯示代碼覆蓋率
        • 小結(jié)

        CI&CD

          持續(xù)集成(Continuous integration,CI)指的是在開(kāi)發(fā)過(guò)程中持續(xù)地將所有開(kāi)發(fā)人員的代碼合并到代碼庫(kù)的主線上,然后對(duì)該主線代碼進(jìn)行編譯、測(cè)試運(yùn)行等操作對(duì)代碼進(jìn)行檢驗(yàn),其目的是盡可能早的發(fā)現(xiàn)代碼集成后導(dǎo)致的問(wèn)題
          實(shí)現(xiàn)持續(xù)集成的要點(diǎn)主要有:共享的代碼庫(kù)、自動(dòng)化編譯、自動(dòng)化測(cè)試等,同時(shí)要保證合理的集成頻率,一般持續(xù)集成的時(shí)機(jī)在于開(kāi)發(fā)人員將代碼提交到代碼庫(kù)時(shí)自動(dòng)進(jìn)行,但是如果提交過(guò)于頻繁,那么應(yīng)該使用時(shí)間間隔的形式進(jìn)行持續(xù)集成。
          持續(xù)發(fā)布(Continuous delivery,CD)實(shí)際上是持續(xù)集成上的一個(gè)拓展,在持續(xù)集成的基礎(chǔ)上將發(fā)布工作自動(dòng)化,避免人為操作從而減少發(fā)布時(shí)間和發(fā)布時(shí)人為造成的錯(cuò)誤

        常用的持續(xù)集成工具

          持續(xù)集成經(jīng)過(guò)多年的發(fā)展,在不同的應(yīng)用場(chǎng)景、平臺(tái)/語(yǔ)言、商業(yè)化等因素下產(chǎn)生了許多持續(xù)集成工具,可參考(但不限于這些):  https://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software
          比較常用的持續(xù)集成工具有:
          Jenkins
          Jenkins是一個(gè)開(kāi)源的跨平臺(tái)持續(xù)集成工具,它提供了GUI界面以及大量的拓展插件,通過(guò)GUI界面可以簡(jiǎn)單、快速的完成項(xiàng)目持續(xù)集成配置,更重要的是Jenkins支持所有的版本控制工具。
          項(xiàng)目地址:https://jenkins.io/

          TeamCity
          TeamCity是JetBrains公司開(kāi)發(fā)的持續(xù)集成工具,它有免費(fèi)和收費(fèi)兩種授權(quán),免費(fèi)版本的TeamCity擁有所有功能,其限制僅僅是只能創(chuàng)建100個(gè)編譯配置和只能并行運(yùn)行3個(gè)代理。
          項(xiàng)目地址:http://www.jetbrains.com/teamcity/

          GitLab
          GitLab是一個(gè)Git的代碼管理工具,使用GitLab可以輕松的在Linux環(huán)境搭建一個(gè)Git的遠(yuǎn)程代碼托管平臺(tái),同時(shí)GitLab中也內(nèi)置的CI/CD功能。
          項(xiàng)目地址:https://about.gitlab.com/

          Travis CI
          Travis CI是一個(gè)持續(xù)集成托管平臺(tái),它為開(kāi)源項(xiàng)目提供免費(fèi)支持,但Travis CI不支持Windows下編譯。
          項(xiàng)目地址:https://www.travis-ci.org/

          AppVeyor
          AppVeyor也是一個(gè)持續(xù)集成的托管平臺(tái),它支持Windows和Linux,并且AppVeyor可以對(duì)環(huán)境進(jìn)行定制:https://www.appveyor.com/docs/build-environment/,是一個(gè)非常強(qiáng)大的CI工具,AppVeyor對(duì)開(kāi)源項(xiàng)目提供免費(fèi)支持。
          項(xiàng)目地址:https://www.appveyor.com/

          VSTS
          VSTS(Visual Studio Team Services)是微軟的軟件開(kāi)發(fā)管理解決方案,它包含了代碼版本管理、持續(xù)集成/發(fā)布、敏捷等特性,并且VSTS為5人以下團(tuán)隊(duì)提供了免費(fèi)使用。
          項(xiàng)目地址:https://visualstudio.microsoft.com/zh-hans/team-services/

          總的來(lái)說(shuō)持續(xù)集成工具分為可本地安裝和平臺(tái)托管兩類,本地安裝類型的工具適合有專用構(gòu)建服務(wù)器資源的閉源項(xiàng)目(當(dāng)然開(kāi)源項(xiàng)目也可以使用),而托管平臺(tái)則比較適合開(kāi)源或者沒(méi)有專用構(gòu)建服務(wù)器資源的項(xiàng)目,使用上托管平臺(tái)更加省心,這些工具需要根據(jù)實(shí)際情況來(lái)進(jìn)行選用。

        GitHub市場(chǎng)簡(jiǎn)介

          GitHub作為一個(gè)分布式的軟件管理解決方案,它除了提供代碼托管外,還通過(guò)應(yīng)用市場(chǎng)的方式提供了拓展應(yīng)用,這些應(yīng)用主要用于持續(xù)繼承、部署、測(cè)試、代碼審查、項(xiàng)目管理等等,詳情查看:https://github.com/marketplace/
          下圖為Github市場(chǎng)中的CI工具:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          一般來(lái)說(shuō)市場(chǎng)中提供的應(yīng)用對(duì)于開(kāi)源項(xiàng)目都是可以免費(fèi)使用的,下面就介紹如何將Github上的開(kāi)源項(xiàng)目使用其市場(chǎng)應(yīng)用完成持續(xù)集成。

        使用AppVeyor實(shí)現(xiàn)持續(xù)集成

          AppVeyor是一個(gè)支持自定義持續(xù)集成環(huán)境的CI工具,它對(duì).Net程序的支持非常強(qiáng)大,同時(shí)對(duì)開(kāi)源項(xiàng)目免費(fèi),所以AppVeyor是.Net Core項(xiàng)目持續(xù)集成的首選,下面就介紹如何使用AppVeyor完成持續(xù)基礎(chǔ):
          1. 在GitHub市場(chǎng)中找到AppVeyor,并完成安裝:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          2. 添加項(xiàng)目:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          選擇GitHub倉(cāng)庫(kù),并完成授權(quán):

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          添加需要的倉(cāng)庫(kù):

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          點(diǎn)擊“NEW BUILD”進(jìn)行一次編譯:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          從編譯的信息可以看到,此次編譯失敗了,并且給出了相應(yīng)的錯(cuò)誤信息,這是由于編譯環(huán)境導(dǎo)致的。

          3. 環(huán)境配置:
          將編譯鏡像選擇為VS2017:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          在編譯前先執(zhí)行dotnet restore命令還原項(xiàng)目依賴:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          4. 開(kāi)始一個(gè)新的編譯:
          編譯結(jié)果:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          從編譯結(jié)果可以看出Appveyor不僅僅是完成了編譯工作,而且還搜索了測(cè)試信息,并完成了測(cè)試。另外有一個(gè)要點(diǎn)是本項(xiàng)目中的測(cè)試是依賴數(shù)據(jù)庫(kù)的,這就意味著Appveyor的編譯環(huán)境提供了SQL Server數(shù)據(jù)的支持。

          5. 將編譯后的內(nèi)容發(fā)布到GitHub release:
          為xUnitTestDemo代碼庫(kù)添加一個(gè)Tag:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          然后Appveyor將會(huì)檢測(cè)到代碼庫(kù)的變化,自動(dòng)編譯Tag,并將結(jié)果部署到Github的Release中:

        使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          自動(dòng)部署的Release內(nèi)容:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          關(guān)于appveryor部署的更多信息參考:https://www.appveyor.com/docs/deployment/

          6. 將編譯狀態(tài)顯示到GitHub上:
          Appveyor的Badges(標(biāo)記)配置界面中可以獲取到狀態(tài)標(biāo)記地址:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          將MarkDown的代碼復(fù)制到項(xiàng)目的README.md文件中:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          效果:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          7. 導(dǎo)出appveyor.yml文件以及通過(guò)appveyor.yml來(lái)完成配置:
          上面的方法是通過(guò)Appveyor的Web界面上完成配置的,除此之外還可以通過(guò)appveyor.yml文件來(lái)完成配置,appveyor.yml文件可以自己創(chuàng)建或?qū)С鲆延信渲茫?br />  導(dǎo)出已有配置:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          將appveyor.yml文件放置到代碼根目錄,并通過(guò)修改該文件來(lái)變更配置:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          上圖在原有配置基礎(chǔ)上修改為release的方式編譯代碼,并且指定生成結(jié)果目錄,將結(jié)果進(jìn)行壓縮。
          更多appveyor.yml配置可參考:https://www.appveyor.com/docs/appveyor-yml/

        使用Codecov顯示代碼覆蓋率

          Codecov也是Github市場(chǎng)的一個(gè)應(yīng)用,它用于生成代碼覆蓋率報(bào)告,codecov對(duì)C#的支持是基于OpenCover的(使用OpenCover檢測(cè)代碼覆蓋率參考:好代碼是管出來(lái)的——.Net Core中的單元測(cè)試與代碼覆蓋率),Codecov對(duì)Github的公開(kāi)項(xiàng)目是免費(fèi)的,下面就開(kāi)始介紹如何使用codecov來(lái)實(shí)現(xiàn)測(cè)試代碼覆蓋率的統(tǒng)計(jì):
          1. 安裝Codecov:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          注:安裝完成Codecov后,會(huì)有一個(gè)Upload Token用來(lái)將代碼覆蓋報(bào)告上傳到Codecov,但Appveyor的公共倉(cāng)庫(kù)可以不需要:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          2. 修改appveyor.yml文件:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          添加使用choco管理器安裝OpenCover及codecov,然后在test_script中添加代碼覆蓋率分析報(bào)告以及上傳腳本。
          注:當(dāng)上述變更push到Github后,Appveyor將開(kāi)始自動(dòng)編譯并完成包括代碼覆蓋率報(bào)告生成、上傳等所有工作,此時(shí)打開(kāi)codecov頁(yè)面將會(huì)看到報(bào)告信息:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          3. 在README.md文件中添加Codecov的標(biāo)簽:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

         

           使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

          結(jié)果:

          使用GitHub實(shí)現(xiàn)簡(jiǎn)單的CI/CD

        小結(jié)

          本文介紹了CI和CD的基本概念,前者目的在于盡可能早的發(fā)現(xiàn)多人開(kāi)發(fā)時(shí)代碼集成的錯(cuò)誤,而后者目的是避免人為造成的錯(cuò)誤,將一些重復(fù)的事情交由程序自動(dòng)完成,既可以減少成本又可以提高正確率,現(xiàn)在流行的DevOps的基礎(chǔ)之一就是自動(dòng)化也就是CI和CD。
          另外本文還介紹了在Github上使用Appvoyer和Codecov工具實(shí)現(xiàn)了簡(jiǎn)單的持續(xù)集成,當(dāng)把新代碼推到GitHub倉(cāng)庫(kù)時(shí),Appvoyer會(huì)自動(dòng)的完成一系列構(gòu)建操作。Appvoyer是一個(gè)非常強(qiáng)大的CI工具,對(duì)C#的支持也非常好可以選擇VS版本(包括預(yù)覽版),多種數(shù)據(jù)庫(kù)(包括Linux下的SQL Server),所以在執(zhí)行測(cè)試時(shí)依賴數(shù)據(jù)庫(kù)的測(cè)試也能通過(guò)。

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 国产精品揄拍100视频| 久久久无码精品午夜| 欧美黑人巨大videos精品| 国产在线精品一区二区三区不卡 | 日韩人妻精品无码一区二区三区| 亚洲国产精品成人AV无码久久综合影院 | 亚洲精品无码专区久久同性男| 中日精品无码一本二本三本| 青青草国产精品久久| 亚洲国产精品久久久久久| 久99久无码精品视频免费播放| 最新精品国偷自产在线| 国产精品亚洲不卡一区二区三区| 国语自产精品视频在线观看| 精品国产网红福利在线观看| 国产精品自在线拍国产电影| 2022国产精品自产拍在线观看| 91精品国产91久久久久久蜜臀| 久久久久国产日韩精品网站| 777久久精品一区二区三区无码| 99精品高清视频一区二区| 国产精品爱搞视频网站 | 国产亚洲精品无码专区| 日本精品一区二区三区在线观看| AAA级久久久精品无码片| 精品人妻va出轨中文字幕| 精品一区二区三区在线视频| 精品无码无人网站免费视频| 91国内揄拍国内精品情侣对白| 91精品在线看| 精品国产一区二区三区免费| 少妇精品久久久一区二区三区| 欧美一区二区精品| 国产精品看高国产精品不卡| 一本一本久久a久久综合精品蜜桃 一本一道精品欧美中文字幕 | 欧美午夜精品久久久久免费视 | 欧美精品色精品一区二区三区| 国产精品免费视频观看拍拍| 夜色www国产精品资源站| 欧美精品天天操| 日韩精品在线一区二区|