• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Jenkins和Docker容器技術(shù)在數(shù)字化電站項目自動化部署的研究及應用

      2020-04-05 18:51:36蔡永健路云菲鄔遠祥唐海濤
      計算機時代 2020年2期

      蔡永健 路云菲 鄔遠祥 唐海濤

      摘? 要: 隨著信息技術(shù)飛速發(fā)展,工程項目發(fā)展多元化,工程數(shù)字化管理系統(tǒng)日趨復雜,系統(tǒng)軟件更新迭代日益頻繁,而傳統(tǒng)人工手動部署軟件會耗費大量人力成本。為了提高軟件研發(fā)及交付效率,文章基于持續(xù)集成引擎Jenkins和容器引擎Docker提出一種自動化部署的解決方案,并在數(shù)字化智能電站系統(tǒng)上應用,在其系統(tǒng)軟件研發(fā)交付過程中實現(xiàn)開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境的快速自動化部署,對于提高軟件研發(fā)效率和項目按時履約具有重要的推進作用。

      關鍵詞: Jenkins; Docker; 容器化; 自動化部署

      中圖分類號:TP399? ? ? ? ? 文獻標識碼:A? ? 文章編號:1006-8228(2020)02-77-04

      Research and application of technologies of Jenkins and Docker container in

      automatic deployment of digital power station

      Cai Yongjian1,2, Lu Yunfei1,2, Wu Yuanxiang1,2,3,4, Tang Haitao1,2,3

      (1.Powerchina Huadong Engineering Corporation Limited, Hangzhou, Zhejiang 311122, China;

      2.Zhejiang Huadong Engineering Digital Technology Co., Ltd.;

      3.Digital City CIM Technology Zhejiang Engineering Research Center; 4.Zhejiang Engineering Digital Research Center)

      Abstract: With the rapid development of information technology, diversified engineering projects, engineering digital management systems are becoming more and more complex, and system software update iterations are becoming more frequent. Traditional manual deployment of software will take up a lot of labor costs. In order to improve software R&D and delivery efficiency, this paper uses continuous integration engine Jenkins and container engine Docker to propose an automated deployment solution and apply it on the digital intelligent power plant system to realize rapid and automatic deployment of the development environment, test environment and production environment during the system software development and delivery process, which plays an important role in promoting software R&D efficiency and guaranteeing project performance on time.

      Key words: Jenkins; Docker; containerization; automatic deployment

      0 引言

      隨著軟件系統(tǒng)功能邏輯復雜化、更新頻繁化的發(fā)展進程,手動部署的方式可能導致交付滯后的問題,自動化部署技術(shù)應運而生,并已經(jīng)成為絕大多數(shù)公司軟件研發(fā)的標準配置。我們公司的主要產(chǎn)品為工程數(shù)字化管理軟件,采用Jenkins和Docker技術(shù)完成自動化部署任務。Docker容器化技術(shù)[1]具有輕量化、跨平臺、消除線上線下環(huán)境差異等特性;持續(xù)集成引擎Jenkins[2]具備開源、易上手、插件豐富等優(yōu)勢,這兩者結(jié)合提供了一種高效的自動化部署解決方案。

      數(shù)字化抽水蓄能電站是水電工程運維期管理系統(tǒng),由于水電站建設周期長、參與單位多等特點,其管理系統(tǒng)具有功能高度復雜化、開發(fā)迭代頻率高的特征,基于Jenkins+Docker容器技術(shù)的自動化[3]部署方案在很大程度上提高了其研發(fā)的效率,為項目履約提供了技術(shù)保障,同時,也為公司能夠快速搶占市場份額提供了重要的技術(shù)支撐。

      1 Docker 簡介

      1.1 Docker的概念

      Docker使用Google公司推出的Go語言開發(fā)實現(xiàn),基于Linux內(nèi)核的Cgroup和Namespace,以及AUFS類的UnionFS等技術(shù),對進程做封裝隔離,屬于操作系統(tǒng)層面的虛擬化技術(shù)。由于隔離的進程獨立于宿主和其它進程,因此稱為容器[4]。Docker在容器的基礎上進一步封裝,從文件系統(tǒng)、網(wǎng)絡互聯(lián)到進程隔離,極大地簡化了容器的創(chuàng)建和維護,使得Docker技術(shù)比虛擬機技術(shù)更為輕便和快捷。

      1.2 Docker的優(yōu)勢

      ⑴ 更高效的利用系統(tǒng)資源

      相比于傳統(tǒng)虛擬化技術(shù),由于Docker容器不需要進行硬件虛擬以及運行完整操作系統(tǒng)等額外開銷,Docker對系統(tǒng)資源的利用率更高,無論是應用執(zhí)行速度、內(nèi)存損耗或者文件存儲速度,都要比傳統(tǒng)虛擬機技術(shù)更高效。因此,一個相同配置的主機,往往可以運行更多數(shù)量的應用。

      ⑵ 更快速的啟動速度

      傳統(tǒng)虛擬機技術(shù)啟動服務往往需要數(shù)分鐘,而Docker容器直接運行于宿主機內(nèi)核,無需啟動完整的操作系統(tǒng),因此可以做到秒級甚至是毫秒級的啟動速度,可以達到用戶無感知的平滑升級。大大地節(jié)約了開發(fā)、測試、部署的時間。

      ⑶ 一致的運行環(huán)境

      軟件開發(fā)過程中一個常見的問題是環(huán)境一致性問題。由于開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境的不一致,導致有些bug并未在開發(fā)過程中被發(fā)現(xiàn)。而Docker的鏡像提供了除內(nèi)核外完整的運行時環(huán)境,確保了應用運行環(huán)境的一致性,從而不會再出現(xiàn)“這段代碼在我機器上沒有問題”此類問題。

      ⑷ 遷移更高效

      由于Docker確保了執(zhí)行環(huán)境的一致性,使得應用的遷移更加容易。Docker可以在很多平臺上運行,無論是物理機、虛擬機、公有云、私有云,其運行結(jié)果是一致的。因此用戶可以很輕易的將一個平臺運行的服務,遷移到另一個平臺上,而不用擔心運行環(huán)境的變化導致應用無法正常運行的情況發(fā)生。

      ⑸ 維護和擴展更輕松

      Docker的分層存儲技術(shù),使得鏡像重復部分的復用更為容易,也使得鏡像的維護更新更加簡單,基于基礎鏡像進一步擴展也變得更加容易。此外,Docker團隊同各個開源項目團隊一起維護了一大批高質(zhì)量的官方鏡像,既可以在生產(chǎn)環(huán)境使用,又可以作為基礎進一步定制,大大地降低了應用服務的鏡像制作成本[5]。

      2 Jenkins簡介

      2.1 Jenkins的概念

      Jenkins是基于Java開發(fā)的一種可擴展的開源持續(xù)集成引擎,用于監(jiān)控持續(xù)重復的工作,是業(yè)內(nèi)比較常用的軟件自動化工具之一。

      持續(xù)集成是在開發(fā)階段對項目進行持續(xù)性自動化編譯、測試,以達到控制代碼質(zhì)量的目的。其具備即時發(fā)現(xiàn)問題,追蹤問題、修復問題的機制,改變了在所有代碼編寫完成后才提交給QA部門的傳統(tǒng)方法。每次集成都通過自動化的構(gòu)建來驗證,及早發(fā)現(xiàn)集成錯誤,在研發(fā)過程中可極大減少集成導致的問題。

      2.2 Jenkins的優(yōu)勢

      ⑴ 跨平臺

      支持幾乎所有的平臺,可在Windows,Ubuntu/Debian,RedHat/Fedora/CentOS,MacOSX等常見的操作系統(tǒng)下運行。

      ⑵ 易于配置

      Jenkins可以通過友好的webGUI輕松設置和配置,其中包括即時錯誤檢查和內(nèi)置幫助。不需要手動編輯xml配置文件,雖然Jenkins也支持手動修改xml配置文件。

      ⑶ 插件豐富

      Jenkins擁有數(shù)以千計的插件,幾乎集成了所有自動化相關的工具,由于Jenkins可以通過插件架構(gòu)進行擴展,為其提供了無限可能。在項目構(gòu)建后,Jenkins也提供了郵件反饋形式,可以將構(gòu)建結(jié)果及時告知相關人員。

      3 自動化部署方案

      3.1 環(huán)境搭建

      自動化部署硬件環(huán)境包含一臺Jenkins持續(xù)集成服務器、一臺DockerRegistry 私有鏡像倉庫服務器、一臺GitLab代碼倉庫服務器和多臺應用服務器,應確保在整個網(wǎng)絡中Jenkins服務器可以訪問其他服務器,應用服務器能直接訪問Docker Registry服務器。其次,Jenkins服務器需要安裝Docker容器引擎軟件并實現(xiàn)登錄Docker Registry認證。

      3.2 工作原理

      開發(fā)人員在Gitlab服務器創(chuàng)建一個Project,確定各部署環(huán)境對應分支并將Jenkins服務器的SSH key加入到GitLab的SSHKey管理中心,確保Jenkins有權(quán)限訪問GitLab并可獲取代碼。在Jenkins中配置相關的參數(shù):如BuildTriggers中輪詢GitLab分支的間隔時間、SSH remote hosts中的SSH sites遠程服務器登錄配置、Extended E-mail Notification 中的參數(shù)等,保證自動化部署流程的實現(xiàn)。

      Jenkins服務器每個任務都會根據(jù)Build Triggers中的配置定時輪詢GitLab代碼分支,當檢測到GitLab分支上有代碼變動時就會觸發(fā)一系列的動作:自動拉取代碼、編譯代碼、構(gòu)建鏡像、上傳鏡像至鏡像倉庫。構(gòu)建完成后再調(diào)用遠程服務器的腳本完成軟件更新,最后調(diào)用郵件功能,將結(jié)果發(fā)送給研發(fā)人員和項目負責人,主流程如下圖1所示。

      4 自動化部署實踐

      4.1 項目描述

      數(shù)字化抽水蓄能電站管理系統(tǒng)是水電站全生命周期的項目管理系統(tǒng),通過收集實體電站全過程管理數(shù)據(jù),采用三維可視化技術(shù),實現(xiàn)物理電站和虛擬電站在全過程管理數(shù)據(jù)的一一對應,實現(xiàn)“一站式”電站的工程管理、資產(chǎn)管理、生產(chǎn)管理、安全管理、運檢管理、資料管理等功能,為管理層的決策提供技術(shù)支持,保證電站的安全、優(yōu)質(zhì)、經(jīng)濟運行,提高企業(yè)效益[6]。

      4.2 項目實踐

      項目采用前后端分離的方式開發(fā),前端采用Facebook和Instagram開源的React框架,后端使用微服務架構(gòu),采用Java和Python兩種語言,前后端采用Restful API接口進行數(shù)據(jù)交互。

      對于Python應用,在Jenkins中配置shell腳本,利用自定義的Dockerfile文件將代碼及其運行所需環(huán)境封裝到Docker鏡像中,上傳至Docker Registry,調(diào)用SSH插件功能執(zhí)行遠程服務器上的更新腳本,下載最新鏡像,利用docker-compose容器編排工具完成迭代。

      對于Java應用,Jenkins會調(diào)用Maven工具將代碼編譯打包成Jar包,通過SCP命令上傳至應用服務器,調(diào)用Java鏡像啟動容器執(zhí)行java-jar命令完成軟件更新。

      前端代碼使用Nodejs編譯成靜態(tài)的文件,采用Nginx托管,Jenkins將源代碼下載到本地并通過Node鏡像啟動容器將代碼編譯成可部署的靜態(tài)文件,將編譯后的代碼推送到遠端Nginx服務器完成部署。最后將構(gòu)建結(jié)果通過E-mail發(fā)送至開發(fā)人員和研發(fā)負責人。在更新的過程中,Jenkins也會根據(jù)配置執(zhí)行代碼掃描和單元測試,執(zhí)行結(jié)果如圖2和圖3所示。

      軟件研發(fā)過程中使用不同的分支管理不同環(huán)境的源代碼,開發(fā)人員將代碼提交到dev分支上,Jenkins輪詢機制會檢測到COMMITID變更而觸發(fā)構(gòu)建,執(zhí)行特定的腳本完成軟件更新,期間自動執(zhí)行單元測試并反饋運行結(jié)果。自測通過后合并代碼到test分支,jenkins完成自動化部署到測試環(huán)境,QA團隊開始測試工作。

      數(shù)字化抽水蓄能電站系統(tǒng)一共有15個功能模塊,每個模塊平均構(gòu)建300次,人工部署時,更新一次需要大概5-10分鐘,如果操作錯誤則花費更長時間。而自動化部署每次構(gòu)建平均只耗時1分30秒,并保證每次更新的一致性,減少了因人為失誤導致的更新滯后問題,部署結(jié)果如圖4所示。根據(jù)以上數(shù)據(jù)粗略估算,自動化部署技術(shù)為該項目運維節(jié)省時長可達600小時,而且,Docker鏡像也保證了各服務器上運行環(huán)境的一致性,加快項目研發(fā)進度,節(jié)約人力資源。

      5 結(jié)束語

      本文重點介紹了基于Jenkins和Docker容器技術(shù)在軟件研發(fā)過程中自動化部署的實現(xiàn)方案,并概述了在數(shù)字化抽水蓄能電站項目上的實踐情況?;谝陨险撌隹煽闯觯摷夹g(shù)對項目持續(xù)集成、持續(xù)交付方面有很大的提升作用,在很大程度上減少了開發(fā)、測試、運維部門由于系統(tǒng)環(huán)境差異引起的矛盾,為項目履約提供了技術(shù)保障。同時,也可以為公司DevOps[7]發(fā)展提供理論依據(jù)和實踐成果,能在一定程度上為微服務架構(gòu)[8]項目在私有云、公有云自動化部署積累寶貴的經(jīng)驗;更為公司今后實現(xiàn)自動化運維計劃提供了寶貴的經(jīng)驗。

      參考文獻(References):

      [1] James Turnbull.《第一本Docker書》.人民郵電出版社 2014-12[1-15]

      [2] 周瑩,歐中紅,李俊.基于Jenkins的持續(xù)集成自動部署研究[J].計算機與數(shù)字工程,2016.2.

      [3] 楊洪嬌.基于Docker的高校網(wǎng)站自動部署應用[J].無線互聯(lián)科技,2017.

      [4] 蔡志強.基于Docker技術(shù)的容器隔離性分析[J].電子世界,2017.

      [5] 劉國樂,余彥峰.淺析Docker容器技術(shù)[J].保密科學技術(shù),2017.10.

      [6] 錢玉蓮,王金峰,王國光,鄧新星.數(shù)字化設計在仙居抽水蓄能電站中的應用[J].2018.2.

      [7] 黃璜,張賀,邵棟.自動化工具對中國DevOps實踐的影響[J].軟件學報.

      [8] 王方旭.基于Spring Cloud和Docker的微服務架構(gòu)設計[J].中國信息化,2018.3.

      宁安市| 桐庐县| 三亚市| 金寨县| 尼木县| 新源县| 华池县| 万年县| 治多县| 舟山市| 扶绥县| 黔江区| 灯塔市| 琼中| 临猗县| 平原县| 万盛区| 门源| 桐庐县| 台东县| 铁岭县| 德清县| 原阳县| 乌兰浩特市| 固安县| 金秀| 庆城县| 绥中县| 闻喜县| 科技| 五家渠市| 新疆| 房产| 墨玉县| 安龙县| 梁平县| 乐昌市| 固始县| 柞水县| 安化县| 巴青县|