工作流
本文主要介绍如何使用 OpenAPI 来操作 Zadig 的工作流。
工作流
获取工作流列表
请求
GET /openapi/workflows?projectKey=<项目标识>&viewName=<视图名称>
Query
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
projectKey | string | 项目标识 | 是 | 无 |
viewName | string | 工作流视图名称 | 否 | 无 |
返回说明
参数名 | 类型 | 描述 |
---|---|---|
workflows | []workflow | 工作流列表 |
workflow
参数名 | 类型 | 描述 |
---|---|---|
workflow_key | string | 工作流标识 |
workflow_name | string | 工作流名称 |
update_by | string | 更新者 |
update_time | int | 更新时间 |
type | string | custom |
成功返回
点击查看
{
"workflows": [
{
"workflow_key": "just-deploy",
"workflow_name": "just-deploy",
"update_by": "admin",
"update_time": 1686217885,
"type": "custom"
},
{
"workflow_key": "xiaxianfuwu",
"workflow_name": "下线服务",
"update_by": "admin",
"update_time": 1686193453,
"type": "custom"
}
]
}
获取工作流详情
请求
GET /openapi/workflows/custom/{workflowKey}/detail?projectKey=<项目标识>
Query
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
projectKey | string | 项目标识 | 是 | 无 |
路径参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
workflowKey | string | 工作流标识 | 是 | 无 |
成功返回
点击查看
{
"workflow_key": "build-deploy", // 工作流标识
"workflow_name": "build-deploy", // 工作流名称
"project_key": "lilian-test", // 项目标识
"description": "", // 工作流描述
"created_by": "admin", // 创建者
"create_time": 1686192946, // 创建时间
"updated_by": "", // 更新者
"update_time": 1690180684, // 更新时间
"params": [ // 工作流参数列表
{
"name": "code",
"description": "",
"type": "repo",
"value": "",
"repo": {
"source": "gitee",
"repo_owner": "liyue326",
"repo_namespace": "liyue326",
"repo_name": "picture",
"remote_name": "origin",
"branch": "master",
"hidden": false,
"is_primary": false,
"codehost_id": 4,
"oauth_token": "",
"address": "",
"source_from": "",
"param_name": "",
"job_name": "",
"service_name": "",
"service_module": "",
"repo_index": 0,
"submission_id": ""
},
"default": "",
"is_credential": false
},
{
"name": "name",
"description": "",
"type": "string",
"value": "build",
"repo": null,
"default": "",
"is_credential": false
}
],
"stages": [ // 工作流阶段列表
{
"name": "build", // 阶段名称
"parallel": true, // 是否并发运行
"approval": { // 审批信息
"enabled": false,
"type": "native",
"description": "",
"native_approval": {
"Timeout": 5,
"approve_users": [],
"NeededApprovers": 0
},
"dingtalk_approval": {
"Timeout": 5
}
},
"jobs": [ // 工作流job列表
{
"name": "build", // job名称
"type": "zadig-build", // job类型
"skipped": false, // 是否执行
"spec": { // job详细信息
"docker_registry_id": "630c7ad700430c131062e245",
"service_and_builds": [
{
"build_name": "openapi-build",
"image": "",
"image_name": "service1",
"key_vals": [],
"repos": [],
"service_module": "service1",
"service_name": "service1",
"share_storage_info": null
}
]
},
"run_policy": "",
"service_modules": []
}
]
},
{
"name": "deploy",
"parallel": true,
"approval": {
"enabled": false,
"type": "native",
"description": "",
"native_approval": {
"Timeout": 5,
"approve_users": [],
"NeededApprovers": 0
},
"dingtalk_approval": {
"Timeout": 5
}
},
"jobs": [
{
"name": "deploy",
"type": "zadig-deploy",
"skipped": false,
"spec": {
"deploy_contents": [
"image",
"vars"
],
"deploy_type": "",
"env": "dev",
"job_name": "build",
"origin_job_name": "",
"production": false,
"service_and_images": [],
"services": [
{
"key_vals": [],
"latest_key_vals": [],
"latest_variable_kvs": [],
"service_name": "service2",
"updatable": false,
"update_config": false,
"variable_configs": [],
"variable_kvs": [],
"variable_yaml": ""
},
{
"key_vals": [],
"latest_key_vals": [],
"latest_variable_kvs": [],
"service_name": "service1",
"updatable": true,
"update_config": false,
"variable_configs": [
{
"use_global_variable": false,
"variable_key": "cpuLimit"
},
{
"use_global_variable": false,
"variable_key": "memoryLimit"
},
{
"use_global_variable": false,
"variable_key": "port"
}
],
"variable_kvs": [],
"variable_yaml": ""
}
],
"skip_check_run_status": false,
"source": "fromjob"
},
"run_policy": "",
"service_modules": []
},
{
"name": "default",
"type": "plugin",
"skipped": false,
"spec": {
"plugin": {
"args": [
"echo $(inputs.CONTENT)"
],
"category": "",
"cmds": [
"/bin/sh",
"-c"
],
"description": "hello world",
"envs": [
{
"name": "CONTENT",
"value": "$(inputs.CONTENT)"
}
],
"image": "alpine/curl:3.14",
"inputs": [
{
"default": "hello world",
"description": "content to print",
"is_credential": false,
"name": "CONTENT",
"repo": null,
"type": "string",
"value": "hello world"
}
],
"is_offical": false,
"name": "hello-world",
"outputs": [],
"repo_url": "",
"version": "v0.0.1"
},
"properties": {
"build_os": "",
"cache": {
"medium_type": "",
"nfs_properties": {
"provision_type": "",
"pvc": "",
"storage_class": "",
"storage_size_in_gib": 0,
"subpath": ""
},
"object_properties": {
"id": ""
}
},
"cache_dir_type": "",
"cache_enable": false,
"cache_user_dir": "",
"cluster_id": "",
"custom_envs": [],
"envs": [],
"image_from": "",
"image_id": "",
"log_file_name": "",
"namespace": "",
"params": [],
"registries": [],
"res_req": "low",
"res_req_spec": {
"cpu_limit": 1000,
"gpu_limit": "",
"memory_limit": 512
},
"retry": 0,
"share_storage_details": [],
"timeout": 60
}
},
"run_policy": "",
"service_modules": []
}
]
}
],
"notify_ctls": [ // 通知配置信息列表
{
"enabled": true,
"webhook_type": "wechat",
"weChat_webHook": "xxx",
"notify_type": [
"created",
"failed"
]
}
],
"share_storages": [], // 共享卷信息
"concurrency_limit": 1 // 并发执行数量
}
获取工作流任务列表
请求
GET /openapi/workflows/custom/:workflowKey/tasks?projectKey=<项目标识>
query 参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
projectKey | string | 项目标识 | 是 | 无 |
pageNum | int | 分页-当前页数 | 否 | 1 |
pageSize | int | 分页-单页展示条目 | 否 | 50 |
路径参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
workflowKey | string | 工作流标识 | 是 | 无 |
返回说明
参数名 | 类型 | 描述 |
---|---|---|
total | int | 工作流任务总数 |
workflow_tasks | []workflow_task | 工作流任务列表 |
workflow_task
参数名 | 类型 | 描述 |
---|---|---|
workflow_key | string | 工作流标识 |
workflow_name | string | 工作流名称 |
project_key | string | 项目标识 |
task_id | int | 工作流任务ID |
task_creator | string | 工作流任务执行者 |
create_time | int | 工作流任务创建时间 |
start_time | int | 工作流任务开始时间 |
end_time | int | 工作流任务结束时间 |
status | string | 任务状态包括:created(创建中)、running(运行中)、passed(通过)、failed(失败)、timeout(超时)、cancelled(取消) |
正常返回
{
"total": 15,
"workflow_tasks": [
{
"workflow_key": "build-deploy",
"workflow_name": "build-deploy",
"project_key": "lilian-test",
"task_id": 15,
"create_time": 1688543613,
"task_creator": "webhook",
"start_time": 1688543615,
"end_time": 1688543636,
"status": "passed"
}
]
}
异常返回
{
"code": 400,
"description": "workflow name is required",
"extra": {},
"message": "Bad Request",
"type": "error"
}
获取工作流任务详情
GET /openapi/workflows/custom/task?taskId=<工作流任务ID>&workflowKey=<工作流标识>
Query
参数名 | 类型 | 描述 | 默认值 | 是否必须 |
---|---|---|---|---|
taskId | int | 工作流任务 ID | 无 | 是 |
workflowKey | string | 工作流标识 | 无 | 是 |
正常返回
点击查看
{
"task_id": 24, # 工作流任务序号 ID
"workflow_key": "build-images", # 工作流标识
"params": [ # 工作流变量
{
"name": "USERNAME",
"description": "",
"type": "string",
"value": "zadig",
"default": "",
"is_credential": false
}
],
"status": "running", # 工作流任务状态
"task_creator": "admin", # 工作流任务触发者
"create_time": 1664161285, # 工作流任务创建时间,Unix 时间戳格式
"start_time": 1664161286, # 工作流任务开始执行时间,Unix 时间戳格式
"end_time": 1664172997, # 工作流任务执行结束时间,Unix 时间戳格式
"stages": [ # 工作流任务包含的所有阶段详情
{
"name": "构建", # 阶段名称
"status": "passed", # 阶段状态
"start_time": 1664161286, # 阶段执行开始时间,Unix 时间戳格式
"end_time": 1664172974, # 阶段执行结束时间,Unix 时间戳格式
"jobs": [ # 阶段中包含的所有任务详情
{
"name": "a-myapp-1-build-myapps",
"type": "zadig-build", # 内置构建任务
"status": "passed", # 任务状态
"start_time": 1664172967, # 任务执行开始时间,Unix 时间戳格式
"end_time": 1664172974, # 任务执行结束时间,Unix 时间戳格式
"spec": { # 构建任务执行详细信息(包括代码信息、镜像信息、服务信息、服务组件信息、构建变量信息)
"repos": [ # 代码信息
{
"source": "gitee",
"repo_owner": "kr-test-dev",
"repo_namespace": "kr-test-dev",
"repo_name": "zadig",
"remote_name": "origin",
"branch": "main",
"commit_id": "a13120997b95d8b63f2b5b29c700f89d38a5de54",
"commit_message": "update pkg/microservice/warpdrive/config/const.go.\n\nSigned-off-by: grandy <10196377+grandy@user.noreply.gitee.com>",
"address": "https://gitee.com",
"author_name": "grandy"
}
],
"image": "koderover.tencentcloudcr.com/koderover-demo/myapp-1:20220926141606-26-main", # 镜像信息
"service_name": "a", # 服务名称
"service_module": "myapp-1", # 服务组件名称
"envs": [ # 构建变量信息
{
"key": "username",
"value": "admin",
"type": "string",
"is_credential": false
},
{
"key": "password",
"value": "zadig",
"type": "string",
"is_credential": true
},
{
"key": "version",
"value": "1",
"type": "string",
"is_credential": false
}
]
}
}
]
},
{
"name": "部署",
"status": "passed",
"start_time": 1664172974,
"end_time": 1664172990,
"approval": { # 审批信息
"enabled": true, # 需要审批
"approve_users": [ # 审批人列表
{
"user_name": "admin",
"reject_or_approve": "approve",
"comment": "LGTM",
"operation_time": 1664172985
}
],
"timeout": 120, # 审批超时时间,单位:分钟
"needed_approvers": 1, # 需要满足的审批通过人数
"description": "需审批通过方可部署", # 审批描述
"reject_or_approve": "approve" # approve:通过;reject:拒绝
},
"jobs": [
{
"name": "a-myapp-1-deploy-myapps",
"type": "zadig-deploy", # 内置部署任务
"status": "passed",
"start_time": 1664172986,
"end_time": 1664172990,
"spec": { # 部署任务的详细信息
"env": "dev",
"skip_check_run_status": false, # 是否关闭服务状态检测
"service_and_images": [ # 部署的服务、服务组件、镜像信息
{
"service_name": "a",
"service_module": "myapp-1",
"image": "koderover.tencentcloudcr.com/koderover-demo/myapp-1:20220926141606-26-main"
}
]
}
}
]
},
{
"name": "通用任务",
"status": "passed",
"start_time": 1664172990,
"end_time": 1664172993,
"jobs": [
{
"name": "echo-hello",
"type": "freestyle", # 通用任务
"status": "passed",
"start_time": 1664172990,
"end_time": 1664172993,
"spec": { # 通用任务执行详细信息
"repos": [
{
"source": "gitee",
"repo_owner": "kr-test-dev",
"repo_namespace": "kr-test-dev",
"repo_name": "demo-test",
"remote_name": "origin",
"branch": "master",
"commit_id": "2000aba9195bfce73b0a676e48c0ebfe2f59a4a9",
"commit_message": "update org-debug.txt.\n\nSigned-off-by: grandy <10196377+grandy@user.noreply.gitee.com>",
"address": "https://gitee.com",
"author_name": "grandy"
}
],
"image": "",
"service_name": "",
"service_module": "",
"envs": [
{
"key": "myName",
"value": "zadig",
"type": "string",
"is_credential": false
}
]
}
}
]
},
{
"name": "自定义任务",
"status": "passed",
"start_time": 1664172993,
"end_time": 1664172997,
"jobs": [
{
"name": "say-hi",
"type": "plugin", # 自定义任务
"status": "passed",
"start_time": 1664172993,
"end_time": 1664172997,
"error": "",
"spec": {
"name": "输出 Hello 问候信息",
"is_offical": false,
"description": "问候指定用户",
"repo_url": "",
"version": "v0.0.1",
"image": "koderover.tencentcloudcr.com/koderover-public/greeting-bot:20220923-amd64",
"args": [],
"cmds": [],
"envs": [
{
"name": "WHO_AM_I",
"value": "Zadig"
},
{
"name": "WEATHER_STATUS",
"value": "sunny"
}
],
"inputs": [
{
"name": "who_am_i",
"description": "who am i",
"type": "string",
"value": "zadig",
"default": "zadig",
"is_credential": false
},
{
"name": "weather_status",
"description": "what's the weather like today",
"type": "choice",
"value": "sunny",
"choice_否": [
"sunny",
"cloudy",
"rainy"
],
"default": "sunny",
"is_credential": false
}
],
"outputs": []
}
}
]
}
],
"project_key": "simple-service-demo", # 项目标识
}
异常返回
# 指定的工作流任务不存在
{
"code": 500,
"description": "mongo: no documents in result",
"message": "Internal Error: "
}
执行工作流
注意事项
- 暂不支持通过 OpenAPI 触发自定义任务
- 暂不支持通过 OpenAPI 指定工作流全局变量
请求
POST /openapi/workflows/custom/task
body 参数样例
点击查看
{
"project_key": "helm", // 项目标识
"workflow_key": "test-openapi", // 工作流标识
"inputs": [
{
"job_name": "build-myapps",
"job_type": "zadig-build",
"parameters": {
"registry": "https://koderover.******.com/test",
"service_list": [
{
"service_module": "aslan",
"service_name": "zadig",
"repo_info": [{
"codehost_name": "koderover",
"repo_namespace": "koderover",
"repo_name": "zadig",
"branch": "main"
}]
inputs: [{
"key": "username",
"value": "admin"
},
{
"key": "password",
"value": "Zadig"
}]
}
]
}
},
{
"job_name": "deploy-myapps",
"job_type": "zadig-deploy",
"parameters": {
"env_name": "dev",
"service_list": [
{
"service_name": "zadig",
"service_module": "aslan",
"image_name": "koderover.******.com/test/aslan:main"
},
{
"service_name": "zadig",
"service_module": "zadig-portal",
"image_name": "koderover.******.com/test/zadig-portal:main"
}
]
}
{
"job_name": "jira-issue-update",
"job_type": "freestyle",
"parameters": {
"kv": [
{
"key": "IssueID",
"value": "ZAD-10126"
},
{
"key": "FromStatus",
"value": "Testing"
},
{
"key": "TargetStatus",
"value": "ToBeReleased"
}
]
}
},
{
"job_name": "deploy-my-app",
"job_type": "custom-deploy",
"parameters": {
"target_list": [
{
"workload_type": "Deployment",
"workload_name": "service2",
"container_name": "service2",
"image_name": "koderover.***.com/test/service2:0505"
}
]
}
}
]
}
body 参数说明
参数名 | 类型 | 描述 | 默认值 | 是否必须 |
---|---|---|---|---|
project_key | string | 项目标识 | 无 | 是 |
workflow_key | string | 工作流标识 | 无 | 是 |
inputs | []Input | 执行工作流的具体参数 | 无 | 是 |
Input 参数说明
下面将分开介绍内置构建任务、部署任务、Kubernetes 部署任务、通用任务的触发参数。
构建任务
{
"job_name": "build-myapps", # 构建任务名称
"job_type": "zadig-build", # 构建任务类型,指定为 zadig-build
"parameters": {
"registry": "https://koderover.******.com/test", # 镜像仓库信息
"service_list": [ # 要构建的服务信息
{
"service_module": "aslan", # 服务组件名称
"service_name": "zadig", # 服务名称
"repo_info": [{ # 构建该服务组件的代码库信息
"codehost_name": "koderover", # 代码源标识
"repo_namespace": "koderover", # 代码库组织名/用户名
"repo_name": "zadig", # 代码库名称
"branch": "main" # 代码库分支
}]
inputs: [{ # 构建变量信息,若设置为固定值或全局变量,则无需指定
"key": "username",
"value": "admin"
},
{
"key": "password",
"value": "Zadig"
}]
},
{
"service_module": "zadig-portal",
"service_name": "zadig",
"repo_info": [{
"codehost_name": "koderover",
"repo_namespace": "koderover",
"repo_name": "zadig-portal",
"branch": "main"
}]
}
]
}
}
部署任务
{
"job_name": "deploy-myapps", # 部署任务名称
"job_type": "zadig-deploy", # 部署任务类型,指定为 zadig-deploy
"parameters": { # 部署参数
"env_name": "dev", # 待部署环境信息,若设置为固定值或全局变量,则无需配置该字段
"service_list": [ # 待部署服务信息,若设置为其他任务输出,则无需配置该字段
{
"service_name": "zadig", # 待部署服务名称
"service_module": "aslan", # 待部署服务组件名称
"image_name": "koderover.***.com/test/aslan:main" # 待部署服务组件的镜像
},
{
"service_name": "zadig",
"service_module": "zadig-portal",
"image_name": "koderover.***.com/test/zadig-portal:main"
}
]
}
Kubernetes 部署任务
{
"job_name": "deploy-my-app", # Kubernetes 部署任务名称
"job_type": "custom-deploy", # Kubernetes 部署任务类型,指定为 custom-deploy
"parameters": {
"target_list": [ # 待部署容器信息,若设置为固定值,则无需指定
{
"workload_type": "Deployment", # 待部署容器应用的类型,支持 Deployment 以及 StatefulSet
"workload_name": "service2", # 待部署容器应用的名称
"container_name": "service2", # 待部署容器应用的 container 名称
"image_name": "koderover.***.com/test/service2:0505" # 待部署容器的镜像信息
}
]
}
}
通用任务
{
"job_name": "jira-issue-update", # 通用任务名称
"job_type": "freestyle", # 通用任务类型,指定为 freestyle
"parameters": { # 通用任务中的参数和值,若设置为固定值或全局变量,则无需指定
"kv": [
{
"key": "IssueID",
"value": "ZAD-10126"
},
{
"key": "FromStatus",
"value": "Testing"
},
{
"key": "TargetStatus",
"value": "ToBeReleased"
}
],
"repo_info": [ # 通用任务中的代码库信息
{
"codehost_name": "koderover", # 代码源标识
"repo_namespace": "koderover", # 代码库组织名/用户名
"repo_name": "zadig", # 代码库名称
"branch": "task-mgr" # 代码库分支
}
]
}
}
测试任务
{
"job_name": "test-myapps", # 测试任务名称
"job_type": "zadig-test", # 构建任务类型,指定为 zadig-test
"parameters": {
"testing_list": [ # 要测试的任务信息
{
"testing_name": "unit-test", # 测试任务名称
"repo_info": [{ # 测试任务的代码库信息
"codehost_name": "koderover", # 代码源标识
"repo_namespace": "koderover", # 代码库组织名/用户名
"repo_name": "zadig", # 代码库名称
"branch": "main" # 代码库分支
}]
inputs: [{ # 测试变量信息,若设置为固定值或全局变量,则无需指定
"key": "username",
"value": "admin"
},
{
"key": "password",
"value": "Zadig"
}]
},
{
"testing_name": "integration-test",
"repo_info": [{
"codehost_name": "koderover",
"repo_namespace": "koderover",
"repo_name": "zadig-portal",
"branch": "main"
}]
}
]
}
}
代码扫描任务
{
"job_name": "scan-myapps", # 代码扫描任务名称
"job_type": "zadig-scanning", # 构建任务类型,指定为 zadig-scanning
"parameters": {
"scanning_list": [ # 代码扫描的任务信息
{
"scanning_name": "scan", # 代码扫描任务名称
"repo_info": [{ # 代码扫描任务的代码库信息
"codehost_name": "koderover", # 代码源标识
"repo_namespace": "koderover", # 代码库组织名/用户名
"repo_name": "zadig", # 代码库名称
"branch": "main" # 代码库分支
}]
},
{
"scanning_name": "scan-1",
"repo_info": [{
"codehost_name": "koderover",
"repo_namespace": "koderover",
"repo_name": "zadig-portal",
"branch": "main"
}]
}
]
}
}
正常返回
{
"project_name": "simple-service-demo", # 项目标识
"workflow_name": "openapi-test", # 工作流名称
"task_id": 20 # 工作流任务执行的序号 ID
}
取消工作流任务
请求
DELETE /openapi/workflows/custom/task?task_id=<task_id>&workflowKey=<工作流标识>
Query
参数名 | 类型 | 描述 | 默认值 | 是否必须 |
---|---|---|---|---|
task_id | int | 工作流任务 ID | 无 | 是 |
workflowKey | string | 工作流标识 | 无 | 是 |
正常返回
{
"message": "success"
}
异常返回
# 指定的工作流任务已成功运行完毕
{
"code": 6163,
"description": "task: build-images:20 is passed, cannot cancel",
"extra": {},
"message": "取消工作流任务失败",
"type": "error"
}
# 指定的工作流或者任务不存在
{
"code": 6163,
"description": "mongo: no documents in result",
"extra": {},
"message": "取消工作流任务失败",
"type": "error"
}
重试工作流任务
请求
POST /openapi/workflows/custom/:workflowKey/task/:taskID?projectKey=<项目标识>
query 参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
projectKey | string | 项目标识 | 是 | 无 |
路径参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
workflowKey | string | 工作流标识 | 是 | 无 |
taskID | int | 工作流任务ID | 是 | 无 |
正常返回
{
"message": "success"
}
异常返回
{
"code": 6161,
"description": "mongo: no documents in result",
"extra": {},
"message": "获取工作流任务失败",
"type": "error"
}
审批工作流
提示
适用于 Zadig 审批。
请求
POST /openapi/workflows/custom/task/approve
body 参数说明
参数名 | 类型 | 描述 | 默认值 | 是否必须 |
---|---|---|---|---|
task_id | int | 工作流任务 ID | 无 | 是 |
workflow_key | string | 工作流标识 | 无 | 是 |
stage_name | string | 工作流待审批的阶段名称 | 无 | 是 |
approve | bool | 是否审批通过 | false | 否 |
comment | string | 审批信息 | 无 | 否 |
body 参数示例
{
"task_id": 2,
"workflow_key": "infra-dev-workflow",
"stage_name": "deploy",
"approve": true,
"comment": "LGTM"
}
正常返回
{
"message": "success"
}
异常返回
# 指定参数的阶段不需要审批
{
"code": 6169,
"description": "workflow build-images ID 23 stage deploy-myapps do not need approve",
"extra": {},
"message": "批准工作流任务失败",
"type": "error"
}
创建工作流
请求
POST /api/aslan/workflow/v4
body 参数说明
提示
该接口的参数相对复杂,自己组装比较费力。推荐先在页面中创建工作流 -> 在配置页面点击 YAML
-> 复制 YAML 内容后借助在线转换工具 (opens new window)来快速获得参数。
参数名 | 类型 | 描述 | 默认值 | 是否必须 |
---|---|---|---|---|
name | string | 工作流标识 | 无 | 是 |
display_name | string | 工作流名称 | 无 | 是 |
project | string | 项目标识 | 无 | 是 |
description | string | 工作流描述信息 | 无 | 否 |
concurrency_limit | int | 工作流任务并发数,-1 表示无限制,0 表示不可执行 | 0 | 是 |
stages | []Stage | 阶段配置 | 无 | 否 |
Stage 参数说明
参数名 | 描述 | 类型 | 必填 |
---|---|---|---|
name | 阶段名称 | string | 是 |
parallel | 是否开启并发执行 | bool | 是 |
approval | 人工审批配置 | []Approval | 否 |
jobs | 任务配置 | []interface{} | 是 |
Approval 参数说明
参数名 | 描述 | 类型 | 必填 |
---|---|---|---|
enabled | 是否开启人工审批 | bool | 是 |
type | 审批方式,可选值如下:native (即:Zadig 审批)lark (即:飞书审批) | string | enabled = true 时必填 |
native_approval | Zadig 审批配置 | []NativeApproval | type = native 时必填 |
lark_approval | 飞书审批配置 | []LarkApproval | type = lark 时必填 |
NativeApproval 参数说明
参数名 | 描述 | 类型 | 必填 |
---|---|---|---|
approve_users | 审批人清单 | []ApproveUser | 是 |
timeout | 超时时间,单位分钟 | int | 是 |
needed_approvers | 需要审批的人数 | int | 是 |
ApproveUser 参数说明
参数名 | 描述 | 类型 | 必填 |
---|---|---|---|
user_name | 审批人的账号名称 | string | 是 |
user_id | 审批人的账号 ID | string | 是 |
LarkApproval 参数说明
参数名 | 描述 | 类型 | 必填 |
---|---|---|---|
approve_users | 审批人清单 | []LarkApproveUser | 是 |
timeout | 超时时间,单位分钟 | int | 是 |
LarkApproveUser 参数说明
参数名 | 描述 | 类型 | 必填 |
---|---|---|---|
id | 审批人的账号 ID | string | 是 |
name | 审批人的账号名称 | string | 是 |
body 参数示例
以下 body 示例中包含 构建
-> 部署
-> 测试
-> 自定义任务
四个阶段:
点击查看
{
"name": "workflow-demo",
"display_name": "workflow-demo",
"project": "demo",
"description": "workflow-demo description",
"concurrency_limit": 5,
"stages": [
{
"name": "构建",
"parallel": true,
"jobs": [
{
"name": "build",
"type": "zadig-build",
"run_policy": "",
"spec": {
"docker_registry_id": "62c**********",
"service_and_builds": [
{
"service_name": "service1",
"service_module": "service1",
"image_name": "nginx",
"value": "service1/service1",
"build_name": "build-demo"
}
]
}
}
]
},
{
"name": "部署",
"parallel": true,
"approval": {
"enabled": true,
"type": "native",
"native_approval": {
"approve_users": [
{
"user_name": "admin",
"user_id": "9792310b-**********"
},
{
"user_name": "sre-admin",
"user_id": "9837370s-**********"
}
],
"timeout": 5,
"needed_approvers": 1
}
},
"jobs": [
{
"name": "deploy",
"type": "zadig-deploy",
"spec": {
"env": "dev",
"production": false,
"deploy_contents": [
"image"
],
"skip_check_run_status": false,
"source": "fromjob",
"job_name": "build",
"service_and_images": [
{
"service_name": "service1",
"service_module": "service1",
"value": "service1/service1"
}
]
}
}
]
},
{
"name": "测试",
"parallel": true,
"jobs": [
{
"name": "test",
"type": "zadig-test",
"spec": {
"test_type": "service_test",
"source": "fromjob",
"job_name": "build",
"service_and_tests": [
{
"service_name": "service1",
"service_module": "service1",
"name": "smoke-test",
"project_name": "voting-app"
}
]
}
}
]
},
{
"name": "分发",
"parallel": true,
"jobs": [
{
"name": "common",
"type": "freestyle",
"run_policy": "",
"spec": {
"properties": {
"timeout": 60,
"res_req": "low",
"res_req_spec": {
"cpu_limit": 1000,
"memory_limit": 512
},
"cluster_id": "",
"build_os": "focal",
"image_id": "630xxxxxxxxxxxx",
"image_from": "koderover",
"envs": [
{
"key": "key1",
"value": "val1",
"type": "string",
"is_credential": false
}
],
"cache_enable": true,
"cache_dir_type": "workspace",
"cache_user_dir": ""
},
"steps": [
{
"name": "tools",
"type": "tools",
"spec": {
"installs": [
{
"name": "go",
"version": "1.19.3",
"id": "go1.19.3"
}
]
}
},
{
"name": "git",
"type": "git",
"spec": {
"repos": [
{
"codehost_id": 23,
"repo_owner": "owner1",
"repo_name": "hello",
"source": "GitHub",
"branch": "main",
"checkout_path": "",
"remote_name": "origin",
"submodules": false,
"hidden": false,
"repo_namespace": "owner1"
}
]
}
},
{
"name": "shell",
"type": "shell",
"spec": {
"script": "#!/bin/bash\nset -e\necho hello"
}
}
]
}
}
]
},
{
"name": "镜像分发",
"parallel": true,
"jobs": [
{
"name": "image-release",
"type": "zadig-distribute-image",
"run_policy": "",
"isCreate": true,
"spec": {
"source": "fromjob",
"job_name": "build",
"source_registry_id": "",
"target_registry_id": "630xxxxxxxxxxxx",
"targets": [
{
"service_name": "n-1",
"service_module": "nginx-latest",
"image_name": "nginx",
"value": "n-1/nginx-latest"
}
],
"timeout": 10,
"cluster_id": "",
"params": []
}
}
]
}
]
}
更新工作流
请求
PUT /api/aslan/workflow/v4/:name?projectName=<project_name>
query 参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
projectName | string | 项目标识 | 是 | 无 |
路径参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
name | string | 工作流名称 | 是 | 无 |
body 参数说明
参考创建工作流参数
删除工作流
请求
DELETE /openapi/workflows/custom?workflowKey=<工作流标识>&projectKey=<项目标识>
query 参数说明
参数名 | 类型 | 描述 | 默认值 | 是否必须 |
---|---|---|---|---|
workflowKey | string | 工作流标识 | 无 | 是 |
projectKey | string | 项目标识 | 无 | 是 |
正常返回
{
"message": "success"
}
工作流视图
获取工作流视图列表
请求
GET /openapi/workflows/view?projectKey=<项目标识>
query 参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
projectKey | string | 项目标识 | 是 | 无 |
返回说明
参数名 | 说明 | 类型 |
---|---|---|
name | 视图名称 | string |
project_key | 项目标识 | string |
update_time | 更新时间 | int |
update_by | 更新者 | string |
workflows | 工作流列表 | []workflow |
workflow
参数名 | 说明 | 类型 |
---|---|---|
workflow_key | 工作流标识 | string |
workflow_type | custom | string |
正常返回
点击查看
[
{
"name": "test-view",
"project_key": "lilian-test",
"workflows": [
{
"workflow_key": "xiaxianfuwu",
"workflow_type": "custom",
}
],
"update_time": 1689329334,
"update_by": "admin"
}
]
创建工作流视图
请求
POST /openapi/workflows/view
body 参数说明
参数名 | 说明 | 类型 | 必填 |
---|---|---|---|
project_key | 项目标识 | string | 是 |
name | 工作流视图名称 | string | 是 |
workflow_list | 工作流列表 | []Workflow | 是 |
Workflow 参数说明
参数名 | 说明 | 类型 | 必填 |
---|---|---|---|
workflow_key | 工作流标识 | string | 是 |
workflow_type | custom | string | 是 |
body 参数示例
点击查看
{
"project_key": "demo",
"name": "view-demo",
"workflow_list": [
{
"workflow_key": "dev",
"workflow_type": "custom"
},
{
"workflow_key": "nacos-config-update",
"workflow_type": "custom"
}
]
}
正常返回
{
"message": "success"
}
编辑工作流视图
请求
PUT /openapi/workflows/view/:viewName?projectKey=<项目标识>
query 参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
projectKey | string | 项目标识 | 是 | 无 |
路径参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
viewName | string | 视图名称 | 是 | 无 |
body 参数说明
参数名 | 说明 | 类型 | 必填 | 默认值 |
---|---|---|---|---|
workflow_list | 工作流列表 | []Workflow | 是 | 无 |
workflow
参数名 | 说明 | 类型 | 必填 | 默认值 |
---|---|---|---|---|
workflow_key | 工作流标识 | string | 是 | 无 |
workflow_type | custom | string | 是 | 无 |
enabled | true :将工作流加入视图false :将工作流从视图中删除 | bool | 是 | 无 |
body参数示例
点击查看
{
"workflow_list":[
{
"workflow_key":"build-deploy",
"workflow_type":"custom",
"enabled":true
}
]
}
正常返回
{
"message": "success"
}
删除工作流视图
请求
DELETE /openapi/workflows/view/:viewName?projectKey=<项目标识>
query 参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
projectKey | string | 项目标识 | 是 | 无 |
路径参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
viewName | string | 视图名称 | 是 | 无 |
正常返回
{
"message": "success"
}
异常返回
{
"code": 6894,
"description": "find workflow view error: mongo: no documents in result",
"extra": {},
"message": "删除视图失败",
"type": "error"
}