mogman1 / jenkins-web-api
用于与Jenkins Web API通信的PHP库。
Requires
- php: >=5.3
Requires (Dev)
- phpunit/phpunit: 4.1.*
This package is not auto-updated.
Last update: 2024-09-24 02:00:07 UTC
README
我在完成这个项目时,多少有些尴尬地发现,已经有其他两个Jenkins PHP库存在了。诚然,目前这个库并没有开辟新的领域,它除了能够触发远程构建外,还提供了一个API,用于读取Jenkins中最常用的数据。正在制作中的未来版本将允许在Jenkins上创建新对象(如作业),以及读取它们。
目前,以下数据对象得到支持
- 作业
- 构建
- 节点
- 队列项
- 视图
安装
可以使用composer安装此包
"require": {
"mogman1/jenkins-web-api": "1.*"
}
用法
所有ApiObject的实现都使用Jenkins类与您的Jenkins服务器通信,实际连接信息由Http类管理
use mogman1\Jenkins\Jenkins use mogman1\Jenkins\Server\Http $http = new Http("http://jenkins-server", "jenkinsUsername", "userAccessToken"); $jenkins = new Jenkins($http);
该库假定Jenkins的CSRF crumb标记正在使用中,并且会自动为每个请求获取一个crumb(未来的版本将检查是否使用crumbs,并根据情况更改行为)。
Jenkins类可以用来获取顶级信息,例如关于可用视图的信息,Jenkins节点或可用作业的信息。
$node = $jenkins->getNodeInfo(); foreach ($node->jobs as $job) { echo $job->name."\n"; echo $job->url."\n"; echo $job->color."\n"; }
当对象作为从其他对象获取的信息的一部分返回时,例如从节点对象返回的作业,它们通常处于减少信息状态,以最小化在需要之前对Jenkins的信息调用。要获取该对象的所有可用字段,或简单地从服务器获取最新信息,请使用update()方法
$job->update(); //access to additional fields, such as past builds foreach ($job->builds as $build) { echo $build->number."\n"; }
您也可以直接获取您已知的作业名称,这将返回所有已加载的信息(无需调用update())。
$job = $jenkins->getJob("jenkins-web-api"); //go crazy
作业对象也可以触发构建。如果您为作业启用了参数,您可以将它们作为数组传递。如果您的作业需要额外的身份验证令牌,您需要将此作为参数之一传递。这里的返回值是QueueItem,因为Jenkins不会立即创建实际的构建(参见此评论来自Jenkins问题跟踪器)。
获取您触发的构建信息可能需要一些技巧。通常,队列项会在Jenkins队列中停留几秒钟,然后才会被Jenkins处理,因此您必须轮询此对象,直到构建在QueueItem::$executable下可用。但是,请注意,最终队列项会从Jenkins队列中删除,您将无法再获取有关它的数据(您将收到一个404响应,这会触发一个异常)。我的经验是,在它消失之前您有很多时间,但请记住这一点。
$queueItem = $job->triggerBuild(array('token' => "secret", 'param1' => "val1")); $build = null; try { while (!$queueItem->executable) { $queueItem->update() sleep(1); } $build = $queueItem->executable; } catch (JenkinsConnectionException $e) { //couldn't get build info } echo $build->getConsoleLog();
最后,您可以直接通过Jenkins服务器使用Jenkins类上的get()方法运行查询。第一个参数是要查询的服务器路径,第二个是要与请求一起提交的任何参数的关联数组。返回类型是HttpResponse
$httpResponse = $jenkins->get("/job/your-job", array()); echo $httpResponse->getBody();
对于其他所有内容,请查看代码。所有方法和属性都已注释,以解释它们的功能(根据我当时的知识)。请随时与我联系,提出功能请求、错误修复或其他任何问题。
期待未来
我知道有一些地方将会在不久的将来进行接口破坏性更改。
- 用户
- 健康报告(作业)
- 操作(多个类)
- 属性(作业)
基本上,任何返回数组的场景,我希望一旦我更好地理解Jenkins返回的内容,就能将其转换为完全的对象。