jenkins 批量添加任务job

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

最近重构一个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

目录
相关文章
|
2月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
83 0
|
2月前
|
jenkins Shell 持续交付
【10月更文挑战第3天】通过jenkins的pipline执行任务
【10月更文挑战第3天】通过jenkins的pipline执行任务
|
2月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
254 0
|
7月前
|
存储 jenkins Shell
Jenkins Pipeline 流水线任务 补充篇
Jenkins Pipeline 流水线任务 补充篇
250 1
|
存储 Kubernetes jenkins
k8s初探(6)-Jenkins自动部署(2) 利用git软件向jenkins发送构建任务
k8s初探(6)-Jenkins自动部署(2) 利用git软件向jenkins发送构建任务
569 1
|
jenkins Shell 持续交付
docker部署Jenkins与任务创建【七千字超详细指南】
docker部署Jenkins与任务创建【七千字超详细指南】
946 0
|
运维 jenkins Devops
Jenkins创建多分支job
Jenkins创建多分支job
190 0
Jenkins创建多分支job
|
jenkins 持续交付
Jenkins 利用Dashboard View插件管理任务视图
Jenkins 利用Dashboard View插件管理任务视图
430 0
|
jenkins Java 程序员
远程触发Jenkins的Pipeline任务的并发问题处理
上一篇实战了通过Http请求远程触发指定的Jenkins任务,并且将参数传递给Jenkins任务的Pipeline脚本使用,文末提到有个并发问题留待本文来处理
287 0
远程触发Jenkins的Pipeline任务的并发问题处理
|
jenkins Java 程序员
远程触发Jenkins的Pipeline任务
实战远程触发Jenkins的Pipeline任务
686 0
远程触发Jenkins的Pipeline任务