所有文章 > 学习各类API > 用RESTAPI远程访问你的Jenkins
用RESTAPI远程访问你的Jenkins

用RESTAPI远程访问你的Jenkins

Jenkins提供了功能强大的远程访问API,使得用户可以通过REST风格的接口对其进行远程控制。无论是触发任务,创建任务,还是管理视图,都可以通过简单的HTTP请求来完成。Jenkins的API支持多种语言的包装器,包括Python、Java和Ruby,使开发者可以根据自己的编程环境选择合适的工具进行集成。本文详细介绍了如何通过REST API配置和管理Jenkins实例,包括如何解决跨域访问问题,如何使用Python、Java和Ruby的API包装器等内容。

Jenkins 的远程访问 API

Jenkins 为其功能提供了远程访问 API,支持多种语言接口,如 REST API、Python、Java 和 Ruby 包装接口。这使得开发者可以在不同的编程环境中远程控制 Jenkins。

Jenkins API

CSRF 跨域保护解决方案

当直接调用 Jenkins 接口时,可能会遇到 HTTP ERROR 403 No valid crumb was included in the request 的错误。这是因为默认情况下,Jenkins 的接口不允许跨域请求。我们可以通过修改 Jenkins 的配置来解决此问题。

配置步骤

首先,进入 Jenkins 容器并修改配置文件 jenkins.sh,添加 -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true 参数。

# 进入 Jenkins 容器
$ docker exec -u root -it jenkins /bin/bash

# 修改配置文件
$ vim /usr/local/bin/jenkins.sh

然后重启 Jenkins 容器:

# 重启 Jenkins
$ docker restart jenkins

配置完成后,打开 Jenkins 的“系统管理-全局安全配置”,确认设置已生效。

Jenkins CSRF 配置

常用接口介绍

Jenkins 提供了一系列的 API 接口,支持通过 HTTP 请求来进行任务的触发、创建和管理。

触发任务执行

可以通过 HTTP POST 请求触发 Jenkins 任务的执行。例如,无参任务 parallelsAlwaysFailFast 可以这样触发:

curl -X POST 'http://192.168.56.114:8080/job/parallelsAlwaysFailFast/build' --user admin:admin123

对于带参数的任务,如 pipeline_variables,需调用 buildWithParameters 接口:

curl -X POST 'http://192.168.56.114:8080/job/pipeline_variables/buildWithParameters' --user admin:admin123 --data ENV=prod

创建任务

要在 Jenkins 中创建任务,可以使用 POST 请求发送 config.xml 文件到 Jenkins 服务器。

curl -L 'http://192.168.56.114:8080/createItem?name=api_job_test' 
-H 'Content-Type: application/xml' 
--user admin:admin123 
--data ''

Jenkins API 接口支持的 SDK

Jenkins 提供了多种 SDK 来支持 API 调用,帮助开发者在不同语言环境下更方便地操作 Jenkins。

Python API 包装器

Python 的 JenkinsAPI、Python-Jenkins、api4jenkins 和 aiojenkins 是针对 Jenkins REST API 的 Python 包装器,提供面向对象的接口,使得通过 Python 控制 Jenkins 更加简便。

Java API 包装器

jenkins-rest 是一个 Java 项目,提供对 Jenkins REST API 的访问,支持通过编程方式进行作业提交、监控等操作。

Ruby API 包装器

Jenkins API 客户端是 Ruby 的包装器,使用 JSON API 来控制 Jenkins,支持作业和视图的创建和管理。

参考

通过本文的介绍,您可以更好地利用 Jenkins 的远程访问 API 来简化持续集成的管理和操作过程。

FAQ

问:如何通过 REST API 远程访问 Jenkins?

  • 答:Jenkins 提供了多种语言接口的远程访问 API,包括 REST API、Python、Java 和 Ruby 包装接口。这些接口允许开发者在不同的编程环境中远程控制 Jenkins,从而简化持续集成的管理和操作过程。

问:如何解决 Jenkins API 的 CSRF 跨域请求问题?

  • 答:当直接调用 Jenkins 接口时,可能会遇到 HTTP ERROR 403 No valid crumb was included in the request 的错误。这是因为 Jenkins 默认启用了 CSRF 保护。可以通过进入 Jenkins 容器,修改 jenkins.sh 配置文件,添加 -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true 参数,然后重启 Jenkins 来解决。

问:如何使用 Jenkins API 触发任务执行?

  • 答:可以通过 HTTP POST 请求来触发 Jenkins 任务的执行。对于无参任务,可以直接使用 build 接口;对于带参数的任务,需要使用 buildWithParameters 接口,并在请求中附加参数数据。

问:如何通过 Jenkins API 创建新任务?

  • 答:可以使用 POST 请求将 config.xml 文件发送到 Jenkins 服务器来创建新任务。请求需要包括任务名称和有效的 XML 配置数据。

问:Jenkins API 可以通过哪些 SDK 进行调用?

  • 答:Jenkins 提供了多种 SDK 来支持 API 调用,包括 Python 的 JenkinsAPI、Python-Jenkins、api4jenkins 和 aiojenkins,Java 的 jenkins-rest,以及 Ruby 的 Jenkins API 客户端。这些 SDK 提供了面向对象的接口,帮助开发者在各自语言环境中操作 Jenkins 更加便捷。
#你可能也喜欢这些API文章!