我们有一个JIRA实例,我们在Laravel中构建的自定义PHP应用程序来自每个问题,看看是否存在特定的分支或标记:
chdir($path . $repo);
exec("git rev-parse --verify ".$branch, $branch_dump, $return_var);
if ($return_var == 0) {
return true;
} else {
return false;
}
但是,我们已经将所有git项目迁移到GitLab,并且该方法不再有效,因为您需要root才能进入GitLab的repo数据目录。
我们查看了GitLab的API,发现我们可以这样做:
http://gitlab/api/v3/projects/10/repository/commits/OUR-TAG-HERE?private_token=XXX
然而,这要求我们指定一个任意的GitLab项目ID(在这种情况下为10)因此是不可预测的,因此我们无法像以前那样以编程方式执行每个JIRA API返回的搜索。如果我们只使用项目名称搜索标签,这种方法就可以工作,但我找不到办法做到这一点。
这是对应用程序工作方式的忽视:
我们简要地考虑在我们的JIRA问题中添加另一个自定义字段,我们将用GitLab的项目ID填充,但我们有数百个问题,这是一个不优雅的解决方案,实际上只是另一个潜在的失败点,更不用说额外的维护。
有什么想法吗?
答案 0 :(得分:1)
由于GitLab API仍然需要任意项目ID来实现此功能,因此我们完全废弃了API。相反,我们现在只是简单地编写HTTP响应代码。以下是我们查看问题是否有标记的方法之一:
public function HasTag($projectName, $nameSpace, $tagName)
{
$url=$this->gitLabUrl.'/'.$nameSpace.'/'.$projectName.'/tags/'.$tagName;
$ch = curl_init(); // Initiate curl
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Disable SSL verification
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Will return the response, if false print the response
curl_setopt($ch, CURLOPT_URL, $url); // Set the url
curl_exec($ch); // Execute
$info = curl_getinfo($ch);
curl_close($ch);
if ($info['http_code'] == 200) {
return true;
} else {
return false;
}
}
这是我们检查分支的方法:
public function HasBranch($projectName, $nameSpace, $branchName)
{
$url=$this->gitLabUrl.'/'.$nameSpace.'/'.$projectName.'/tree/'.$branchName;
$ch = curl_init(); // Initiate curl
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Disable SSL verification
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Will return the response, if false print the response
curl_setopt($ch, CURLOPT_URL, $url); // Set the url
curl_exec($ch); // Execute
$info = curl_getinfo($ch);
curl_close($ch);
if ($info['http_code'] == 200) {
return true;
} else {
return false;
}
}
正如您所看到的,这非常简单和hacky,但它适用于我们的实现,因为所访问的项目都不是私有的(我们的GitLab实例纯粹是内部的)。
希望将来GitLab会从其API中删除ID要求。