# 维护代码库及其授权
在开始本节之前,请确保您已阅读 主体流程 章节,了解执行流水线和部署应用的主体流程和相关术语。
代码库是用于存储项目的源代码、流水线配置、部署清单的版本库。只支持 Git。
流水线运行时需要获取代码库中的源代码、流水线配置和其他相关文件,以实现项目集成。通过将代码库授权给产品或项目,可以让相关项目下的流水线运行时能够读写被授权代码库,从而推进项目集成。
与流水线运行时类似,部署运行时也需要从代码库中获取部署清单和其他相关文件, 并且使用相同的授权方式,以实现应用部署。
支持通过 命令行 和 API 两种方式维护代码库和代码库授权。
# 前提条件
# 创建 access token
您需要创建一个 access token,作为请求 API 的请求头。详情参考 创建 access token。
# 导入证书
在使用 HTTPS 协议访问 Nautes API Server 之前,请先导入证书。
# 创建产品
由于代码库归属于产品,您需要创建至少一个产品。
# 创建和更新代码库(API)
# 生成创建/更新代码库 API 请求
通过接口定义 CodeRepo_SaveCodeRepo
生成 API 请求示例,并添加 access token 作为请求头。
# 替换变量 $api-server-address 为 Nautes API Server 的访问地址
# 替换变量 $gitlab-access-token 为 GitLab 访问令牌
# 替换变量 $product-name 为代码库所属产品的名称
# 替换变量 $coderepo-name 为代码库名称
curl -X 'POST' \
'HTTP://$api-server-address/api/v1/products/$product-name/coderepos/$coderepo-name' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer $gitlab-access-token' \
-d '{
# 代码库关联的项目
"project": $project,
# 代码库的 webhook 事件
"webhook": {
"events": ["push_events"]
},
# 是否用于部署运行时
"deployment_runtime": true,
"pipeline_runtime": false,
"git": {
"gitlab": {
# 代码库的名称
"name": $coderepo-name,
# 代码库的路径
"path": $coderepo-name,
# 代码库的可见性,例如:private、public
"visibility": $coderepo-visibility,
"description": $coderepo-desc
}
}
}'
替换变量后的请求示例如下:
curl -X 'POST' \
'HTTP://xxx.xxx.xxx.xxx:xxxxx/api/v1/products/nautes-labs/coderepos/api-server' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxx' \
-d '{
"project": "api-server",
"webhook": {
"events": ["push_events"]
},
"deployment_runtime": true,
"pipeline_runtime": false,
"git": {
"gitlab": {
"name": "api-server",
"path": "api-server",
"visibility": "private",
"description": "Providing REST APIs for creating configuration declarations of environments."
}
}
}'
# 执行创建/更新代码库的 API 请求
使用 curl 命令或者其他工具执行 API 请求,以新增代码库。
请求成功后,将在指定产品的 default.project
代码库中生成代码库的资源文件,并创建代码库。代码库的资源文件示例如下:
apiVersion: nautes.resource.nautes.io/v1alpha1
kind: CodeRepo
metadata:
name: repo-xxxx
spec:
codeRepoProvider: gitlab
deploymentRuntime: true
pipelineRuntime: false
product: product-xxxx
project: api-server
repoName: api-server
webhook:
events:
- push_events
请求 API 更新代码库也将更新代码库资源文件。
只有当您的账号是 GitLab 的 group 成员、具备创建代码库的权限、具备对
default.project
代码库的 main 分支的写入权限,才可以创建或者更新代码库。
# 删除代码库(API)
在删除代码库之前,请先删除与代码库关联的所有实体和资源,例如:部署运行时等,否则将不能执行删除。
# 生成删除代码库的 API 请求
通过接口定义 CodeRepo_DeleteCodeRepo
生成 API 请求示例,并添加 access token 作为请求头。
curl -X 'DELETE' \
'HTTP://$api-server-address/api/v1/products/$product-name/coderepos/$coderepo-name' \
-H 'accept: application/json' \
-H 'Authorization: Bearer $gitlab-access-token'
替换变量后的请求示例如下:
curl -X 'DELETE' \
'HTTP://xxx.xxx.xxx.xxx:xxxxx/api/v1/products/nautes-labs/coderepos/api-server' \
-H 'accept: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxx'
# 执行删除代码库的 API 请求
使用 curl 命令或者其他工具执行 API 请求,以删除代码库。
请求成功后,将删除代码库,以及在指定产品的 default.project
代码库中的代码库资源文件。
只有当您的账号是 GitLab 的 group 成员、具备删除代码库的权限、具备对
default.project
代码库的 main 分支的写入权限,才可以删除代码库。
# 查询代码库列表(API)
# 生成查询代码库列表的 API 请求
通过接口定义 CodeRepo_ListCodeRepos
生成 API 请求示例,并添加 access token 作为请求头。
curl -X 'GET' \
'HTTP://$api-server-address/api/v1/products/$product-name/coderepos' \
-H 'accept: application/json' \
-H 'Authorization: Bearer $gitlab-access-token'
替换变量后的请求示例如下:
curl -X 'GET' \
'HTTP://xxx.xxx.xxx.xxx:xxxxx/api/v1/products/nautes-labs/coderepos' \
-H 'accept: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxx'
# 执行查询代码库列表的 API 请求
使用 curl 命令或者其他工具执行 API 请求,以查询代码库列表。代码库列表的返回值示例如下:
{
"items": [
{
"product": "nautes-labs",
"name": "api-server",
"project": "api-server",
"webhook": {
"events": [
"push_events"
]
},
"deployment_runtime": true,
"pipeline_runtime": false,
"git": {
"gitlab": {
"name": "api-server",
"path": "api-server",
"visibility": "private",
"description": "Providing REST APIs for creating configuration declarations of environments.",
"ssh_url_to_repo": "ssh://git@github.com:nautes-labs/api-server.git",
"http_url_to_repo": "https://github.com/nautes-labs/api-server.git"
}
}
}
]
}
只有当您的账号是 GitLab 的 group 成员、具备查询代码库的权限、具备对
default.project
代码库的读取权限,才可以查询代码库列表。
# 查询代码库详情(API)
# 生成查看代码库详情的 API 请求
通过接口定义 CodeRepo_GetCodeRepo
生成 API 请求示例,并添加 access token 作为请求头。
curl -X 'GET' \
'HTTP://$api-server-address/api/v1/products/$product-name/coderepos/$coderepo-name' \
-H 'accept: application/json' \
-H 'Authorization: Bearer $gitlab-access-token'
替换变量后的请求示例如下:
curl -X 'GET' \
'HTTP://xxx.xxx.xxx.xxx:xxxxx/api/v1/products/nautes-labs/coderepos/api-server' \
-H 'accept: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxx'
# 执行查看代码库详情的 API 请求
使用 curl 命令或者其他工具执行 API 请求,以查询代码库详情。代码库详情的返回值示例与查询代码库列表类似。
只有当您的账号是 GitLab 的 group 成员、具备查询代码库的权限、具备对
default.project
代码库的读取权限,才可以查看代码库详情。
# 强制创建/更新/删除代码库(API)
适用于需要跳过 API 校验的特殊场景,详情参见初始化产品。
以创建代码库为例,将 project 属性设置为不存在的 project,启用 insecure_skip_check
查询参数,可以强制提交代码库的资源文件。 请求示例如下:
curl -X 'POST' \
'HTTP://xxx.xxx.xxx.xxx:xxxxx/api/v1/products/nautes-labs/coderepos/coderepo-demo?insecure_skip_check=true' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxx' \
-d '{
"project": "project-demo-invalid",
"webhook": {
"events": [
"push_events"
]
},
"deployment_runtime": true,
"pipeline_runtime": false,
"git": {
"gitlab": {
"name": "coderepo-demo",
"path": "coderepo-demo",
"visibility": "private",
"description": "This is a code repository for testing purposes."
}
}
}'
# 创建和更新代码库授权(API)
# 生成创建/更新代码库授权 API 请求
通过接口定义 CodeRepoBinding_SaveCodeRepoBinding
生成 API 请求示例,并添加 access token 作为请求头。
# 替换变量 $api-server-address 为 Nautes API Server 的访问地址
# 替换变量 $gitlab-access-token 为 GitLab 访问令牌
# 替换变量 $product-name 为被授权代码库所属产品的名称
# 替换变量 $coderepo-binding-name 为代码库授权的名称
curl -X 'POST' \
'HTTP://$api-server-addresss/api/v1/products/$product-name/coderepobindings/$coderepo-binding-name' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer $gitlab-access-token' \
-d '{
# 授权产品:目前只支持将代码库授权给其所属的产品,与 $product-name 的值相同
"product": "$authorized-product-name",
# 授权项目:如果为空,将代码库授权给产品; 如果不为空,将代码库授权给产品内的指定项目
"projects": [
"$project-name"
],
# 权限:readwrite 或 readonly
"permissions": "$permissions",
# 授权代码库的名称
"coderepo": "$coderepo-name"
}'
替换变量后的请求示例如下:
curl -X 'POST' \
'HTTP://xxx.xxx.xxx.xxx:xxxxx/api/v1/products/nautes-labs/coderepobindings/coderepo-binding-vault-proxy' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxx' \
-d '{
"product": "nautes-labs",
"projects": [
"argo-operator"
],
"permissions": "readonly",
"coderepo": "vault-proxy"
}'
# 执行创建/更新代码库授权 API 请求
使用 curl 命令或者其他工具执行 API 请求,以新增代码库授权。
请求成功后,将在指定产品的 default.project
代码库中生成代码库授权的资源文件,并在被授权代码库的 deploy key 列表中添加授权产品或项目的关联代码库的 deploy key。代码库授权的资源文件示例如下:
apiVersion: nautes.resource.nautes.io/v1alpha1
kind: CodeRepoBinding
metadata:
name: coderepo-binding-vault-proxy
spec:
coderepo: repo-xxxx
permissions: readonly
product: product-xxxx
projects:
- argo-operator
请求 API 更新代码库授权也将更新代码库授权的资源文件。
只有当您的账号是 GitLab 的 group 成员且拥有 Maintainer 或更高级别的角色,并具备对
default.project
代码库的 main 分支的写入权限,才可以创建或者更新代码库授权。您可以为一个代码库创建多个代码库授权的资源文件。例如:您可以创建两份资源文件,一份授权给产品、另一份授权给项目,或者将两份资源文件分别授权给不同的项目。代码库的授权范围将由产品和项目授权的并集决定。
代码库授权成功后,如果您需要更新授权产品或项目相关联的代码库,例如:新增或删除关联的代码库,被授权代码库的 deploy key 列表将自动更新以反映相应代码库的变更。
代码库授权的资源文件创建成功后,不能变更
coderepo
的属性值,如果您需要变更被授权的代码库,请先删除代码库授权再重新授权。
# 删除代码库授权(API)
# 生成删除代码库授权 API 请求
通过接口定义 CodeRepoBinding_DeleteCodeRepoBinding
生成 API 请求示例,并添加 access token 作为请求头。
curl -X 'DELETE' \
'HTTP://$api-server-address/api/v1/products/$product-name/coderepobindings/$coderepo-binding-name' \
-H 'accept: application/json' \
-H 'Authorization: Bearer $gitlab-access-token'
替换变量后的请求示例如下:
curl -X 'DELETE' \
'HTTP://xxx.xxx.xxx.xxx:xxxxx/api/v1/products/nautes-labs/coderepobindings/coderepo-binding-vault-proxy' \
-H 'accept: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxx'
# 执行删除代码库授权 API 请求
使用 curl 命令或者其他工具执行 API 请求,以删除代码库授权。
请求成功后,将在指定产品的 default.project
代码库中删除相应的代码库授权资源文件,并重新计算代码库的授权范围,根据计算结果进一步更新被授权代码库的 deploy key 列表。
只有当您的账号是 GitLab 的 group 成员且拥有 Maintainer 或更高级别的角色,并具备对
default.project
代码库的 main 分支的写入权限,才可以删除代码库授权。
# 查询代码库授权列表(API)
# 生成查询代码库授权列表 API 请求
通过接口定义 CodeRepoBinding_ListCodeRepoBindings
生成 API 请求示例,并添加 access token 作为请求头。
curl -X 'GET' \
'HTTP://$api-server-address/api/v1/products/$product-name/coderepobindings' \
-H 'accept: application/json' \
-H 'Authorization: Bearer $gitlab-access-token'
替换变量后的请求示例如下:
curl -X 'GET' \
'HTTP://xxx.xxx.xxx.xxx:xxxxx/api/v1/products/nautes-labs/coderepobindings' \
-H 'accept: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxx'
# 执行查询代码库授权列表 API 请求
使用 curl 命令或者其他工具执行 API 请求,以查询代码库授权列表。代码库授权列表的返回值示例如下:
{
"items": [
{
"product": "nautes-labs",
"name": "coderepo-binding-vault-proxy",
"projects": [
"argo-operator"
],
"permissions": "readonly",
"coderepo": "vault-proxy"
}
]
}
只有当您的账号是 GitLab 的 group 成员,并具备对
default.project
代码库的读取权限,才可以查询代码库授权列表。
# 查看代码库授权详情(API)
# 生成查看代码库授权详情 API 请求
通过接口定义 CodeRepoBinding_GetCodeRepoBinding
生成 API 请求示例,并添加 access token 作为请求头。
curl -X 'GET' \
'HTTP://$api-server-address/api/v1/products/$product-name/coderepobindings/$coderepo-binding-name' \
-H 'accept: application/json' \
-H 'Authorization: Bearer $gitlab-access-token'
替换变量后的请求示例如下:
curl -X 'GET' \
'HTTP://xxx.xxx.xxx.xxx:xxxxx/api/v1/products/nautes-labs/coderepobindings/coderepo-binding-vault-proxy' \
-H 'accept: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxx'
# 执行查看代码库授权详情 API 请求
使用 curl 命令或者其他工具执行 API 请求,以查询代码库授权详情。代码库授权详情的返回值示例与查询代码库授权列表类似。
只有当您的账号是 GitLab 的 group 成员,并具备对
default.project
代码库的读取权限,才可以查看代码库授权详情。
# 强制创建/更新/删除代码库授权(API)
适用于需要跳过 API 校验的特殊场景,详情参见初始化产品。
以创建代码库授权为例,将 project 属性设置为不存在的 project,启用 insecure_skip_check
查询参数,可以强制提交代码库授权的资源文件。 请求示例如下:
curl -X 'POST' \
'HTTP://xxx.xxx.xxx.xxx:xxxxx/api/v1/products/nautes-labs/coderepobindings/coderepo-binding-vault-proxy?insecure_skip_check=true' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxx' \
-d '{
"product": "nautes-labs",
"projects": [
"project-invalid"
],
"permissions": "readonly",
"coderepo": "vault-proxy"
}'