我在哪里可以找到 GitLab API 的项目 ID?
Posted
技术标签:
【中文标题】我在哪里可以找到 GitLab API 的项目 ID?【英文标题】:Where do I find the project ID for the GitLab API? 【发布时间】:2017-01-26 08:20:22 【问题描述】:我在他们的服务器上使用 GitLab。我想通过这样的 API 下载我最新的构建工件(通过 GitLab CI 构建):
curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.com/api/v3/projects/1/builds/8/artifacts"
在哪里可以找到此项目 ID?还是这种使用 API 的方式不适合托管 GitLab 项目?
【问题讨论】:
我创建了一个问题:gitlab.com/gitlab-org/gitlab-ce/issues/28342 【参考方案1】:我刚刚发现了一种更简单的获取项目 ID 的方法:只需查看托管项目的 gitlab 页面的 html 内容即可。有一个名为 project_id 的字段的输入,例如:
<input type="hidden" name="project_id" id="project_id" value="335" />
【讨论】:
很好的答案。尽管由于不使用任何 API,因此无法保证有效,但这种方法很可能会无限期地继续有效【参考方案2】:在编辑项目页面的右上角有一个项目 ID 字段。
(您还可以在 CI/CD 管道页面上的触发器部分的示例代码中查看 ID。)
在旧版本中,您可以在触发器页面上的示例代码的 URL 中看到它。
【讨论】:
我看不到这个?什么gitlab版本? 在 Gitlab.com 上运行的版本中...我不确切知道,但不久前,可能是从 2017 年 1 月开始。在旧版本中,您可以在示例代码中找到它触发器页面。 转到Settings > General
【参考方案3】:
撰写本文时最新版本的 GitLab 11.4
现在将 项目 ID 放在存储库首页的顶部。
截图:
【讨论】:
值得注意的是,可以点击复制ID到剪贴板【参考方案4】:您可以查询您拥有的项目:
curl -XGET --header "PRIVATE-TOKEN: XXXX" "https://gitlab.com/api/v3/projects/owned"
您将收到每个拥有的项目的 JSON:
[
"id":48,
"description":"",
"default_branch":"master",
"tag_list":[
...
您还可以从项目中的触发器配置中获取项目 ID,该项目中已经有一些带有您 ID 的示例代码。
从触发器页面:
curl -X POST \
-F token=TOKEN \
-F ref=REF_NAME \
https://<GitLab Installation>/api/v3/projects/<ProjectID>/trigger/builds
【讨论】:
非常感谢 - 帮助很大。小记:我认为-header应该是--header。 没问题。如果它解决了您的问题,请不要忘记接受答案。 这个答案不再有效。请参阅@Bernát 的回答。您可以在项目设置页面查看项目 ID。 @Fairy 转到设置 -> CI/CD 管道。在触发器部分,URL 示例包含项目 ID。例如"gitlab.com/api/v3/projects/xxxxxx/trigger/builds" v3_to_v4.md, "/api/v4/projects?owned=true"【参考方案5】:如 here 所述,所有项目范围的 API 都需要一个 ID 或项目路径(URL 编码)。 因此,当您想与项目交互时,只需直接使用https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab-ce。
【讨论】:
+1 重要的一点是/api/v4/projects/
后面提到的NAMESPACE/PROJECT_NAME
必须是URL编码的。这意味着/
需要替换为%2F
例如:gitlab.com/api/v4/projects/gitlab-org%2Fgitlab-ce【参考方案6】:
进入项目。
在左侧菜单上单击设置 -> 常规 -> 展开常规设置
它有一个标签项目 ID,位于项目名称旁边。
这是 GitLab 10.2 版本
【讨论】:
【参考方案7】:提供真正解决问题的方案获取特定gitlab项目的项目id的api
curl -XGET -H "Content-Type: application/json" --header "PRIVATE-TOKEN: $GITLAB_TOKEN" http://<YOUR-GITLAB-SERVER>/api/v3/projects/<YOUR-NAMESPACE>%2F<YOUR-PROJECT-NAME> | python -mjson.tool
或者您可能只想要项目 ID:
curl -XGET -H "Content-Type: application/json" --header "PRIVATE-TOKEN: $GITLAB_TOKEN" http://<YOUR-GITLAB-SERVER>/api/v3/projects/<YOUR-NAMESPACE>%2F<YOUR-PROJECT-NAME> | python -c 'import sys, json; print(json.load(sys.stdin)["id"])'
请注意,repo url(命名空间/repo 名称)已编码。
【讨论】:
如果你使用 gitlab.com,命名空间就是你的用户名。 命名空间不是您要为其获取项目 ID 的项目的所有者,而不是您自己的用户名吗? 还有一个基于jq的:curl -s -XGET -H "Content-Type: application/json" --header "PRIVATE-TOKEN: $GITLAB_TOKEN" http://<YOUR-GITLAB-SERVER>/api/v3/projects/<YOUR-NAMESPACE>%2F<YOUR-PROJECT-NAME> | jq '.id
【参考方案8】:
如果您知道自己的项目名称,则可以使用以下 API 获取项目 ID:
curl --header "Private-Token: <your_token>" -X GET https://gitlab.com/api/v4/projects?search=<exact_project_name>
这将返回一个包含 id 的 JSON:
[
"id":<project id>, ...
]
【讨论】:
【参考方案9】:仅作记录,如果其他人需要从 gitlab.com 下载通过 gitlab-ci 创建的工件
-
在浏览器中创建私有令牌
通过
curl -XGET --header "PRIVATE-TOKEN: YOUR_AD_HERE?" "https://gitlab.com/api/v3/projects/owned"
获取项目ID
从您的 master 分支下载最后一个工件,该工件是通过名为 release curl -XGET --header "PRIVATE-TOKEN: YOUR_AD_HERE?" -o myapp.jar "https://gitlab.com/api/v3/projects/4711/builds/artifacts/master/download?job=release"
的 gitlab-ci 步骤创建的
我对 gitlab 的美丽印象深刻。
【讨论】:
v3 不再可用。现在的网址是:https://gitlab.com/api/v4/projects/PROJECT_ID/jobs/artifacts/master/raw/PATH_TO_FILE?job=JOB
【参考方案10】:
您可以使用搜索属性查询项目,例如:
http://gitlab.com/api/v3/projects?private_token=xxx&search=myprojectname
【讨论】:
【参考方案11】:从 Gitlab API v4 开始,以下 API 返回您拥有的所有项目:
curl --header 'PRIVATE-TOKEN: <your_token>' 'https://gitlab.com/api/v4/projects?owned=true'
响应包含项目id
。可以从此页面创建 Gitlab 访问令牌-https://gitlab.com/profile/personal_access_tokens
【讨论】:
【参考方案12】:没有适合通用需求的答案,最相似的仅适用于 gitlab 站点,而不是特定站点。这可用于在 Gitlab 服务器 my-server.com 中查找项目 streamer 的 ID,例如:
$ curl --silent --header 'Authorization: Bearer MY-TOKEN-XXXX' \
'https://my-server.com/api/v4/projects?per_page=100&simple=true'| \
jq -rc '.[]|select(.name|ascii_downcase|startswith("streamer"))'| \
jq .id
168
备注
这仅提供前 100 个项目,如果您有更多,您应该请求随后的页面 (&page=2, 3, ...) 或运行不同的 API(例如 groups/:id/projects)。 jq 非常灵活。这里我们只是过滤一个项目,你可以用它做很多事情。【讨论】:
绝对是更好的答案!【参考方案13】:似乎无法使用 gitlab api 仅检索项目 ID。相反,检索所有所有者的项目并循环访问它们,直到找到匹配的项目,然后返回 ID。我写了一个脚本来获取项目ID:
#!/bin/bash
projectName="$1"
namespace="$2"
default=$(sudo cat .namespace)
namespace="$namespace:-$default"
json=$(curl --header "PRIVATE-TOKEN: $(sudo cat .token)" -X GET
'https://gitlab.com/api/v4/projects?owned=true' 2>/dev/null)
id=0
idMatch=0
pathWithNamespaceMatch=0
rowToMatch="\"$(echo "$namespace/$projectName" | tr '[:upper:]' '[:lower:]')\","
for row in $(echo "$json" | jq -r '.'); do
[[ $idMatch -eq 1 ]] && idMatch=0; id=$row::-1;
[[ $pathWithNamespaceMatch -eq 1 ]] && pathWithNamespaceMatch=0; [[ "$row" == "$rowToMatch" ]] && echo "$id"; return 0;
[[ $row == "\"path_with_namespace\":" ]] && pathWithNamespaceMatch=1
[[ $row == "\"id\":" ]] && idMatch=1
done
echo 'Error! Could not retrieve projectID.'
return 1
它希望默认命名空间存储在文件.namespace
中,私有令牌存储在文件.token
中。为了提高安全性,最好运行chmod 000 .token; chmod 000 .namespace; chown root .namespace; chown root .token
【讨论】:
【参考方案14】:如果你的项目名称是唯一的,可以很方便地按照shunya的回答,按名称搜索,参考APIdoc。
如果你有更强的访问令牌,并且 Gitlab 包含几个不同组内的同名项目,那么在组内搜索会更方便。 API 文档here。例如
curl --header "PRIVATE-TOKEN: <token>" -X GET https://gitlab.com/api/v4/groups/<group_id>/search?scope=projects&search=<project_name>
群组ID可以在群组域名下的设置页面中找到。
要从输出中获取项目 ID,您可以这样做:
curl --header "PRIVATE-TOKEN: <token>" -X GET https://gitlab.com/api/v4/groups/<group_id>/search?scope=projects&search=<project_name> | jq '[0].id'
【讨论】:
【参考方案15】:要从所有项目中获取 id,请使用:
curl --header 'PRIVATE-TOKEN: XXXXXXXXXXXXXXXXXXXXXXX' 'https://gitlab.com/api/v4/projects?owned=true' > curloutput
grep -oPz 'name\":\".*?\"|\"id\":[0-9]+' curloutput | sed 's/\"/\n/g' | sed 's/name//g' |sed 's/id\"://g' |sed 's/\"//g' | sort -u -n
【讨论】:
以上是关于我在哪里可以找到 GitLab API 的项目 ID?的主要内容,如果未能解决你的问题,请参考以下文章
我在哪里可以找到“通过 Facebook 支付”API? [关闭]
在哪里可以找到 Firebase 云消息传递的 API KEY?
我在哪里可以找到一些关于 google adwords 的例子?
YouTube API V3:我在哪里可以找到每个“videoCategoryId”的列表?