我在哪里可以找到 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 &gt; 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://&lt;YOUR-GITLAB-SERVER&gt;/api/v3/projects/&lt;YOUR-NAMESPACE&gt;%2F&lt;YOUR-PROJECT-NAME&gt; | 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 中查找项目 streamerID,例如:

$ 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”的列表?

ASP.NET Core API JWT 身份验证:我在哪里可以找到有关它的官方文档?

Gitlab API 按主题过滤项目(项目标签)