我在哪里可以找到 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 下载工件
- 在您的浏览器中创建一个私人令牌
- 通过
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之美印象深刻
在编辑项目页面的右上角有一个项目 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[=中找到项目streamer的ID 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
可以在仓库名下查看
您可以搜索 项目路径
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
只会匹配你的项目,不会找到其他不需要的项目
我在他们的服务器上使用 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 下载工件- 在您的浏览器中创建一个私人令牌
- 通过
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之美印象深刻
在编辑项目页面的右上角有一个项目 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[=中找到项目streamer的ID 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
可以在仓库名下查看
您可以搜索 项目路径
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
只会匹配你的项目,不会找到其他不需要的项目