我在哪里可以找到 GitLab API 的项目 ID?

Where do I find the project ID for the GitLab API?

我在他们的服务器上使用 GitLab。我想通过 API 下载我最新构建的工件(通过 GitLab CI 构建),如下所示:

curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.com/api/v3/projects/1/builds/8/artifacts"

我在哪里可以找到这个项目 ID?或者这种使用 API 的方式不适用于托管的 GitLab 项目?

您可以查询您拥有的项目:

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

仅作记录,如果其他人需要从通过 gitlab-ci

创建的 gitlab.com 下载工件
  1. 在您的浏览器中创建一个私人令牌
  2. 通过curl -XGET --header "PRIVATE-TOKEN: YOUR_AD_HERE?" "https://gitlab.com/api/v3/projects/owned"
  3. 获取项目ID
  4. 从您的 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"
  5. 的 gitlab-ci 步骤创建的

对gitlab之美印象深刻

在编辑项目页面的右上角有一个项目 ID 字段。

(您还可以在“触发器”部分的示例代码中的 CI/CD 管道页面上看到 ID。)

在旧版本中,您可以在示例代码的 URL 中的触发器页面上看到它。

我刚刚发现了一种获取项目 ID 的更简单的方法:只需查看托管项目的 gitlab 页面的 HTML 内容。有一个名为 project_id 的字段的输入,例如:

<input type="hidden" name="project_id" id="project_id" value="335" />

如前所述 here,所有项目范围的 API 都需要 ID 或项目路径(URL 编码)。 所以当你想和项目交互时直接使用https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab-ce就可以了。

您可以使用搜索属性查询项目例如:

http://gitlab.com/api/v3/projects?private_token=xxx&search=myprojectname

进入项目。

在左侧菜单中单击设置 -> 常规 -> 展开常规设置

它有一个标签项目 ID,位于项目名称旁边。

这是 GitLab 10.2 版本

提供实际解决问题的方案获取特定gitlab项目的项目idapi

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(namespace/repo 名称)已编码

在撰写本文时,最新版本的 GitLab 11.4 现在将 项目 ID 放在存储库首页的顶部。

截图:

从 Gitlab API v4 开始,以下 API returns 您拥有的所有项目:

curl --header 'PRIVATE-TOKEN: <your_token>' 'https://gitlab.com/api/v4/projects?owned=true'

响应包含项目 id。可以从此页面创建 Gitlab 访问令牌- https://gitlab.com/profile/personal_access_tokens

如果您知道您的项目名称,您可以使用以下API获取项目ID:

curl --header "Private-Token: <your_token>" -X GET https://gitlab.com/api/v4/projects?search=<exact_project_name>

这将 return 包含 id 的 JSON:

[
  {
     "id":<project id>, ...
  }
]

如果你的项目名称是独一无二的,顺手顺手按照shunya的回答,按名称搜索,参考API doc.

如果你有更强的access token,并且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'

要从所有项目中获取 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 站点,而不是特定站点。这个可以用来在Gitlab服务器my-server.com[=中找到项目streamerID 23=],例如:

$ 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 (例如组/:id/projects).
  • jq 非常灵活。这里我们只是过滤一个项目,你可以用它做很多事情。

似乎无法使用 gitlab api 仅检索项目 ID。相反,检索所有所有者的项目并循环遍历它们,直到找到匹配的项目,然后 return ID。我写了一个脚本来获取项目ID:

#!/bin/bash

projectName=""
namespace=""
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

没有具体问题,但不知何故到达这里,可能会对其他人有所帮助 我使用 chrome 获取项目 ID

  1. 进入想要的项目示例gitlabcom/username/project1
  2. 检查网络选项卡
  3. 在网络选项卡中查看第一个 garphql 请求 enter image
description here

可以在仓库名下查看

您可以搜索 项目路径

curl -s  'https://gitlab.com/api/v4/projects?search=my/path/to/my/project&search_namespaces=true' --header "PRIVATE-TOKEN: $GITLAB_TOKEN" |python -mjson.tool |grep \"id\"

https://docs.gitlab.com/ee/api/projects.html

只会匹配你的项目,不会找到其他不需要的项目