Jenkins 为其功能提供了远程访问 API。目前它支持:
xml
和json
格式远程访问 API 以 REST 样式提供。也就是说,没有所有功能的单一入口点,而是在“.../api/
” URL 下提供,其中“...
”部分是它作用的数据。
例如,如果您的 Jenkins 安装在 https://ci.jenkins.io,访问 https://ci.jenkins.io/api/ 只会显示可用的顶级 API 功能
直接调用Jenkins接口会报错误HTTP ERROR 403 No valid crumb was included in the request
,这个是因为默认接口不允许跨域允许,需要增加启动参数后重启Jenkins
这里以容器化Jenkins配置为例
# 以root用户进入容器
docker exec -u root -it jenkins /bin/bash
# 容器是ubuntu ,所以用 apt-get,先安装vim
# 先升级版本
apt-get update
# 在安装 vim
apt-get install vim
修改配置jenkins.sh
vim /usr/local/bin/jenkins.sh
找到exec java
那行,添加配置 -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
,保存退出
添加完成后,最终效果是
exec java -Duser.home="$JENKINS_HOME" -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true "${java_opts_array[@]}" -jar ${JENKINS_WAR} "${jenkins_opts_array[@]}" "$@"
重启Jenkins容器
docker restart jenkins
打开Jenkins-系统管理-全局安全配置,可以看见配置变成下面这样
您只需在 JENKINS_URL/job/JOBNAME/build 上执行 HTTP POST。
这也适用于多分支管道和组织文件夹。这将触发扫描。
注意,以下示例假设
JENKINS_URL = http://192.168.56.114:8080
您只需在 JENKINS_URL/job/JOBNAME/build
上执行 HTTP POST
。
1)执行无参任务parallelsAlwaysFailFast
curl -X POST 'http://192.168.56.114:8080/job/parallelsAlwaysFailFast/build' --user admin:admin123
2)执行带参数任务pipeline_variables
执行带参数任务需调用接口buildWithParameters
curl -X POST 'http://192.168.56.114:8080/job/pipeline_variables/buildWithParameters' --user admin:admin123 --data ENV=prod
1)复制任务
要复制任务,请使用三个查询参数 name=NEWJOBNAME&mode=copy&from=FROMJOBNAME
向此 JENKINS_URL/createItem
发送 POST
请求。
curl -X POST 'http://192.168.56.114:8080/createItem?name=test01&mode=copy&from=test' \
--user admin:admin123
2)创建任务
要创建一个新任务,需要将 config.xml
发布到此 URL 并带上查询参数 name=JOBNAME
。您需要发送 Content-Type: application/xml
头。
如果创建成功,您将收到 200 状态代码,如果失败,则会收到 4xx/5xx 代码。
config.xml
是 Jenkins 用于在文件系统中存储项目的格式,因此您可以在 Jenkins 主目录中看到它们的示例,或者通过从 /job/JOBNAME/config.xml
检索现有作业的 XML 配置来查看它们的示例。
创建新任务api_job_test
设置请求头 Content-Type: application/xml
,并发送data参数的config.xml
内容
curl -L 'http://192.168.56.114:8080/createItem?name=api_job_test' \
-H 'Content-Type: application/xml' \
--user admin:admin123 \
--data '\''1.1'\'' encoding='\''UTF-8'\''?>
false
true
false
'
config.xml代码示例
<flow-definition plugin="[email protected]_58b_86ea_fff1">
<actions>
<org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobAction plugin="[email protected]_3f"/>
<org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobPropertyTrackerAction plugin="[email protected]_3f">
<jobProperties/>
<triggers/>
<parameters/>
<options/>
org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobPropertyTrackerAction>
actions>
<description>description>
<keepDependencies>falsekeepDependencies>
<properties/>
<definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="[email protected]_5707fe44da_">
<script>pipeline {
agent any
environment {
CC = 'clang'
}
stages {
stage('Example') {
environment {
DEBUG_FLAGS = '-g'
}
steps {
sh 'printenv'
}
}
}
}script>
<sandbox>truesandbox>
definition>
<triggers/>
<disabled>falsedisabled>
flow-definition>
1)复制视图
要复制一个视图,请使用三个查询参数 name=NEWVIEWNAME&mode=copy&from=FROMVIEWNAME
向 JENKINS_URL/createView
发送 POST
请求。
示例,从视图View01复制创建新视图View03
curl -X POST 'http://192.168.56.114:8080/createView?name=View05&mode=copy&from=View01' \
--user admin:admin123
2)创建视图
要创建一个新视图,请将 config.xml
发送到 JENKINS_URL/createView
并带上查询参数 name=VIEWNAME
。您需要发送 Content-Type: application/xml
头。
如果创建成功,您将收到 200 状态代码,如果失败,则会收到 4xx/5xx 代码。
config.xml
是 Jenkins 用于在文件系统中存储视图的格式,因此您可以在 Jenkins 主目录中看到它们的示例,或者通过从 /view/VIEWNAME/config.xml
检索现有视图的 XML 配置来查看它们的示例。
视图config.xml示例
<hudson.model.ListView>
<name>testViewname>
<filterExecutors>falsefilterExecutors>
<filterQueue>falsefilterQueue>
<properties class="hudson.model.View$PropertyList"/>
<jobNames>
<comparator class="java.lang.String$CaseInsensitiveComparator"/>
<string>api01string>
<string>api02string>
<string>api03string>
<string>api04string>
jobNames>
<jobFilters/>
<columns>
<hudson.views.StatusColumn/>
<hudson.views.WeatherColumn/>
<hudson.views.JobColumn/>
<hudson.views.LastSuccessColumn/>
<hudson.views.LastFailureColumn/>
<hudson.views.LastDurationColumn/>
<hudson.views.BuildButtonColumn/>
<hudson.plugins.favorite.column.FavoriteColumn plugin="[email protected]_7792a_c"/>
columns>
<recurse>falserecurse>
hudson.model.ListView>
curl -X POST 'http://192.168.56.114:8080/restart' \
--user admin:admin123
JenkinsAPI、Python-Jenkins、api4jenkins、aiojenkins 是 Python REST API 的面向对象的 Python 包装器,旨在提供一种更传统的 Python 方式来控制 Jenkins 服务器。它提供了一个更高级的 API,其中包含许多便利函数。目前提供的服务包括:
jenkins-rest 库是一个面向对象的 Java 项目,它通过编程方式提供对 Jenkins REST API 的访问,以访问 Jenkins 提供的一些远程 API。它使用 jclouds 工具包构建,可以轻松扩展以支持更多 REST 端点。其功能集不断发展,用户可以通过拉取请求贡献新的端点。在当前状态下,使用此库可以提交作业、跟踪其通过队列的进度并监控其执行直到完成,并获取构建状态。目前提供的服务包括:
该项目快速发展,功能还在持续增加中。
Jenkins API 客户端是一个面向对象的 Ruby 包装器项目,它使用 Jenkins 的 JSON API,旨在提供对 Jenkins 提供的所有远程 API 的访问。它作为 Rubygem 提供,可以与 Job、Node、View、BuildQueue 和 System 相关功能进行交互。目前提供的服务包括: