jenkins 批量添加任務(wù)job

最近重構(gòu)一個(gè)Scrapy爬蟲項(xiàng)目,需要將300個(gè)spider的調(diào)度任務(wù)在jenkins中添加。這已經(jīng)超過了手動(dòng)一個(gè)一個(gè)添加任務(wù)的極限,是時(shí)候要借助工具批量添加了。

Jenkins API

Jenkins提供了一套遠(yuǎn)端訪問的API,目前有3種方式:

  • XML

  • JSON with JSONP support

  • Python

遠(yuǎn)程API可以執(zhí)行以下這些功能:

  • 創(chuàng)建/復(fù)制 job

  • 觸發(fā)一個(gè)新的構(gòu)建

  • 查詢Jenkins的運(yùn)行狀態(tài)

Jenkins Job模板

1,創(chuàng)建job

本文的思路是先在網(wǎng)頁上手動(dòng)創(chuàng)建一個(gè)Job,然后將Job的配置文件拷貝至本地,制作成模板。

image

2,配置job

模板job主要有兩塊內(nèi)容:

1,【構(gòu)建觸發(fā)器】定時(shí)構(gòu)建

image
  • 【構(gòu)建】執(zhí)行shell
image

其中HOST_TEST,PROJECT_TEST是在jenkins系統(tǒng)配置中設(shè)置的環(huán)境變量,目的是為了更換scrapyd服務(wù)器時(shí)更加靈活。

image

3,制作模板

進(jìn)入到j(luò)enkins的安裝目錄(默認(rèn)為/var/lib/jenkins/),在/var/lib/jenkins/jobs/【采集】template目錄下找到config.xml文件,拷貝至本地


<?xml version="1.1" encoding="UTF-8"?><project>

  <actions/>

  <description/>

  <keepDependencies>false</keepDependencies>

  <properties/>

  <scm class="hudson.scm.NullSCM"/>

  <canRoam>true</canRoam>

  <disabled>false</disabled>

  <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>

  <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>

  <triggers>

    <hudson.triggers.TimerTrigger>

      <spec>0 12 * * *</spec>

    </hudson.triggers.TimerTrigger>

  </triggers>

  <concurrentBuild>false</concurrentBuild>

  <builders>

    <hudson.tasks.Shell>

      <command>curl ${HOST_TEST}/schedule.json -d project=${PROJECT_TEST} -d spider='tt_test_spider'</command>

    </hudson.tasks.Shell>

  </builders>

  <publishers/>

  <buildWrappers/>

</project>

批量創(chuàng)建的job主要差異在spider名稱和crontab定時(shí)任務(wù)的設(shè)置不同,將這兩處模板化:

config.xml

image

該文件中有4個(gè)變量要配置:

  • crontab_value

  • spider_name

  • HOST_TEMPLATE

  • PROJECT_TEMPLATE

Python-Jenkins腳本批量創(chuàng)建job

1,安裝


pip install python-jenkins

2,腳本

import jenkins
template_xml="config.xml"
#與網(wǎng)頁版Jenkins登錄的賬號(hào)、密碼一致
server = jenkins.Jenkins('http://yourip:8080/', username='admin', password='admin')

job_list = {   
    "test1_spider": "30 2 * * *",
    "test2_spider": "30 3 * * *",
    "test3_spider": "55 11,23 * * *",
}

classify = '采集'
host = 'http://0.0.0.0:6800/'
project = 'test_spider'

for spider_name, crontab in job_list.items():
    with open(template_xml) as f:
        profile = f.read()

    JOB_CONFIG=profile.replace("crontab_value", crontab)\
        .replace("spider_name",spider_name)\
        .replace("HOST_TEMPLATE", host)\
        .replace("PROJECT_TEMPLATE", project)

    print(JOB_CONFIG[-200:])

    view_name = "【{}】{}_".format(classify, type)
    server.create_job(view_name+name, JOB_CONFIG)
    # del_job=server.delete_job(view_name+name)
    # print(del_job)

3,結(jié)果

image

搞定!分分鐘創(chuàng)建了幾百個(gè)job。

參考

https://wiki.jenkins.io/display/JENKINS/Remote+access+API
批量克隆jenkins的job
https://www.cnblogs.com/znicy/p/5498609.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,253評(píng)論 6 342
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,753評(píng)論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 按住鼠標(biāo)右鍵,快速滑動(dòng)。小學(xué)如白駒過隙,只剩下哀嘆。呼,長出一口氣,終于決定切掉小學(xué)這段,后面可能切掉初中和高中的...
    蘭精靈不是藍(lán)閱讀 293評(píng)論 0 0
  • 或許,沒出過遠(yuǎn)門,很想出去走走。 習(xí)慣了身邊時(shí)時(shí)刻刻都有人圍著你團(tuán)團(tuán)轉(zhuǎn)也覺得有點(diǎn)厭倦了現(xiàn)在, 更多的時(shí)刻,都是自己...
    葉片_bcac閱讀 267評(píng)論 0 1

友情鏈接更多精彩內(nèi)容