我在他们的服务器上使用gitlab。我想通过像这样的
下载我最新的构建工件(通过gitlab-ci构建) curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.com/api/v3/projects/1/builds/8/artifacts"
我在哪里可以找到此项目ID?或者这种使用API的方式不适用于托管的gitlab项目吗?
BW休伯特答案 0 :(得分:25)
在“编辑项目”页面的右上角有一个“项目ID”字段。
(您还可以在“触发器”部分的exameple代码中的CI / CD管道页面上查看ID。)
在旧版本中,您可以在“触发器”页面的示例代码的URL中看到它。
答案 1 :(得分:25)
我刚刚发现了一种更简单的获取项目ID的方法:只需查看托管项目的gitlab页面的HTML内容即可。有一个名为project_id的字段的输入,例如:
<input type="hidden" name="project_id" id="project_id" value="335" />
答案 2 :(得分:24)
您可以查询自己的项目:
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
答案 3 :(得分:18)
输入项目。
在左手菜单上,点击设置 - &gt;一般 - &gt;展开常规设置
它有一个标签Project ID,位于项目名称旁边。
这是在GitLab 10.2版本上
答案 4 :(得分:9)
答案 5 :(得分:7)
如上所述here,所有项目范围的API都需要ID或项目路径(URL编码)。 因此,当您想要与项目进行交互时,请直接使用https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab-ce。
答案 6 :(得分:3)
仅供记录,如果其他人需要从gitlab.com下载通过gitlab-ci创建的工件
curl -XGET --header "PRIVATE-TOKEN: YOUR_AD_HERE?" "https://gitlab.com/api/v3/projects/owned"
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的美感印象深刻。
答案 7 :(得分:3)
您可以使用搜索属性查询项目,例如:
http://gitlab.com/api/v3/projects?private_token=xxx&search=myprojectname
答案 8 :(得分:2)
提供实际解决问题的解决方案获取特定gitlab项目的项目ID的api
databaseReference.child(array.get(0)).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.child("messages").exists())
// do your thing
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
)};
或者也许您只想要项目ID:
array
请注意,存储库URL(名称空间/存储库名称)已编码。
答案 9 :(得分:0)
As of Gitlab API v4, the following API returns all projects that you own:
curl --header 'PRIVATE-TOKEN: <your_token>' 'https://gitlab.com/api/v4/projects?owned=true'
The response contains project id
. Gitlab access tokens can be created from this page- https://gitlab.com/profile/personal_access_tokens
答案 10 :(得分:0)
如果知道您的项目名称,则可以使用以下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>, ...
}
]
答案 11 :(得分:0)
如果您的项目名称是唯一的,那么按shunya进行回答,按名称搜索,参考API doc都很方便。
如果您具有更强大的访问令牌,并且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'
答案 12 :(得分:0)
要从所有项目中获取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
答案 13 :(得分:0)
没有答案适合一般需求,最相似的答案仅适用于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
备注
答案 14 :(得分:0)
似乎无法使用 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