mogman1/jenkins-web-api

用于与Jenkins Web API通信的PHP库。

1.0.0 2014-06-14 02:04 UTC

This package is not auto-updated.

Last update: 2024-09-24 02:00:07 UTC


README

Build Status

我在完成这个项目时,多少有些尴尬地发现,已经有其他两个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返回的内容,就能将其转换为完全的对象。