工作流
本文主要介绍如何使用 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"
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 获取工作流详情
请求
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 // 并发执行数量
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
# 获取工作流任务列表
请求
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"
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
异常返回
{
"code": 400,
"description": "workflow name is required",
"extra": {},
"message": "Bad Request",
"type": "error"
}
2
3
4
5
6
7
# 获取工作流任务详情
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": "job-0-0-0-build", # 工作流 JobTask 标识
"display_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", # 项目标识
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
异常返回
# 指定的工作流任务不存在
{
"code": 500,
"description": "mongo: no documents in result",
"message": "Internal Error: "
}
2
3
4
5
6
# 执行工作流
请求
POST /openapi/workflows/custom/task
body 参数样例
点击查看
{
"project_key": "helm", // 项目标识
"workflow_key": "test-openapi", // 工作流标识
"parameters": [ // 全局变量
{
"name": "test",
"type": "string",
"value": "zadig"
},
{
"name": "abc",
"type": "choice",
"value": "123"
},
{
"name": "repo1",
"type: "repo",
"repo": {
"codehost_name": "gitlab",
"repo_namespace": "kr-poc",
"repo_name": "num_test",
"branch": "master",
"prs": [
1
]
}
}
],
"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"
}
]
}
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
body 参数说明
参数名 | 类型 | 描述 | 默认值 | 是否必须 |
---|---|---|---|---|
project_key | string | 项目标识 | 无 | 是 |
workflow_key | string | 工作流标识 | 无 | 是 |
parameters | []Parameter | 全局变量 | 无 | 否 |
inputs | []Input | 执行工作流的具体参数 | 无 | 是 |
Parameter
参数名 | 类型 | 描述 | 默认值 | 是否必须 |
---|---|---|---|---|
name | string | 变量名 | 无 | 是 |
type | string | 类型, 支持 string/text/choice/repo | 无 | 是 |
value | string | 变量值,当类型为 string/text/choice 时使用该字段 | 无 | 是 |
repo | Repo | repo 类型的变量值,仅当类型为 repo 时使用该字段 | 无 | 否 |
Repo
参数名 | 类型 | 描述 | 默认值 | 是否必须 |
---|---|---|---|---|
codehost_name | string | 代码源标识 | 无 | 是 |
repo_namespace | string | repo 的 namespace | 无 | 是 |
repo_name | string | repo 的名称 | 无 | 是 |
branch | string | 分支名 | 无 | 是 |
prs | []int | pr 编号 | 无 | 否 |
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"
}]
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
部署任务
{
"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"
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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" # 待部署容器的镜像信息
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
通用任务
{
"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" # 代码库分支
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
测试任务
{
"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"
}]
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
代码扫描任务
{
"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"
}]
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
自定义任务
{
"job_name": "plugin-task", # 自定义任务名称
"job_type": "plugin", # 自定义任务类型,指定为 plugin
"parameters": { # 自定义任务变量
"kv": [
{
"key": "CONTENT",
"value": "hello world"
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
正常返回
{
"project_name": "simple-service-demo", # 项目标识
"workflow_name": "openapi-test", # 工作流名称
"task_id": 20 # 工作流任务执行的序号 ID
}
2
3
4
5
# 取消工作流任务
请求
DELETE /openapi/workflows/custom/task?taskId=<taskId>&workflowKey=<工作流标识>
Query
参数名 | 类型 | 描述 | 默认值 | 是否必须 |
---|---|---|---|---|
taskId | int | 工作流任务 ID | 无 | 是 |
workflowKey | string | 工作流标识 | 无 | 是 |
正常返回
{
"message": "success"
}
2
3
异常返回
# 指定的工作流任务已成功运行完毕
{
"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"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 重试工作流任务
请求
POST /openapi/workflows/custom/:workflowKey/task/:taskID?projectKey=<项目标识>
query 参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
projectKey | string | 项目标识 | 是 | 无 |
路径参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
workflowKey | string | 工作流标识 | 是 | 无 |
taskID | int | 工作流任务ID | 是 | 无 |
正常返回
{
"message": "success"
}
2
3
异常返回
{
"code": 6161,
"description": "mongo: no documents in result",
"extra": {},
"message": "获取工作流任务失败",
"type": "error"
}
2
3
4
5
6
7
# 审批工作流
提示
适用于 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"
}
2
3
4
5
6
7
正常返回
{
"message": "success"
}
2
3
异常返回
# 指定参数的阶段不需要审批
{
"code": 6169,
"description": "workflow build-images ID 23 stage deploy-myapps do not need approve",
"extra": {},
"message": "批准工作流任务失败",
"type": "error"
}
2
3
4
5
6
7
8
9
# 创建工作流
请求
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 | 是 |
jobs | 任务配置 | []interface{} | 是 |
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": []
}
}
]
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
# 更新工作流
请求
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"
}
2
3
# 工作流视图
# 获取工作流视图列表
请求
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"
}
]
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建工作流视图
请求
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"
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
正常返回
{
"message": "success"
}
2
3
# 编辑工作流视图
请求
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
}
]
}
2
3
4
5
6
7
8
9
正常返回
{
"message": "success"
}
2
3
# 删除工作流视图
请求
DELETE /openapi/workflows/view/:viewName?projectKey=<项目标识>
query 参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
projectKey | string | 项目标识 | 是 | 无 |
路径参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
viewName | string | 视图名称 | 是 | 无 |
正常返回
{
"message": "success"
}
2
3
异常返回
{
"code": 6894,
"description": "find workflow view error: mongo: no documents in result",
"extra": {},
"message": "删除视图失败",
"type": "error"
}
2
3
4
5
6
7
# 工作流预审批
# 创建预审批单
请求
POST /openapi/ticket/approval
Body 参数说明
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
project_key | string | 项目标识 | 是 | 无 |
approval_id | string | 第三方系统审批单号 | 是 | 无 |
status | int | 审批单状态: 0-审批单无效 1-审批单生效 | 是 | 无 |
envs | string | 可选环境限制,空为无限制 | 否 | 无 |
services | []ServiceInfo | 可选服务限制,空为无限制 | 否 | 无 |
users | []User | 可执行用户限制,空为无限制 | 否 | 无 |
execution_window_start | int | 可执行时间窗口开始时间,空为无限制 | 否 | 无 |
execution_window_end | int | 可执行时间窗口结束时间,空为无限制 | 否 | 无 |
ServiceInfo 结构体
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
service_name | string | 服务名 | 是 | 无 |
service_module | string | 服务组件 | 是 | 无 |
User 结构体
参数名 | 类型 | 描述 | 是否必须 | 默认值 |
---|---|---|---|---|
name | string | 用户姓名,用于审批单展示 | 是 | 无 |
string | 邮箱,用于与 Zadig 系统中的用户系统对接 | 是 | 无 |
正常返回
{
"code": 1,
"message": "success"
}
2
3
4
错误返回
{
"code": 500,
"description": "...",
"message": "Internal Error"
}
2
3
4
5
# 工作流日志
# 查看工作流任务实时日志
当工作流任务执行时,可以通过该接口查看工作流任务的实时日志。
请求
GET /openapi/logs/sse/v4/workflow/<工作流标识>/<工作流任务ID>/<工作流JobTask标识>/<tails行数>
返回示例
点击查看
该接口返回的是一个 SSE 流,返回的数据格式如下:
"log message line 1"
"log message line 2"
...
2
3
# 查看工作流任务完整日志
当工作流任务执行完毕后,可以通过该接口查看工作流任务的完整日志。
请求
GET /openapi/logs/log/v4/workflow/<工作流标识>/<工作流任务ID>/<工作流JobTask标识>
返回示例
点击查看
"log message line 1"
"log message line 2"
...
2
3