最近重構(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的配置文件拷貝至本地,制作成模板。

2,配置job
模板job主要有兩塊內(nèi)容:
1,【構(gòu)建觸發(fā)器】定時(shí)構(gòu)建

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

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

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

該文件中有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é)果

搞定!分分鐘創(chuàng)建了幾百個(gè)job。
參考
https://wiki.jenkins.io/display/JENKINS/Remote+access+API
批量克隆jenkins的job
https://www.cnblogs.com/znicy/p/5498609.html