精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

對iPipeline的接口進行優化和實踐

8nfr_ZTEdevelop ? 來源:未知 ? 作者:易水寒 ? 2018-04-05 18:14 ? 次閱讀




概述

XXX項目原CI系統由項目自行搭建,使用Jenkins傳統的Job方式來實現VerifyCI和MergeCI以及DailyBuild。隨著項目規模越來越大,分支越來越多,合代碼的頻率也逐漸增大的情況下,現有系統呈現出諸多不便之處。為解決這些問題,項目嘗試引入一系列現成公司級Devops研發工具并結合Jenkins2.0的Pipeline新特性來改造本項目Pipeline流程。

Pipeline as Code 是 Jenkins 2.0 版本的精華所在,是幫助 Jenkins 實現從 CI 到 CD 華麗轉身的關鍵工具。所謂 Pipeline,簡單來說,就是一套運行于 Jenkins 上的工作流框架,將原本獨立運行于單個或者多個節點的任務連接起來,實現單個任務難以完成的復雜發布流程。落實到代碼級別,即我們只需要把精力集中在編寫 Jenkinsfile 文件上,然后將其隨同代碼庫一起托管,Jenkins可以根據Jenkinsfile來迅速拉起項目的CI流程,方便高效。

但是隨著多個項目的試行、落地,發現基于Jenkins2.0的Pipeline功能強大,但是具體應用到各個項目還有如下幾個痛點:

各個項目都在編寫自己特色的Jenkinsfile,很多時候互相復制修改一下代碼實現,Jenkinsfile冗余度非常高;

按照Jenkins1.x時代的思路,訂制化自己的CI/CD流程、郵件通知、報告輸出,轉換過程緩慢而痛苦;

遇到技術問題沒有能力解決、采用一些過時的方法和工具,而其他項目組已經解決一些技術問題或者采用了更加先進的方法和工具,互相并不能及時分享;

為了解決這些問題,經過項目反復調研和摸底,最終采用了中開社上開源的Jenkins2.0的Pipeline共創庫iPipeline(又稱plll庫)來輔助本項目重構CI流程。

iPipeline是簡化CI Pipeline部署的工具集,是面向開發人員和CI配置管理員的函數庫,其封裝了Jenkins 2.0的常用函數,集成了Gerrit、制品庫、云CI、度量、告警采集、郵件通知,另外提供docker封裝的工具集(復雜度、Klocwork、度量分析、度量導入等)。利用其可以幫助我們節省很多精力,避免重復造輪子,因此非常滿足我們項目的需求。

問題描述

iPipeline框架在本項目的實踐過程中確實提高了很多效率和幸福感,但結合本項目一些實際的使用情況,發現其仍然存在一些優化和改進的點。為此針對我們項目的需要,我們對iPipeline做了如下一些優化并實踐。

問題1

利用plll庫提供的pdocker接口,可以很方便地在指定的節點上運行指定的Docker容器來完成相關CI任務。比如本項目圈復雜度檢查已經Docker化,因此可以利用pdocker接口,通過配置上鏡像名、映射目錄以及需要運行的指令與腳本來執行代碼的圈復雜度檢查。

但是實際在對pdocker接口的使用過程中發現,plll庫每次都會去節點上pull鏡像,然后再運行,這對于鏡像其實已經存在于本地節點的情況其實并沒有必要,因此需要改造。

問題2

目前plll庫提供的Update接口僅支持Gerrit代碼倉庫的代碼檢出更新,但本項目運行某些用例測試需要的報文存儲于SVN庫上,因此有必要擴充plll庫原有接口,使其支持SVN庫的代碼更新

帶著這兩個問題,我們對plll庫做出了對應的一些優化并且實踐之。

優化實踐

優化1:pdocker接口是否需要拉取鏡像由用戶自定義

改造pdocker接口,添加參數來控制是否需要pull鏡像,接口代碼片段如下:

/**

* 工具名稱:docker執行

* 工具描述:

* image - 鏡像的全路徑

* needPull - 是否需要pull鏡像

* before_cmd - 以root執行的命令行,在執行user_cmd前執行

* volumes - 路徑映射清單,"a:b,c:d"

* params - 執行參數

* profile - 環境文件,可執行

* user_cmd - 以當前用戶執行的命令行(需要鏡像支持adduser命令)

* after_cmd - 以root執行的命令行,在執行user_cmd后執行

* local_dir - 存放臨時文件的目錄(要求有權限映射到容器內)

* shared_dir - 存放代碼和產出文件的目錄(要求有權限映射到容器內)

* sh_exec - shell進程,默認為sh

**/

def call(image, needPull, before_cmd, volumes='',params='', profile='', user_cmd='', after_cmd='',

local_dir=env.LOCAL, shared_dir=env.SHARED, sh_exec='sh'){

// ...此處代碼省略...

if( needPull =="no"){

echo "no need to pull image !!! The image exists in local!"

writeFile file:docker_entry_file, text:"""

set -e

docker run --rm ${params} ${volumes} ${image} ${sh_exec} -x -c ${docker_run_file}

"""

}elseif( needPull =="yes"){

writeFile file:docker_entry_file, text:"""

set -e

docker pull ${image}

docker run --rm ${params} ${volumes} ${image} ${sh_exec} -x -c ${docker_run_file}

"""

}

// ...此處代碼省略...

}

由代碼可以看出,通過添加needPull參數,即可由用戶自定義是否需要pull鏡像。

使用舉例:

例如本項目調用pdocker接口利用自制docker鏡像完成代碼圈復雜度檢查:

pnode("${env.NODE_NAME}"){

plll.Check("CCN_DOCKER","CCN_DOCKER",[

run_execute:{ pdocker (

/* image */"docker.zte.com.cn:5000/10010891/lizard:v1",

/* need pull */"no",

/* cmd */"cd /home/code/ && chmod -R 777 * && cd script/VerifyCI/CCNCheck/ && sh +x lizard.sh",

/* volumes */"-v ${env.SHARESPACE}/${env.XXXXX_DIR}:/home",

/* params */"--privileged",

)

},

param:[

report_file:[]

]

]);

}

由于docker.zte.com.cn:5000/10010891/lizard:v1已經存在于我們的外掛節點上,因此此處needPull參數置為no即可控制pdocker內部無需再去pull鏡像。

優化2:擴充框架Update接口,使其支持SVN代碼更新

優化Plll庫代碼,加入UpdateSVN接口來支持SVN庫的代碼檢出與更新

/**

* 功能名稱:Update

* 功能描述:通過SVN更新代碼

**/

defUpdateSVN(name, desc, args){

LogDebug("[DEBUG] Update: ${name}, ${desc}")

args.run_execute ={

dir("${args.scm.path}"){

svn_checkout( args.scm.keyid, args.scm.repo, args.scm.path )

}

}

/* 調用功能適配 */

FunctionAdapter("Update","update", name, desc, args){}

return

}

/**

* 工具名稱:svn_checkout

* 工具描述:svn更新代碼

* 參數描述:

* - keyid: SVN庫的Credentials ID

* - repo: SVN庫Repo路徑

* - path: 代碼下載路徑

**/

def svn_checkout(keyid, repo, path){

checkout([

$class:'SubversionSCM',

additionalCredentials:[],

excludedCommitMessages:'',

excludedRegions:'',

excludedRevprop:'',

excludedUsers:'',

filterChangelog:false,

ignoreDirPropChanges:false,

includedRegions:'',

locations:[

[credentialsId:"${keyid}", depthOption:'infinity', ignoreExternalsOption:true,local:".", remote:"${repo}"]

],

workspaceUpdater:[$class:'UpdateUpdater']

])

return

}

使用舉例:

用戶只需要配置上:

SVN庫的Credentials ID

SVN庫Repo路徑

代碼下載路徑

即可完成SVN代碼檢出和更新,示例如下:

// 先配置好SVN相關參數

env.SVN_KEY_ID ="89a6fe98-8f0c-4fe6-829e-6d1cbda188e1"

env.CASE_DIR ="/jenkins_ci/CASE_TEST/PATH"

env.CASE_SVN_URL ="svn://XXX.XX.XXX.XXX/XXXXXXX/case/XXXX"

// 調用UpdateSVN接口完成SVN庫代碼更新

plll.UpdateSVN('SVN_UP','更新SVN上報文',[

scm:[keyid:"${env.SVN_KEY_ID}", repo:"${env.CASE_SVN_URL}", path:"env.CASE_DIR"],

run_dir:"${->OUTPUT_PATH}"

])

推廣建議

本文章相關優化改進可推廣至需要利用docker鏡像完成相關CI任務和代碼管控涉及SVN庫的項目

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8497

    瀏覽量

    150834
  • Pipeline
    +關注

    關注

    0

    文章

    28

    瀏覽量

    9345

原文標題:干貨 | Jenkins2.0 Pipeline框架(iPipeline)優化實踐之路(一)

文章出處:【微信號:ZTEdeveloper,微信公眾號:中興開發者社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    優化高速接口的時序裕量

    本文將對源同步定時如何優化高速接口時序裕量進行討論。時序預算是對系統正常工作所需時序參數或時序要求的計算。
    發表于 03-20 10:46 ?2623次閱讀
    <b class='flag-5'>優化</b>高速<b class='flag-5'>接口</b>的時序裕量

    LabVIEW 助力優化軟件開發實踐和源代碼控制

    的軟件開發實踐和程序源代碼控制管理。  源代碼控制管理  源代碼控制管理是軟件工程最基本的環節之一(因為它決定了如何對一個應用程序的依賴關系進行存儲、組織管理以及在開發者之間共享,甚至會直接影響程序
    發表于 09-13 09:30

    CoolRunner-II CPLD入門套件上的USB接口可以進行優化嗎?

    親愛的朋友們,作為一個業余愛好者,我想問一個關于通過板載USB端口連接我的CoolRunner-II CPLD入門套件的問題。是否可以使用板載USB設備對CPLD進行編程,然后將其作為已實現應用程序的通信接口進行
    發表于 08-20 10:48

    工業吸塵吸水機谷歌優化推廣,12年實踐經驗

    `工業吸塵器的外貿怎么推廣,網站優化更有效果工業吸塵吸水機谷歌優化推廣,12年實踐經驗掃地機關鍵詞如何SEO優化到GOOGLE首頁 曾經我以為GOOGLE SEO
    發表于 10-28 15:53

    高原環境下TD-SCDMA網絡的優化實踐,不看肯定后悔

    高原環境下TD-SCDMA網絡的優化實踐,不看肯定后悔
    發表于 05-28 06:57

    解讀最佳實踐:倚天 710 ARM 芯片的 Python+AI 算力優化

    710 ARM 芯片上開展的 Python+AI 優化工作,以及在 ARM 云平臺上部署 Python+AI 任務的最佳實踐。以下為本次演講內容:(圖/朱宏林現場演講)我們的場景是 ARM 平臺
    發表于 12-23 16:02

    虛幻引擎的紋理最佳實踐

    紋理是游戲不可或缺的一部分。 這是一個藝術家可以直接控制的領域,以提高游戲的性能。 本最佳實踐指南介紹了幾種紋理優化,這些優化可以幫助您的游戲運行得更流暢、看起來更好。 最佳實踐系列指
    發表于 08-28 06:39

    政府外網優化設計實踐

    政府外網優化設計實踐 摘  要:本文詳細分析了政府外網應用特點,結合當前先進的網絡技術和設備功能及其在管理工作中應用,描述了適用于政府各級部
    發表于 05-23 15:44 ?5次下載

    MySql5.6性能優化最佳實踐

    MySql5.6性能優化最佳實踐
    發表于 09-08 08:47 ?13次下載
    MySql5.6性能<b class='flag-5'>優化</b>最佳<b class='flag-5'>實踐</b>

    iPipeline的對plll庫做出了對應的優化實踐之。

    項目CI系統引入了Jenkins2.0 iPipeline 框架(plll庫)之后應該說提升了很多幸福感,其中一個很重要的方面來源于框架已經為用戶提供了報告和郵件的基本格式,顯示直觀且高效。
    的頭像 發表于 04-05 18:23 ?4854次閱讀
    對<b class='flag-5'>iPipeline</b>的對plll庫做出了對應的<b class='flag-5'>優化</b>并<b class='flag-5'>實踐</b>之。

    如何對C語言程序進行優化

    對程序進行優化,通常是指優化程序代碼或程序執行速度。優化代碼和優化速度實際上是一個予盾的統一,一般是優化
    發表于 11-15 11:08 ?11次下載
    如何對C語言程序<b class='flag-5'>進行</b><b class='flag-5'>優化</b>

    18種接口優化方案匯總1

    之前工作中,遇到一個`504`超時問題。原因是因為接口耗時過長,超過`nginx`配置的`10`秒。然后 真槍實彈搞了一次接口性能優化,最后接口從`11.3s`降為`170ms`。本文
    的頭像 發表于 02-15 15:59 ?833次閱讀
    18種<b class='flag-5'>接口</b><b class='flag-5'>優化</b>方案匯總1

    18種接口優化方案匯總2

    之前工作中,遇到一個`504`超時問題。原因是因為接口耗時過長,超過`nginx`配置的`10`秒。然后 真槍實彈搞了一次接口性能優化,最后接口從`11.3s`降為`170ms`。本文
    的頭像 發表于 02-15 15:59 ?644次閱讀
    18種<b class='flag-5'>接口</b><b class='flag-5'>優化</b>方案匯總2

    接口優化的常見方案實戰總結

    針對老項目,去年做了許多降本增效的事情,其中發現最多的就是接口耗時過長的問題,就集中搞了一次接口性能優化。本文將給小伙伴們分享一下接口優化
    的頭像 發表于 03-06 09:22 ?548次閱讀

    介紹得物App在資源優化上做的一些實踐

    包體積優化中,資源優化一般都是首要且容易有成效的優化方向。資源優化是通過優化APK中的資源項來優化
    的頭像 發表于 07-24 09:00 ?728次閱讀
    介紹得物App在資源<b class='flag-5'>優化</b>上做的一些<b class='flag-5'>實踐</b>