中间参数¶
v3.4 及更高版本
传统上,Argo workflows仅在工作流启动时支持从用户界面输入参数,之后基本上就处于自动运行状态。然而,存在许多需要人工交互的使用场景。
这种交互形式是在工作流过程中提供输入文本,并从工作流步骤智能生成的选项下拉列表中进行选择。
在jenkins中你可以看到一个类似的功能是pipeline-input-step
示例用例包括:
- 在生产环境中执行操作前需要人工审批。
- 以编程方式生成输入列表供用户选择。 从工作流自身生成的可用数据库列表中进行选择。
该功能通过suspend template实现。
工作流将在Suspend节点处暂停,用户将能够使用文本或下拉字段类型来更新参数。
中间参数审批示例¶
- 以下示例展示了静态枚举值
approval步骤。 - 用户可以在
[YES, NO]之间进行选择,该选择将用于后续步骤。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: intermediate-parameters-cicd-
spec:
entrypoint: cicd-pipeline
templates:
- name: cicd-pipeline
steps:
- - name: deploy-pre-prod
template: deploy
- - name: approval
template: approval
- - name: deploy-prod
template: deploy
when: '{{steps.approval.outputs.parameters.approve}} == YES'
- name: approval
suspend: {}
inputs:
parameters:
- name: approve
default: 'NO'
enum:
- 'YES'
- 'NO'
description: >-
Choose YES to continue workflow and deploy to production
outputs:
parameters:
- name: approve
valueFrom:
supplied: {}
- name: deploy
container:
image: 'argoproj/argosay:v2'
command:
- /argosay
args:
- echo
- deploying
中间参数数据库模式更新示例¶
- 以下示例展示了如何以编程方式生成
enum枚举值。 generate-db-list模板会生成一个名为db_list的输出。- 该输出的类型为
json。 - 由于这个
json有一个名为key的enum字段,包含一组选项数组,用户界面会解析并以下拉菜单形式显示。 - 输出也可以是任意字符串,这种情况下用户界面会将其显示为文本字段,用户之后可以编辑。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: intermediate-parameters-db-
spec:
entrypoint: db-schema-update
templates:
- name: db-schema-update
steps:
- - name: generate-db-list
template: generate-db-list
- - name: choose-db
template: choose-db
arguments:
parameters:
- name: db_name
value: '{{steps.generate-db-list.outputs.parameters.db_list}}'
- - name: update-schema
template: update-schema
arguments:
parameters:
- name: db_name
value: '{{steps.choose-db.outputs.parameters.db_name}}'
- name: generate-db-list
outputs:
parameters:
- name: db_list
valueFrom:
path: /tmp/db_list.txt
container:
name: main
image: 'argoproj/argosay:v2'
command:
- sh
- '-c'
args:
- >-
echo "{\"enum\": [\"db1\", \"db2\", \"db3\"]}" | tee /tmp/db_list.txt
- name: choose-db
inputs:
parameters:
- name: db_name
description: >-
Choose DB to update a schema
outputs:
parameters:
- name: db_name
valueFrom:
supplied: {}
suspend: {}
- name: update-schema
inputs:
parameters:
- name: db_name
container:
name: main
image: 'argoproj/argosay:v2'
command:
- sh
- '-c'
args:
- echo Updating DB {{inputs.parameters.db_name}}
一些重要细节¶
- 暂停的节点应在
inputs.parameters和outputs.parameters中定义相同的参数。 - 挂起节点中的所有输出参数都应包含
valueFrom.supplied: {} - 选定的值将在
处可用.outputs.parameters.
