我在哪里可以找到gitlab api的项目ID?

时间:2016-09-18 16:01:41

标签: api gitlab gitlab-ci

我在他们的服务器上使用gitlab。我想通过像这样的

下载我最新的构建工件(通过gitlab-ci构建)

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

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

BW休伯特

15 个答案:

答案 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)

撰写本文时,最新版本的GitLab 11.4项目ID 放置在资源库首页的顶部。

屏幕截图:

GitLab Project Front Page

答案 5 :(得分:7)

如上所述here,所有项目范围的API都需要ID或项目路径(URL编码)。 因此,当您想要与项目进行交互时,请直接使用https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab-ce

答案 6 :(得分:3)

仅供记录,如果其他人需要从gitlab.com下载通过gitlab-ci创建的工件

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

备注

  • 这仅给出前100个项目,如果您有更多项目,则应请求后面的页面(&page = 2、3,...)或运行其他API(例如groups /:id / projects)。 / li>
  • jq非常灵活。在这里,我们只是过滤一个项目,您可以用它来做很多事情。

答案 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