自定义工作流

自定义工作流中提供了充分的开放性,支持自由编排工作流流程,自定义执行步骤,下面展开介绍相关概念和具体使用。

基本概念

  • Workflow:工作流,可在工作流中编排多个 Stage 的执行过程
  • Stage:对工作流执行阶段进行逻辑分组,比如构建 Stage、部署 Stage…多个 Stage 串行运行,一个 Stage 可包括多个 Job
  • Job:一个完整的任务,比如构建、部署、测试…多个 Job 可串行执行或并发执行

新建

进入项目中点击新建工作流,选择自定义工作流,系统提供界面化YAML 两种方式来配置自定义工作流

create_common_workflow create_common_workflow

界面化配置

基本信息

包括工作流名称和描述,同一项目下的工作流名称应唯一。

common_workflow_config

Stage

点击 +Stage 增加新的 Stage 步骤。

common_workflow_config

参数说明:

  • Stage 名称:在同一个自定义工作流中,Stage 名称唯一
  • 并发执行:开启后,在 Stage 下配置的多个 Job 将会并发执行
  • 前置步骤:可按需开启人工审核。开启后,需要审核通过,该 Stage 下的 Job 才会被执行

Job

添加 Stage 后,点击 Stage 下方的 +Job 为 Stage 增加 Job 配置,系统目前支持构建部署两种 Job 类型。

common_workflow_config

构建 Job

common_workflow_config

参数说明:

  • Job 名称:支持 32 位以内的小写英文字母、数字或者中划线,且以小写英文字母开头;在同一个自定义工作流中,Job 名称需唯一
  • 镜像仓库:选择镜像仓库,当构建 Job 执行完成功后,构建出的镜像(即内置 $IMAGE 变量)会被推送到所选仓库中
  • 服务组件与构建配置:选择服务组件与构建配置,支持设置构建配置中的自定义变量

提示

  1. 内置构建 Job 执行结束后会输出 $IMAGE 变量(页面中不可见,系统隐式逻辑),可用于内置部署 Job 中。
  2. 内置构建 Job 中不再支持 $ENV_NAME 构建变量,需要确保构建脚本中未使用该变量。
  3. 暂不支持使用 Jenkins 构建。

部署 Job

common_workflow_config

参数说明:

  • Job 名称:支持 32 位以内的小写英文字母、数字或者中划线,且以小写英文字母开头;在同一个自定义工作流中,Job 名称需唯一
  • 环境:选择要部署的环境
  • 服务来源:包括其他 Job 输出或运行时输入
    • 其他 Job 输出:可选择前置 Job,使用 Job 中的 $IMAGE 变量来部署服务(目前只支持选择前置的构建 Job)
    • 运行时输入:运行工作流时手动指定

人工审核

开启 Stage 配置中的人工审核,在 Stage 执行之前会触发审核。

common_workflow_config

参数说明:

  • 超时时间:从触发审核的时间点开始算起,当超过超时时间后视为审核超时失败,后续的 Stage 将不会执行
  • 审核人:选择希望参与审核的人员
  • 需要审核人数:当审核通过的人数满足此处指定的值时,即视为整个审核通过,Stage 会正常执行

YAML 方式配置

配置说明

用 YAML 文件的方式定义工作流,YAML 内容的整体结构描述如下:

  1. name:「工作流名称」 // 必填项,全局唯一,匹配 ^[a-z0-9-]{1,32}$
  2. stages: // 必填项,多个 Stage 将会按照先后顺序执行
  3. - Stage1 的配置」
  4. - Stage2 的配置」
  5. - 「更多 Stage 的配置...」
  6. project: 「工作流所属项目名称」 // 必填项
  7. description: 「工作流描述」
  8. multi_run: 「可选值:true/false // 当同时触发多次工作流时,多条任务是否能并行执行,默认为 false

其中每一个 Stage 的具体配置如下:

  1. name: Stage 名称」 // 必填项
  2. parallel: 「可选值:true/false // 该 Stage 下的多个 Job 是否可以并发执行,默认为 false
  3. approval: 「人工审核配置」 // 非必填,按需配置
  4. jobs: // 必填项
  5. - Job1 的配置」
  6. - Job2 的配置」
  7. - 「更多 Job 的配置...」

人工审核的具体配置如下:

  1. enabled: true
  2. approve_users: // 审核人信息,可配置多个
  3. - user_id: 「审核人 ID
  4. user_name: 「审核人昵称」
  5. - user_id: 「...」
  6. user_name: 「...」
  7. timeout: 「审核超时时间」 // 整数类型,单位:分钟
  8. needed_approvers: 「需要审核的人数」 // 整数类型
  9. description: 「审核描述信息」 // 非必填

目前内置了构建和部署两种类型的 Job,构建 Job 的具体配置如下:

在指定的构建中有相关构建变量配置时,在 YAML 中设置构建变量才有效。

  1. name:「Job 名称」 // 必填项
  2. type: zadig-build // 必填项,指定为 zadig-build
  3. spec: // 必填项
  4. docker_registry_id: 「镜像仓库 ID
  5. service_and_builds: // 服务组件的构建信息,可配置多个服务组件
  6. - service_module: 「服务组件名称」
  7. service_name: 「服务名称」
  8. build_name: 「构建名称」
  9. key_vals: // 构建变量信息,支持配置字符串和枚举类型的变量,分别见如下 string 和 choice 类型的变量示例
  10. - key: username // 构建变量名称
  11. value: zadig // 构建变量值
  12. is_credential: false // 是否加密,默认为 false
  13. type: string
  14. - key: password
  15. value: v1
  16. is_credential: false
  17. type: choice
  18. choice_option: // 枚举类型变量的可选值
  19. - v1
  20. - v2
  21. - service_module: 「服务组件名称」 // 更多服务组件的构建信息
  22. service_name: 「服务名称」
  23. build_name: 「构建名称」
  24. ...

内置部署 Job 的具体配置如下:

  1. name: Job 名称」 // 必填项
  2. type: zadig-deploy // 指定为 zadig-deploy
  3. spec:
  4. env: 「部署环境」 // 必填项
  5. source: 「部署时使用的服务镜像的来源」 // 必填项,可选:runtime(运行时输入) / fromjob(其他 Job 输出)
  6. job_name: Job 名称」 // 当 source 为 fromjob 时需配置

YAML 样例

使用以下工作流配置为例:

  1. 第一个 Stage:包含构建 Job,并行构建 2 个服务(myapp-1 和 myapp-2)
  2. 第二个 Stage:包含部署 Job 并开启人工审核,使用上述构建 Job 中的镜像产物来部署 pre-release 环境

对应的完整 YAML 配置示例如下,供参考:

  1. name: pre-release-deploy
  2. stages:
  3. - name: 构建
  4. parallel: true
  5. jobs:
  6. - name: build-myapps
  7. type: zadig-build
  8. spec:
  9. docker_registry_id: 6247eb0832a15f910118318c
  10. service_and_builds:
  11. - build_name: simple-service-build-nginx-1
  12. key_vals:
  13. - is_credential: false
  14. key: username
  15. type: string
  16. value: admin
  17. - is_credential: false
  18. choice_option:
  19. - v1
  20. - v2
  21. key: password
  22. type: choice
  23. value: v1
  24. service_module: myapp-1
  25. service_name: a
  26. - build_name: simple-service-build-myapp-2
  27. service_module: myapp-2
  28. service_name: b
  29. - name: 部署
  30. approval:
  31. enabled: true
  32. approve_users:
  33. - user_id: af14dfd2-b57d-11ec-9511-9e1ccf83f7b3
  34. user_name: admin
  35. - user_id: 2d59d2f4-c6a5-11ec-a89e-2e173601a9ce
  36. user_name: zadig
  37. timeout: 120
  38. needed_approvers: 1
  39. description: '预发布环境部署,需审核通过方可执行'
  40. jobs:
  41. - name: deploy
  42. type: zadig-deploy
  43. spec:
  44. env: pre-release
  45. job_name: build-myapps
  46. source: fromjob
  47. project: simple-service
  48. description: 预发布环境部署
  49. multi_run: false

自定义工作流样例

可在自定义工作流中自由编排流程,下面简单举例几种场景。

场景一:构建镜像到不同的仓库

配置多个构建 Job,每个 Job 中指定不同的镜像仓库。

common_workflow_demo

场景二:同时部署多个环境

配置多个部署 Job,每个 Job 中指定不同的环境。

common_workflow_demo

场景三:使用不同的镜像仓库来部署不同的环境

配置多个构建 Job,每个构建 Job 中指定不同的镜像仓库;为每个环境配置部署 Job,服务来源选择其他 Job 输出并指定对应 Job。

common_workflow_demo

场景四:审核通过后再部署环境

部署 Stage 配置中增加人工审核。

common_workflow_demo common_workflow_demo

在部署步骤执行之前会触发审核,审核通过后工作流才会继续执行。

common_workflow_demo

执行

点击执行工作流:

run_common_workflow

点击具体的构建 Job 可查看构建日志:

Job 名称规则为:服务名-服务组件名-Job 名

run_common_workflow