部署密钥 API
- Tier: 基础版,专业版,旗舰版
- Offering: JihuLab.com,私有化部署
极狐GitLab 部署密钥 API 可以返回响应中以下字段的公钥指纹:
- fingerprint(MD5 哈希)。在启用 FIPS 的系统上不可用。
- fingerprint_sha256(SHA256 哈希)。在极狐GitLab 15.2 中引入。
列出所有部署密钥
- Tier: 基础版,专业版,旗舰版
- Offering: 极狐GitLab 私有化部署,极狐GitLab Dedicated
History
- projects_with_readonly_access 在极狐GitLab 16.0 中引入。
获取极狐GitLab 实例中所有项目的所有部署密钥的列表。此端点需要管理员访问权限,并且在 JihuLab.com 上不可用。
plaintextGET /deploy_keys
支持的属性:
属性 | 类型 | 必需 | 描述 |
---|---|---|---|
public | boolean | 否 | 仅返回公共部署密钥。默认为 false。 |
示例请求:
shellcurl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/deploy_keys?public=true"
示例响应:
json1[ 2 { 3 "id": 1, 4 "title": "Public key", 5 "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDNJAkI3Wdf0r13c8a5pEExB2YowPWCSVzfZV22pNBc1CuEbyYLHpUyaD0GwpGvFdx2aP7lMEk35k6Rz3ccBF6jRaVJyhsn5VNnW92PMpBJ/P1UebhXwsFHdQf5rTt082cSxWuk61kGWRQtk4ozt/J2DF/dIUVaLvc+z4HomT41fQ==", 6 "fingerprint": "4a:9d:64:15:ed:3a:e6:07:6e:89:36:b3:3b:03:05:d9", 7 "fingerprint_sha256": "SHA256:Jrs3LD1Ji30xNLtTVf9NDCj7kkBgPBb2pjvTZ3HfIgU", 8 "created_at": "2013-10-02T10:12:29Z", 9 "expires_at": null, 10 "projects_with_write_access": [ 11 { 12 "id": 73, 13 "description": null, 14 "name": "project2", 15 "name_with_namespace": "Sidney Jones / project2", 16 "path": "project2", 17 "path_with_namespace": "sidney_jones/project2", 18 "created_at": "2021-10-25T18:33:17.550Z" 19 }, 20 { 21 "id": 74, 22 "description": null, 23 "name": "project3", 24 "name_with_namespace": "Sidney Jones / project3", 25 "path": "project3", 26 "path_with_namespace": "sidney_jones/project3", 27 "created_at": "2021-10-25T18:33:17.666Z" 28 } 29 ], 30 "projects_with_readonly_access": [] 31 }, 32 { 33 "id": 3, 34 "title": "Another Public key", 35 "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDIJFwIL6YNcCgVBLTHgM6hzmoL5vf0ThDKQMWT3HrwCjUCGPwR63vBwn6+/Gx+kx+VTo9FuojzR0O4XfwD3LrYA+oT3ETbn9U4e/VS4AH/G4SDMzgSLwu0YuPe517FfGWhWGQhjiXphkaQ+6bXPmcASWb0RCO5+pYlGIfxv4eFGQ==" 36 "fingerprint": "0b:cf:58:40:b9:23:96:c7:ba:44:df:0e:9e:87:5e:75", 37 "fingerprint_sha256": "SHA256:lGI/Ys/Wx7PfMhUO1iuBH92JQKYN+3mhJZvWO4Q5ims", 38 "created_at": "2013-10-02T11:12:29Z", 39 "expires_at": null, 40 "projects_with_write_access": [], 41 "projects_with_readonly_access": [ 42 { 43 "id": 74, 44 "description": null, 45 "name": "project3", 46 "name_with_namespace": "Sidney Jones / project3", 47 "path": "project3", 48 "path_with_namespace": "sidney_jones/project3", 49 "created_at": "2021-10-25T18:33:17.666Z" 50 } 51 ] 52 } 53]
添加部署密钥
- Tier: 基础版,专业版,旗舰版
- Offering: 私有化部署
History
- 在极狐GitLab 17.5 中引入。
为极狐GitLab 实例创建部署密钥。此端点需要管理员访问权限。
plaintextPOST /deploy_keys
支持的属性:
属性 | 类型 | 必需 | 描述 |
---|---|---|---|
key | string | 是 | 新的部署密钥 |
title | string | 是 | 新部署密钥的标题 |
expires_at | datetime | 否 | 部署密钥的到期日期。如果未提供值,则不会过期。预期格式为 ISO 8601(2024-12-31T08:00:00Z) |
示例请求:
shellcurl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --header "Content-Type: application/json" \ --data '{"title": "My deploy key", "key": "ssh-rsa AAAA...", "expired_at": "2024-12-31T08:00:00Z"}' \ "https://gitlab.example.com/api/v4/deploy_keys/"
示例响应:
json1{ 2 "id" : 5, 3 "title" : "My deploy key", 4 "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDNJAkI3Wdf0r13c8a5pEExB2YowPWCSVzfZV22pNBc1CuEbyYLHpUyaD0GwpGvFdx2aP7lMEk35k6Rz3ccBF6jRaVJyhsn5VNnW92PMpBJ/P1UebhXwsFHdQf5rTt082cSxWuk61kGWRQtk4ozt/J2DF/dIUVaLvc+z4HomT41fQ==", 5 "fingerprint": "4a:9d:64:15:ed:3a:e6:07:6e:89:36:b3:3b:03:05:d9", 6 "fingerprint_sha256": "SHA256:Jrs3LD1Ji30xNLtTVf9NDCj7kkBgPBb2pjvTZ3HfIgU", 7 "usage_type": "auth_and_signing", 8 "created_at": "2024-10-03T01:32:21.992Z", 9 "expires_at": "2024-12-31T08:00:00.000Z" 10}
列出项目的部署密钥
获取项目的部署密钥列表。
plaintextGET /projects/:id/deploy_keys
属性 | 类型 | 必需 | 描述 |
---|---|---|---|
id | integer/string | 是 | 项目的 ID 或 URL 编码路径 |
shellcurl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/deploy_keys"
示例响应:
json1[ 2 { 3 "id": 1, 4 "title": "Public key", 5 "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDNJAkI3Wdf0r13c8a5pEExB2YowPWCSVzfZV22pNBc1CuEbyYLHpUyaD0GwpGvFdx2aP7lMEk35k6Rz3ccBF6jRaVJyhsn5VNnW92PMpBJ/P1UebhXwsFHdQf5rTt082cSxWuk61kGWRQtk4ozt/J2DF/dIUVaLvc+z4HomT41fQ==", 6 "fingerprint": "4a:9d:64:15:ed:3a:e6:07:6e:89:36:b3:3b:03:05:d9", 7 "fingerprint_sha256": "SHA256:Jrs3LD1Ji30xNLtTVf9NDCj7kkBgPBb2pjvTZ3HfIgU", 8 "created_at": "2013-10-02T10:12:29Z", 9 "expires_at": null, 10 "can_push": false 11 }, 12 { 13 "id": 3, 14 "title": "Another Public key", 15 "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDIJFwIL6YNcCgVBLTHgM6hzmoL5vf0ThDKQMWT3HrwCjUCGPwR63vBwn6+/Gx+kx+VTo9FuojzR0O4XfwD3LrYA+oT3ETbn9U4e/VS4AH/G4SDMzgSLwu0YuPe517FfGWhWGQhjiXphkaQ+6bXPmcASWb0RCO5+pYlGIfxv4eFGQ==" 16 "fingerprint": "0b:cf:58:40:b9:23:96:c7:ba:44:df:0e:9e:87:5e:75", 17 "fingerprint_sha256": "SHA256:lGI/Ys/Wx7PfMhUO1iuBH92JQKYN+3mhJZvWO4Q5ims", 18 "created_at": "2013-10-02T11:12:29Z", 19 "expires_at": null, 20 "can_push": false 21 } 22]
列出用户的项目部署密钥
History
- 在极狐GitLab 15.1 中引入。
获取指定用户(请求者)和认证用户(请求者)的共同项目部署密钥的列表。仅列出 启用的项目密钥。
plaintextGET /users/:id_or_username/project_deploy_keys
参数:
属性 | 类型 | 必需 | 描述 |
---|---|---|---|
id_or_username | string | 是 | 获取项目部署密钥的用户 ID 或用户名 |
json1[ 2 { 3 "id": 1, 4 "title": "Key A", 5 "created_at": "2022-05-30T12:28:27.855Z", 6 "expires_at": null, 7 "key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILkYXU2fVeO4/0rDCSsswP5iIX2+B6tv15YT3KObgyDl Key", 8 "fingerprint": "40:8e:fa:df:70:f7:a7:06:1e:0d:6f:ae:f2:27:92:01", 9 "fingerprint_sha256": "SHA256:Ojq2LZW43BFK/AMP81jBkDGn9YpPWYRNcViKBB44LPU" 10 }, 11 { 12 "id": 2, 13 "title": "Key B", 14 "created_at": "2022-05-30T13:34:56.219Z", 15 "expires_at": null, 16 "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDNJAkI3Wdf0r13c8a5pEExB2YowPWCSVzfZV22pNBc1CuEbyYLHpUyaD0GwpGvFdx2aP7lMEk35k6Rz3ccBF6jRaVJyhsn5VNnW92PMpBJ/P1UebhXwsFHdQf5rTt082cSxWuk61kGWRQtk4ozt/J2DF/dIUVaLvc+z4HomT41fQ==", 17 "fingerprint": "4a:9d:64:15:ed:3a:e6:07:6e:89:36:b3:3b:03:05:d9", 18 "fingerprint_sha256": "SHA256:Jrs3LD1Ji30xNLtTVf9NDCj7kkBgPBb2pjvTZ3HfIgU", 19 } 20]
shellcurl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/users/20/project_deploy_keys"
示例响应:
json1[ 2 { 3 "id": 1, 4 "title": "Key A", 5 "created_at": "2022-05-30T12:28:27.855Z", 6 "expires_at": "2022-10-30T12:28:27.855Z", 7 "key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILkYXU2fVeO4/0rDCSsswP5iIX2+B6tv15YT3KObgyDl Key", 8 "fingerprint": "40:8e:fa:df:70:f7:a7:06:1e:0d:6f:ae:f2:27:92:01", 9 "fingerprint_sha256": "SHA256:Ojq2LZW43BFK/AMP81jBkDGn9YpPWYRNcViKBB44LPU" 10 } 11]
获取单个部署密钥
获取单个密钥。
plaintextGET /projects/:id/deploy_keys/:key_id
参数:
属性 | 类型 | 必需 | 描述 |
---|---|---|---|
id | integer/string | 是 | 项目的 ID 或 URL 编码路径 |
key_id | integer | 是 | 部署密钥的 ID |
shellcurl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/deploy_keys/11"
示例响应:
json1{ 2 "id": 1, 3 "title": "Public key", 4 "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDNJAkI3Wdf0r13c8a5pEExB2YowPWCSVzfZV22pNBc1CuEbyYLHpUyaD0GwpGvFdx2aP7lMEk35k6Rz3ccBF6jRaVJyhsn5VNnW92PMpBJ/P1UebhXwsFHdQf5rTt082cSxWuk61kGWRQtk4ozt/J2DF/dIUVaLvc+z4HomT41fQ==", 5 "fingerprint": "4a:9d:64:15:ed:3a:e6:07:6e:89:36:b3:3b:03:05:d9", 6 "fingerprint_sha256": "SHA256:Jrs3LD1Ji30xNLtTVf9NDCj7kkBgPBb2pjvTZ3HfIgU", 7 "created_at": "2013-10-02T10:12:29Z", 8 "expires_at": null, 9 "can_push": false 10}
为项目添加部署密钥
为项目创建新的部署密钥。
如果部署密钥已经存在于另一个项目中,则仅当原始项目可由同一用户访问时,才将其加入到当前项目中。
plaintextPOST /projects/:id/deploy_keys
属性 | 类型 | 必需 | 描述 |
---|---|---|---|
id | integer/string | 是 | 项目的 ID 或 URL 编码路径 |
key | string | 是 | 新的部署密钥 |
title | string | 是 | 新部署密钥的标题 |
can_push | boolean | 否 | 部署密钥是否可以推送到项目的存储库 |
expires_at | datetime | 否 | 部署密钥的到期日期。如果未提供值,则不会过期。预期格式为 ISO 8601(2019-03-15T08:00:00Z) |
shellcurl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --header "Content-Type: application/json" \ --data '{"title": "My deploy key", "key": "ssh-rsa AAAA...", "can_push": "true"}' \ "https://gitlab.example.com/api/v4/projects/5/deploy_keys/"
示例响应:
json1{ 2 "key" : "ssh-rsa AAAA...", 3 "id" : 12, 4 "title" : "My deploy key", 5 "can_push": true, 6 "created_at" : "2015-08-29T12:44:31.550Z", 7 "expires_at": null 8}
更新部署密钥
更新项目的部署密钥。
plaintextPUT /projects/:id/deploy_keys/:key_id
属性 | 类型 | 必需 | 描述 |
---|---|---|---|
id | integer/string | 是 | 项目的 ID 或 URL 编码路径 |
can_push | boolean | 否 | 部署密钥是否可以推送到项目的存储库 |
title | string | 否 | 新部署密钥的标题 |
shellcurl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" --header "Content-Type: application/json" \ --data '{"title": "New deploy key", "can_push": true}' "https://gitlab.example.com/api/v4/projects/5/deploy_keys/11"
示例响应:
json1{ 2 "id": 11, 3 "title": "New deploy key", 4 "key": "ssh-rsa AAAA...", 5 "created_at": "2015-08-29T12:44:31.550Z", 6 "expires_at": null, 7 "can_push": true 8}
删除部署密钥
从项目中删除部署密钥。如果部署密钥仅用于此项目,则从系统中删除。
plaintextDELETE /projects/:id/deploy_keys/:key_id
属性 | 类型 | 必需 | 描述 |
---|---|---|---|
id | integer/string | 是 | 项目的 ID 或 URL 编码路径 |
key_id | integer | 是 | 部署密钥的 ID |
shellcurl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/deploy_keys/13"
启用部署密钥
为项目启用部署密钥以供使用。当成功时,返回启用的密钥,状态代码为 201。
plaintextPOST /projects/:id/deploy_keys/:key_id/enable
属性 | 类型 | 必需 | 描述 |
---|---|---|---|
id | integer/string | 是 | 项目的 ID 或 URL 编码路径 |
key_id | integer | 是 | 部署密钥的 ID |
shellcurl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/deploy_keys/12/enable"
示例响应:
json1{ 2 "key" : "ssh-rsa AAAA...", 3 "id" : 12, 4 "title" : "My deploy key", 5 "created_at" : "2015-08-29T12:44:31.550Z", 6 "expires_at": null 7}
向多个项目添加部署密钥
如果希望在同一群组中的多个项目中添加相同的部署密钥,可以通过 API 实现。
首先,通过列出所有项目找到感兴趣项目的 ID:
shellcurl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects"
或者找到群组的 ID:
shellcurl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups"
然后列出该群组中的所有项目(例如,群组 1234):
shellcurl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/1234"
使用这些 ID,将相同的部署密钥添加到所有项目中:
shell1for project_id in 321 456 987; do 2 curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \ 3 --header "Content-Type: application/json" \ 4 --data '{"title": "my key", "key": "ssh-rsa AAAA..."}' \ 5 "https://gitlab.example.com/api/v4/projects/${project_id}/deploy_keys" 6done