# 维护项目

在开始本节之前,请确保您已阅读 主体流程 章节,了解执行流水线和部署应用的主体流程和相关术语。

通过维护产品和项目,您可以构建和产品的微服务架构一致的管理单元。

项目对应一个微服务,每个项目有自己的代码库。您可以使用集群进行项目的集成和部署,也可以使用产品的制品库对项目的制品进行存储和版本管理。 一个产品下可以包含多个项目。

支持通过 命令行 和 API 两种方式维护项目。

# 前提条件

# 创建 access token

GitLab 安装完成后,您需要注册一个账号,并创建 personal access token (opens new window),其中 access token 的权限范围包括:api、read_api、read_repository 和 write_repository。

access token 将作为请求 API 的请求头。

# 导入证书

在使用 HTTPS 协议访问 Nautes API Server 之前,请先导入证书

# 创建产品

项目归属于产品,您需要创建至少一个产品

# 创建和更新项目(API)

# 生成创建/更新项目的 API 请求

通过接口定义 Project_SaveProject 生成 API 请求示例,并添加 access token 作为请求头。

    # 替换变量 $api-server-address 为 Nautes API Server 的访问地址
    # 替换变量 $gitlab-access-token 为 GitLab 访问令牌
    # 替换变量 $product-name 为项目所属产品的名称
    # 替换变量 $project-name 为项目名称
    curl -X 'POST' \
        'HTTP://$api-server-address/api/v1/products/$product-name/projects/$project-name' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer $gitlab-access-token' \
        -d '{
                # 项目的开发语言
                "language": $project-language
            }'

替换变量后的请求示例如下:

    curl -X 'POST' \
        'HTTP://xxx.xxx.xxx.xxx:xxxxx/api/v1/products/nautes-labs/projects/api-server' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxx'\
        -d '{
                "language": "Go"
            }'

# 执行创建/更新项目的 API 请求

使用 curl 命令或者其他工具执行 API 请求,以新增项目。

请求成功后,将在指定产品的 default.project 代码库中生成项目的资源文件。项目的资源文件示例如下:

    apiVersion: nautes.resource.nautes.io/v1alpha1
    kind: Project
    metadata:
        name: nautes-labs
        namespace: nautes
    spec:
        language: "Go"
        product: "nautes-labs"

请求 API 更新项目时也将更新项目的资源文件。

只有当您的账号是 GitLab 的 group 成员,并具备对 default.project 代码库的 main 分支的写入权限,才可以创建或者更新项目。

# 删除项目(API)

在删除项目之前,请先删除与项目关联的所有实体和资源,例如:代码库、流水线运行时和部署运行时等,否则将不能执行删除。

# 生成删除项目的 API 请求

通过接口定义 Project_DeleteProject 生成 API 请求示例,并添加 access token 作为请求头。

    curl -X 'DELETE' \
        'HTTP://$api-server-address/api/v1/products/$product-name/projects/$project-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/projects/api-server' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxx'

# 执行删除项目的 API 请求

使用 curl 命令或者其他工具执行 API 请求,以删除项目。

请求成功后,将删除在指定产品的 default.project 代码库中的项目资源文件。

只有当您的账号是 GitLab 的 group 成员,并具备对 default.project 代码库的 main 分支的写入权限,才可以删除项目。

# 查询项目列表(API)

# 生成查询项目列表的 API 请求

通过接口定义 Project_ListProjects 生成 API 请求示例,并添加 access token 作为请求头。

    curl -X 'GET' \
        'HTTP://$api-server-address/api/v1/products/$product-name/projects' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer $gitlab-access-token'

替换变量后的请求示例如下:

    curl -X 'GET' \
        'HTTP://xxx.xxx.xxx.xxx:xxxxx/api/v1/products/nautes-labs/projects' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxx'

# 执行查询项目列表的 API 请求

使用 curl 命令或者其他工具执行 API 请求,以查询项目列表。项目列表的返回值示例如下:

{
    "items": [
        {
            "product": "nautes-labs",
            "name": "api-server",
            "language": "GO"
        },
        {
            "product": "nautes-labs",
            "name": "cluster-operator",
            "language": "GO"
        }
    ]
}

只有当您的账号是 GitLab 的 group 成员,并具备对 default.project 代码库的读取权限,才可以查询到产品的项目列表。

# 查询项目详情(API)

# 生成查看项目详情的 API 请求

通过接口定义 Project_GetProject 生成 API 请求示例,并添加 access token 作为请求头。

    curl -X 'GET' \
        'HTTP://$api-server-address/api/v1/products/$product-name/projects/$project-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/projects/api-server' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxx'

# 执行查看项目详情的 API 请求

使用 curl 命令或者其他工具执行 API 请求,以查询项目详情。项目详情的返回值示例与查询项目列表类似。

只有当您的账号是 GitLab 的 group 成员,并具备对 default.project 代码库的读取权限,才可以查询到产品的项目详情。

# 强制创建/更新/删除项目(API )

适用于需要跳过 API 校验的特殊场景,详情参见初始化产品

以创建项目为例,当项目所属产品中存在不合规资源(如环境关联的集群被销毁),启用 insecure_skip_check 查询参数并设置其值为 true,可以跳过校验方法并强制提交项目的资源文件。请求示例如下:

    curl -X 'POST' \
        'HTTP://xxx.xxx.xxx.xxx:xxxxx/api/v1/products/nautes-labs/projects/cluster-operator?insecure_skip_check=true ' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxx'\
        -d '{
                "language": "Go"
            }'