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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

jenkins api_接触Jenkins(Hudson)API,第2部分

發(fā)布時(shí)間:2023/12/3 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jenkins api_接触Jenkins(Hudson)API,第2部分 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

jenkins api

這篇文章從本教程的第1部分繼續(xù)。 已經(jīng)快一年了,但是我終于有時(shí)間重新審視我為與Jenkins api交互而編寫(xiě)的一些代碼。 我已經(jīng)使用了部分工作來(lái)幫助管理許多Jenkins構(gòu)建服務(wù)器,主要是保持插件同步以及將作業(yè)從一臺(tái)機(jī)器移動(dòng)到另一臺(tái)機(jī)器。 在本文中,我將主要關(guān)注CLI jar功能以及您可以使用它進(jìn)行的一些操作。 這主要是針對(duì)Jenkins開(kāi)發(fā)的,但是我對(duì)Hudson進(jìn)行了一些輕量級(jí)測(cè)試,并且可以在我嘗試過(guò)的所有地方工作,因此對(duì)于您選擇的構(gòu)建服務(wù)器,代碼始終是不可知的。

項(xiàng)目結(jié)構(gòu)

該代碼托管在Github上 ,并提供一個(gè)Gradle構(gòu)建,該構(gòu)建可在本地下載并啟動(dòng)Jenkins(或Hudson)服務(wù)器以執(zhí)行測(cè)試。 服務(wù)器設(shè)置為使用Gradle構(gòu)建目錄作為其工作目錄,因此只需執(zhí)行gradle clean即可將其刪除。 我使用所需庫(kù)的Jenkins版本和Hudson版本進(jìn)行了嘗試,除了兩個(gè)CLI實(shí)現(xiàn)之間的一些古怪之處外,它們的功能仍然相同。 如果要使用Hudson而不是Jenkins進(jìn)行嘗試,請(qǐng)傳遞命令標(biāo)志-Pswitch,并將使用適當(dāng)?shù)膚ar和庫(kù)。 該項(xiàng)目旨在與Gradle 1.0-milestone-8一起運(yùn)行,并附帶該版本的Gradle包裝器 。 自原始文章以來(lái),大多數(shù)代碼都保持不變,但是對(duì)Jenkins和Hudson的較新版本進(jìn)行了一些增強(qiáng)和更改。
這個(gè)項(xiàng)目產(chǎn)生的庫(kù)以Maven工件的形式發(fā)布,稍后我將確切描述如何獲得它。 還包括一些示例,這些示例演示了在Gradle或Maven項(xiàng)目中以及在Grapes的Groovy腳本中如何使用該庫(kù)。 我們正在使用Groovy 1.8.6,Gradle 1.0-milestone-8和Maven 3.0.3來(lái)構(gòu)建所有內(nèi)容。

充分利用CLI

作為api的替代,CLI jar是一種非常強(qiáng)大的與構(gòu)建服務(wù)器進(jìn)行交互的方式。 除了各種內(nèi)置命令之外,Groovy腳本還可以遠(yuǎn)程執(zhí)行,而我們只需付出一點(diǎn)努力就可以輕松地序列化響應(yīng),以處理服務(wù)器上提取的數(shù)據(jù)。 作為執(zhí)行環(huán)境,服務(wù)器提供了Groovysh shell并為hudson.model包存儲(chǔ)了導(dǎo)入內(nèi)容 。 該包中Jenkins / Hudson單例對(duì)象的實(shí)例也傳遞到Binding中。 在這些示例中,我使用的是向后兼容的Hudson版本,因?yàn)樵摯a旨在在兩種服務(wù)器上均可運(yùn)行。

可用命令

內(nèi)置命令種類(lèi)繁多,所有這些命令均在hudson.cli包中實(shí)現(xiàn)。 以下是正在運(yùn)行的應(yīng)用程序的CLI頁(yè)面上列出的內(nèi)容:

  • build:構(gòu)建作業(yè),并且可以選擇等待直到完成。
  • cancel-quiet-down:取消“ quiet-down”命令的效果。
  • clear-queue:清除構(gòu)建隊(duì)列
  • connect-node:重新連接到節(jié)點(diǎn)
  • 復(fù)制作業(yè):復(fù)制一份工作。
  • create-job:通過(guò)讀取stdin作為配置XML文件來(lái)創(chuàng)建新作業(yè)。
  • delete-builds:刪除構(gòu)建記錄。
  • delete-job:刪除工作
  • delete-node:刪除節(jié)點(diǎn)
  • disable-job:禁用工作
  • 斷開(kāi)節(jié)點(diǎn):與節(jié)點(diǎn)斷開(kāi)連接
  • enable-job:啟用工作
  • get-job:將作業(yè)定義XML轉(zhuǎn)儲(chǔ)到stdout
  • groovy:執(zhí)行指定的Groovy腳本。
  • groovysh:運(yùn)行交互式groovy shell。
  • help:列出所有可用的命令。
  • install-plugin:從文件,URL或從更新中心安裝插件。
  • install-tool:執(zhí)行自動(dòng)工具安裝,并將其位置打印到stdout。 只能從
    內(nèi)部版本。
  • keep-build:標(biāo)記該構(gòu)建以永久保留該構(gòu)建。
  • list-changes:轉(zhuǎn)儲(chǔ)指定構(gòu)建的變更日志。
  • login:保存當(dāng)前憑證,以允許將來(lái)的命令在沒(méi)有顯式憑證信息的情況下運(yùn)行。
  • 注銷(xiāo):刪除使用登錄命令存儲(chǔ)的憑證。
  • 郵件:讀取stdin并將其作為電子郵件發(fā)送出去。
  • offline-node(離線(xiàn)節(jié)點(diǎn)):停止使用臨時(shí)執(zhí)行構(gòu)建的節(jié)點(diǎn),直到下一個(gè)“ online-node”命令。
  • online-node:在線(xiàn)使用節(jié)點(diǎn)執(zhí)行構(gòu)建,以取消先前的“ offline-node”命令。
  • 安靜:靜默Jenkins,為重新啟動(dòng)做準(zhǔn)備。 不要開(kāi)始任何構(gòu)建。
  • 重新加載配置:丟棄內(nèi)存中所有已加載的數(shù)據(jù),然后從文件系統(tǒng)重新加載所有內(nèi)容。 有用的時(shí)候
    您直接在磁盤(pán)上修改了配置文件。
  • 重新啟動(dòng):重新啟動(dòng)詹金斯
  • 安全重啟:安全重啟詹金斯
  • 安全關(guān)閉:將Jenkins置于安靜模式,等待現(xiàn)有構(gòu)建完成,然后關(guān)閉
    詹金斯
  • set-build-description:設(shè)置構(gòu)建的描述。
  • set-build-display-name:設(shè)置構(gòu)建的displayName
  • set-build-result:設(shè)置當(dāng)前構(gòu)建的結(jié)果。 僅當(dāng)從內(nèi)部調(diào)用時(shí)才有效。
  • shutdown:立即關(guān)閉Jenkins服務(wù)器
  • update-job:從stdin更新作業(yè)定義XML。 與get-job命令相反
  • version:輸出當(dāng)前版本。
  • wait-node-offline:等待節(jié)點(diǎn)脫機(jī)
  • wait-node-online:等待節(jié)點(diǎn)聯(lián)機(jī)
  • 我是誰(shuí):報(bào)告您的憑據(jù)和權(quán)限

目前尚不清楚每個(gè)參數(shù)都需要什么參數(shù),但是在不帶參數(shù)調(diào)用時(shí),它們幾乎都遵循CLI的用法用法打印模式。 例如,當(dāng)您不帶任何參數(shù)調(diào)用build命令時(shí),以下是您在錯(cuò)誤流中返回的內(nèi)容:

參數(shù)“ JOB”為必填項(xiàng)
java -jar jenkins-cli.jar建立args…
開(kāi)始構(gòu)建,然后選擇等待完成。 除了一般的腳本使用之外,該命令還可以 用于從一個(gè)作業(yè)的構(gòu)建中調(diào)用另一個(gè)作業(yè)。 使用-s選項(xiàng),此命令將根據(jù)以下命令更改退出代碼 構(gòu)建的結(jié)果(退出代碼0表示成功。) 使用-c選項(xiàng),只有在存在 SCM變更 職位:要建立的工作名稱(chēng) -c:在開(kāi)始構(gòu)建之前檢查SCM更改,如果沒(méi)有,請(qǐng)檢查 更改,不進(jìn)行構(gòu)建即退出 -p:以鍵=值格式指定構(gòu)建參數(shù)。 -s:等待命令完成/中止

從系統(tǒng)中取出數(shù)據(jù)

與遠(yuǎn)程系統(tǒng)的所有交互都由流處理,編寫(xiě)腳本非常容易,這些腳本將使用內(nèi)置的Groovy工具以易于解析的String格式返回?cái)?shù)據(jù)。 從理論上講,您還應(yīng)該能夠封送更復(fù)雜的對(duì)象,但是現(xiàn)在讓我們保持簡(jiǎn)單。 這是一個(gè)Groovy腳本,該腳本僅將所有作業(yè)名稱(chēng)提取到List中,調(diào)用Groovy inspect方法引用所有值。

@GrabResolver(name = 'glassfish', root = 'http://maven.glassfish.org/content/groups/public/') @GrabResolver(name = "github", root = "http://kellyrob99.github.com/Jenkins-api-tour/repository") @Grab('org.kar:hudson-api:0.2-SNAPSHOT') @GrabExclude('org.codehaus.groovy:groovy') import org.kar.hudson.api.cli.HudsonCliApiString rootUrl = 'http://localhost:8080' HudsonCliApi cliApi = new HudsonCliApi() OutputStream out = new ByteArrayOutputStream() cliApi.runCliCommand(rootUrl, ['groovysh', 'hudson.jobNames.inspect()'], System.in, out, System.err) List allJobs = Eval.me(cliApi.parseResponse(out.toString())) println allJobs

收到響應(yīng)后,我們將做一些整理工作以刪除String開(kāi)頭的一些多余字符,并使用Eval.me將String轉(zhuǎn)換為L(zhǎng)ist。 Groovy提供了多種將文本轉(zhuǎn)換為代碼的方法,因此,如果您的使用情況比這種簡(jiǎn)單情況復(fù)雜,則可以使用帶有Binding或其他替代方法的GroovyShell將結(jié)果解析為有用的東西。 這種簡(jiǎn)單的技術(shù)也擴(kuò)展到了Maps和其他類(lèi)型,從而使得處理從服務(wù)器發(fā)送回的數(shù)據(jù)變得簡(jiǎn)單。

一些有用的例子

查找具有更新的插件并更新所有插件

這是一個(gè)使用Groovy腳本查找所有具有可用更新的插件,然后將結(jié)果返回給調(diào)用者,然后在所有插件上調(diào)用CLI'install-plugin'命令的示例。 方便地,此命令將安裝插件(如果尚未安裝)或?qū)⑵涓碌阶钚掳姹?#xff08;如果已安裝)。

def findPluginsWithUpdates = ''' Hudson.instance.pluginManager.plugins.inject([]) { List toUpdate, plugin ->if(plugin.hasUpdate()){toUpdate << plugin.shortName}toUpdate }.inspect() ''' OutputStream updateablePlugins = new ByteArrayOutputStream() cliApi.runCliCommand(rootUrl, ['groovysh', findPluginsWithUpdates], System.in, updateablePlugins, System.err)def listOfPlugins = Eval.me(parseOutput(updateablePlugins.toString())) listOfPlugins.each{ plugin ->cliApi.runCliCommand(rootUrl, ['install-plugin', plugin]) }

一次安裝或升級(jí)一套插件

使用“管理插件” UI絕對(duì)可以勝任,并且是冪等的,因此多次運(yùn)行它只會(huì)導(dǎo)致可能升級(jí)已安裝的插件。 這套插件可能有些過(guò)分,但是我最近調(diào)查了一些插件以供使用。

@GrabResolver(name='glassfish', root='http://maven.glassfish.org/content/groups/public/') @GrabResolver(name="github", root="http://kellyrob99.github.com/Jenkins-api-tour/repository") @Grab('org.kar:hudson-api:0.2-SNAPSHOT') @GrabExclude('org.codehaus.groovy:groovy') import static java.net.HttpURLConnection.* import org.kar.hudson.api.* import org.kar.hudson.api.cli.HudsonCliApiString rootUrl = 'http://localhost:8080' HudsonCliApi cliApi = new HudsonCliApi()['groovy', 'gradle', 'chucknorris', 'greenballs', 'github', 'analysis-core', 'analysis-collector', 'cobertura','project-stats-plugin','audit-trail', 'view-job-filters', 'disk-usage', 'global-build-stats','radiatorviewplugin', 'violations', 'build-pipeline-plugin', 'monitoring', 'dashboard-view','iphoneview', 'jenkinswalldisplay'].each{ plugin ->cliApi.runCliCommand(rootUrl, ['install-plugin', plugin]) }// Restart a node, required for newly installed plugins to be made available. cliApi.runCliCommand(rootUrl, 'safe-restart')

查找所有失敗的構(gòu)建并觸發(fā)它們

網(wǎng)絡(luò)問(wèn)題或基礎(chǔ)設(shè)施事件可能導(dǎo)致大量構(gòu)建一次全部失敗,這并非罕見(jiàn)。 解決問(wèn)題后,此腳本可用于驗(yàn)證構(gòu)建是否均正常工作。

@GrabResolver(name = 'glassfish', root = 'http://maven.glassfish.org/content/groups/public/') @GrabResolver(name = "github", root = "http://kellyrob99.github.com/Jenkins-api-tour/repository") @Grab('org.kar:hudson-api:0.2-SNAPSHOT') @GrabExclude('org.codehaus.groovy:groovy') import org.kar.hudson.api.cli.HudsonCliApiString rootUrl = 'http://localhost:8080' HudsonCliApi cliApi = new HudsonCliApi() OutputStream out = new ByteArrayOutputStream() def script = '''hudson.items.findAll{ job ->job.isBuildable() && job.lastBuild && job.lastBuild.result == Result.FAILURE }.collect{it.name}.inspect() ''' cliApi.runCliCommand(rootUrl, ['groovysh', script], System.in, out, System.err) List failedJobs = Eval.me(cliApi.parseResponse(out.toString())) failedJobs.each{ job ->cliApi.runCliCommand(rootUrl, ['build', job]) }

打開(kāi)一個(gè)交互式Groovy Shell

如果您確實(shí)想在服務(wù)器上戳戳,則可以啟動(dòng)一個(gè)交互式外殼程序以檢查狀態(tài)并執(zhí)行命令。 綁定了System.in流,并立即回顯了來(lái)自服務(wù)器的響應(yīng)。

@GrabResolver(name = 'glassfish', root = 'http://maven.glassfish.org/content/groups/public/') @GrabResolver(name = "github", root = "http://kellyrob99.github.com/Jenkins-api-tour/repository") @Grab('org.kar:hudson-api:0.2-SNAPSHOT') @GrabExclude('org.codehaus.groovy:groovy') import org.kar.hudson.api.cli.HudsonCliApi /*** Open an interactive Groovy shell that imports the hudson.model.* classes and exposes* a 'hudson' and/or 'jenkins' object in the Binding which is an instance of hudson.model.Hudson*/ HudsonCliApi cliApi = new HudsonCliApi() String rootUrl = args ? args[0] :'http://localhost:8080' cliApi.runCliCommand(rootUrl, 'groovysh')

項(xiàng)目更新

去年發(fā)生了很多事情,所有項(xiàng)目依賴(lài)項(xiàng)都需要更新。 特別是,對(duì)Groovy,Gradle和Spock進(jìn)行了一些非常不錯(cuò)的改進(jìn)。 最值得注意的是,從0.9.2版開(kāi)始,Gradle已經(jīng)走了很長(zhǎng)一段路。 Groovy 1.8中添加的JSON支持也很方便。 Spock在使用@Unroll時(shí)需要進(jìn)行一些小的調(diào)整才能在測(cè)試報(bào)告中呈現(xiàn)動(dòng)態(tài)內(nèi)容,但這對(duì)于“老”方法和“ 鏈?zhǔn)酱娓?”之類(lèi)的功能來(lái)說(shuō)是一筆不小的代價(jià)。 本質(zhì)上,為了響應(yīng)Groovy 1.8+中的更改,Spock @Unroll注釋需要從以下更改:

@Unroll('querying of #rootUrl should match #xmlResponse')

閉包封裝的GString表達(dá)式:

@Unroll({'querying of $rootUrl should match $xmlResponse'})

聽(tīng)起來(lái)語(yǔ)法似乎還在不斷變化,我很高興在網(wǎng)上找到了關(guān)于該問(wèn)題的討論 。

在Github上托管Maven存儲(chǔ)庫(kù)

也許您從前面的腳本示例中注意到了,我們正在引用一個(gè)已發(fā)布的庫(kù)來(lái)獲取HudsonCliApi類(lèi)。 上周 ,我讀了一篇有趣的文章 ,描述了如何使用內(nèi)置的Github Pages發(fā)布Maven存儲(chǔ)庫(kù)。 盡管它的功能不如Nexus或Artifactory這樣的存儲(chǔ)庫(kù),但足以以標(biāo)準(zhǔn)方式將一些二進(jìn)制文件提供給大多數(shù)常見(jiàn)的構(gòu)建工具。 只需在標(biāo)準(zhǔn)Maven回購(gòu)布局中發(fā)布二進(jìn)制文件以及關(guān)聯(lián)的Pom,即可開(kāi)始比賽! 每個(gè)依賴(lài)項(xiàng)管理系統(tǒng)都有其怪癖(我在看著您Ivy!),但是它們很容易解決,因此這里是Gradle,Maven和Groovy Grapes使用此項(xiàng)目代碼生成的庫(kù)的示例。 請(qǐng)注意,Jenkins / Hudson所需的某些依賴(lài)項(xiàng)在Maven中央存儲(chǔ)庫(kù)中不可用,因此我們從Glassfish存儲(chǔ)庫(kù)中獲取它們。

Gradle

非常簡(jiǎn)單,這適用于最新版本的Gradle,并假定您使用的是Groovy插件。

repositories {mavenCentral()maven {url 'http://maven.glassfish.org/content/groups/public/'}maven {url 'http://kellyrob99.github.com/Jenkins-api-tour/repository'} } dependencies {groovy 'org.codehaus.groovy:groovy-all:${versions.groovy}'compile 'org.kar:hudson-api:0.2-SNAPSHOT' }

Maven

xml中的內(nèi)容基本相同,在這種情況下,假設(shè)您使用的是GMaven插件

<repositories><repository><id>glassfish</id><name>glassfish</name><url>http://maven.glassfish.org/content/groups/public/</url></repository><repository><id>github</id><name>Jenkins-api-tour maven repo on github</name><url>http://kellyrob99.github.com/Jenkins-api-tour/repository</url></repository> </repositories><dependencies><dependency><groupId>org.codehaus.groovy</groupId><artifactId>groovy-all</artifactId><version>${groovy.version}</version></dependency><dependency><groupId>org.kar</groupId><artifactId>hudson-api</artifactId><version>0.2-SNAPSHOT</version></dependency> </dependencies>

葡萄

在這種情況下,解決舊版本Groovy的某些傳遞依賴(lài)關(guān)系似乎存在問(wèn)題,這就是為什么對(duì)此有明確排除的原因。

@GrabResolver(name='glassfish', root='http://maven.glassfish.org/content/groups/public/') @GrabResolver(name='github', root='http://kellyrob99.github.com/Jenkins-api-tour/repository') @Grab('org.kar:hudson-api:0.2-SNAPSHOT') @GrabExclude('org.codehaus.groovy:groovy')

鏈接

  • Github Jenkins-api-tour項(xiàng)目頁(yè)面
  • Github上的Maven存儲(chǔ)庫(kù)
  • 腳本程序示例Groovy腳本
  • Jenkins CLI文檔
  • 相關(guān)文章:

  • 接觸Jenkins(Hudson)API
  • 使用Groovy腳本可以做的五件事
  • 展示StackExchange API的Grails應(yīng)用
  • 參考: 《 The Kaptain on…東西》博客中的JCG合作伙伴 Kelly Robinson 的Jenkins(Hudson)API的第2部分 。


    翻譯自: https://www.javacodegeeks.com/2012/08/hooking-into-jenkins-hudson-api-part-2.html

    jenkins api

    總結(jié)

    以上是生活随笔為你收集整理的jenkins api_接触Jenkins(Hudson)API,第2部分的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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