gitlab - 更改 gitlab 用户帐户的问题关闭模式
问题描述
我想关闭与问题标题推送的文件名匹配的问题(我的源文件以唯一整数命名,例如 34521.cpp 并且 Gitlab 上有相应的问题,例如问题 #34521)。
我该怎么做?
默认模式不适合,因为我有 2000 多个问题,并且我不想每次都引用问题 ID 的问题。我希望它是自动化的。所以我正在检查页面: 更改问题关闭模式。
它说我需要访问安装 gitlab 的服务器。这是否意味着我无法更改托管在http://gitlab.com的 Gitlab 云用户帐户的问题关闭模式?
解决方案
您不能在 gitlab.com 上定义自定义关闭模式,只能在您自己托管的 gitlab 实例上定义。但是您可以做的是使用webhook来监听远程服务器上的推送事件。然后,您可以自己解析提交消息并决定关闭问题。您可以使用Gitlab API关闭服务器实例上的问题(使用硬编码的访问令牌)
这可以使用像ngrok这样的 http 隧道在本地进行测试
以下nodejs脚本启动服务于/webhook
端点的服务器。当您的存储库上发生任何推送时,将调用此 Webhook 端点。
const express = require('express');
const bodyParser = require('body-parser');
const axios = require('axios');
const to = require('await-to-js').to;
const port = 3000;
const projectId = "4316159";
const accessToken = "YOUR_ACCESS_TOKEN";
const app = express();
app.use(bodyParser.json())
app.post('/webhook', async function(req, res) {
console.log("received push event");
let result, err, closeRes;
for (var i = 0; i < req.body.commits.length; i++) {
for (var j = 0; j < req.body.commits[i].added.length; j++) {
filenameWithoutExt = req.body.commits[i].added[j].split('.').slice(0, -1).join('.');
[err, result] = await to(axios({
url: `https://gitlab.com/api/v4/projects/${projectId}/issues?search=#${filenameWithoutExt}`,
method: 'GET',
headers: {
"PRIVATE-TOKEN": accessToken
}
}));
if (err) {
console.log(err);
} else {
if (result.data.length !== 0) {
//close those issues
for (item in result.data) {
console.log(`closing issue #${result.data[item].iid} with title ${result.data[item].title}`);
[err, closeRes] = await to(axios({
url: `https://gitlab.com/api/v4/projects/${projectId}/issues/${result.data[item].iid}?state_event=close`,
method: 'PUT',
headers: {
"PRIVATE-TOKEN": accessToken
}
}));
if (err) {
console.log(err);
} else {
console.log(`closing status : ${closeRes.status}`);
}
}
} else {
console.log("no issue were found");
}
}
}
}
res.sendStatus(200);
});
app.listen(port, () => console.log(`listening on port ${port}!`))
在上面,您需要更改访问令牌值和 projectId。另请注意,上面的代码将仅检查添加的文件,您可以对其进行修改以包含符合您要求的更新或删除的文件。
在端口 3000 上启动 ngrok 并ngrok http 3000
在您的 repo 的集成部分中复制给定的 url:
现在,当您添加任何文件时,它将检查没有扩展名的文件名并搜索标题内的所有问题#filename_without_extension
并立即关闭它
推荐阅读
- mysql - 更新 laravel 数据库
- electron - 打开数据库 Couchbase-lite 时出现 LiteCoreDomain 错误
- vespa - 查看加载到 vespa 中的所有文档
- r - 需要帮助使用引导程序估计 R 中的标准误差
- laravel - Laravel 5.7只选择关系数据而不循环其他关系
- magento2 - 索引管理。如何重新索引所有内容?
- angular - 调试 Typescript 在 VS 中有效,但在 VS Code 中无效
- python - 在 python 中跳过 quandl 的 ssl 验证
- c# - 如果未选择下拉菜单,如何设置默认值(多选)
- html - 如何将 json 数据从 python 导出并打印到 localhost?