使用PHP连接到Jenkins Remote API



为了为我们的应用程序创建一个统一的CICD流程,我试图连接到我的Jenkins Remote Access API,利用此(记录不足的)Jenkins-PHP API,这实际上是用于用于访问远程网站的卷曲功能。

这是我的测试连接:

$uname = '';
$pword = '';
$api_token = ''; // not yet used
$jenkins = new JenkinsKhanJenkins("http://$uname:$pword@jenkins.svc.local/jobs");
var_dump($jenkins->isAvailable());

此返回:

bool(false)

isAvailable()功能,Jenkins API类的一部分是:

public function isAvailable()
{
    $curl = curl_init($this->baseUrl . '/api/json');
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_exec($curl);
    if (curl_errno($curl)) {
        return false;
    } else {
        try {
            $this->getQueue();
        } catch (RuntimeException $e) {
            //en cours de lancement de jenkins, on devrait passer par là
            return false;
        }
    }
    return true;
}

编辑:我在功能中的条件中添加了echo curl_error($curl);,然后返回:

无法解决主机%mada

注意:我正在运行的Web服务器,Jenkins实例位于同一网络上,Jenkins实例是可Ping的。

我在堆栈溢出上发现了一些未解决的问题,这些问题与此相似,但没有其他问题直接解决连接到Jenkins实例的问题。

如果我更改URL字符串(删除用户名,将密码替换为API令牌等)。我至少会最多得到身份验证错误,至少是403(访问权限),所以我觉得好像我正在取得进展,但我认为詹金斯实例没有真正的身份验证。

我在这里错过了一些明显的东西吗?如何与Jenkins Remote API建立真正的连接?

事实证明,使用Jenkinskahn API类存在一些问题。我只能责怪自己,因为一年没有对该项目没有维护,所以我当前版本的詹金斯不会做出正确的回应,但这确实给了我一些提示。p>给定错误是:

无法解析主机

我开始查看我要访问的主机字符串,并确定将用户名和密码放在字符串中使主机无法解析(得益于某些问题/询问/prodding由一个好朋友)。仅使用主机字符串导致:

访问被拒绝(403)

首先,这意味着我要到达主机,但是我无法访问。因此,我写了一些纯净的卷曲来处理主机字符串中不包括用户名和密码的问题,而是让卷曲进行身份验证。

第二,如果我附加了'/api/json'(根据詹金的文档,关于该主题的文档),请在我的网络浏览器中的URL上,我会恢复一个JSON字符串。因此,我确保在我的卷曲呼叫末尾包含'/api/json'。

这是我最终得到的:

$url = "http://jenkins.svc.local/jobs/api/json";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$uname:$pword");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTHBASIC);
$output = curl_exec($ch);
curl_close($ch);
print_r(json_decode($output, true));

现在,这返回了我期望看到和互动的一系列信息。剩下要做的就是根据需要使用数据并在需要时执行命令。

最新更新