jenkins 批量添加任务job

最近重构一个Scrapy爬虫项目,需要将300个spider的调度任务在jenkins中添加。这已经超过了手动一个一个添加任务的极限,是时候要借助工具批量添加了。

Jenkins API

Jenkins提供了一套远端访问的API,目前有3种方式:

  • XML

  • JSON with JSONP support

  • Python

远程API可以执行以下这些功能:

  • 创建/复制 job

  • 触发一个新的构建

  • 查询Jenkins的运行状态

Jenkins Job模板

1,创建job

本文的思路是先在网页上手动创建一个Job,然后将Job的配置文件拷贝至本地,制作成模板。

image

2,配置job

模板job主要有两块内容:

1,【构建触发器】定时构建

image
  • 【构建】执行shell
image

其中HOST_TEST,PROJECT_TEST是在jenkins系统配置中设置的环境变量,目的是为了更换scrapyd服务器时更加灵活。

image

3,制作模板

进入到jenkins的安装目录(默认为/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>

批量创建的job主要差异在spider名称和crontab定时任务的设置不同,将这两处模板化:

config.xml

image

该文件中有4个变量要配置:

  • crontab_value

  • spider_name

  • HOST_TEMPLATE

  • PROJECT_TEMPLATE

Python-Jenkins脚本批量创建job

1,安装


pip install python-jenkins

2,脚本

import jenkins
template_xml="config.xml"
#与网页版Jenkins登录的账号、密码一致
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,结果

image

搞定!分分钟创建了几百个job。

参考

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,359评论 6 343
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,568评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 按住鼠标右键,快速滑动。小学如白驹过隙,只剩下哀叹。呼,长出一口气,终于决定切掉小学这段,后面可能切掉初中和高中的...
    兰精灵不是蓝阅读 202评论 0 0
  • 或许,没出过远门,很想出去走走。 习惯了身边时时刻刻都有人围着你团团转也觉得有点厌倦了现在, 更多的时刻,都是自己...
    叶片_bcac阅读 213评论 0 1