【问题标题】:Where do I find the project ID for the GitLab API?我在哪里可以找到 GitLab API 的项目 ID?
【发布时间】: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 项目?

【问题讨论】:

标签: api gitlab gitlab-ci


【解决方案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

【讨论】:

【解决方案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 创建的工件

      1. 在浏览器中创建私有令牌
      2. 通过curl -XGET --header "PRIVATE-TOKEN: YOUR_AD_HERE?" "https://gitlab.com/api/v3/projects/owned"获取项目ID
      3. 从您的 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
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-12-29
                • 1970-01-01
                • 2013-04-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2022-07-19
                • 1970-01-01
                相关资源
                最近更新 更多