背景:前一節搭建jenkins並創建了job任務後,用戶可以在jenkins平臺手動點擊構建來執行pytest自動化任務,想實現一個從web界面去觸發構建jenkins中的job任務,在這選擇使用php來調用jenkins-api去觸發構建
安裝php-jenkins-api包
# composer安裝,使用的是外國友人寫的一個包,該包也是基於別人的進行了部分擴展
composer require chbiel/jenkins-php-api
php調用php-jenkins-api方法構建job
# 以下是一個自定義的service文件:JenkinsApiService.php
<?php
/**
* Created by PhpStorm.
* User: wkk
* Time: 2022/10/21 - 00:26
* Desc: <jenkins-api操作jenkins>
*/
namespace app\common\service\jenkins;
use JenkinsApi\Item\Job;
use JenkinsApi\Jenkins;
class JenkinsApiService
{
private Jenkins $jenkins;
private $token; // token密鑰:php調用jenkins-api時需要的,在這不使用用戶名和密碼
private $userName; // jenkins用戶名
private $jenkinsHost; // jenkins系統host:port
public function __construct()
{
$this->token = env('JENKINS.APITEST_TOKEN');
$this->userName = env('JENKINS.JENKINS_USER');
$this->jenkinsHost = env('JENKINS.JENKINS_HOST');
$this->jenkins = new Jenkins("http://{$this->userName}:{$this->token}@{$this->jenkinsHost}");
}
/**
* 獲取job信息
*
* @param $jobName
* @return Job|null
*/
public function getJob($jobName): ?Job
{
return $this->jenkins->getJob($jobName);
}
/**
* 構建job
*
* @param $jobName
* @return bool
*/
public function buildJob($jobName): bool
{
return $this->getJob($jobName)->launch();
}
}
使用方法
# goujian
/**
* 構建job任務
* @param $jobName
* @return bool
*/
public static function buildJob($jobName): bool
{
try {
$jenkinsService = new JenkinsApiService();
$res = $jenkinsService->buildJob($jobName);
} catch (\Exception $e){
// todo log日誌
$res = false;
}
return $res;
}