借助变量和表达式,您可以在管道任务中使用输入参数和输出参数。您输入的参数会将管道任务绑定到一个或多个变量、表达式或条件,并会确定管道的运行行为。

管道可以运行简单或复杂的软件交付解决方案

将管道任务绑定在一起时,可以包括默认表达式和复杂表达式。因此,管道可以运行简单或复杂的软件交付解决方案。

要在管道中创建参数,请单击 输入 输出 选项卡,然后通过输入美元符号 $ 和表达式来添加变量。例如,此参数用作调用 URL 的任务输入: ${Stage0.Task3.input.URL}

变量绑定的格式使用名为 SCOPE 和 KEY 的语法组件。 SCOPE 将上下文定义为输入或输出, KEY 则定义详细信息。在参数示例 ${Stage0.Task3.input.URL} 中, input SCOPE ,URL 是 KEY

任何任务的输出属性都可以解析为任意数量的变量绑定嵌套级别。

要了解有关如何在管道中使用变量绑定的更多信息,请参见 如何在 Automation Pipelines 管道中使用变量绑定

将美元表达式与 SCOPE 和 KEY 结合使用以绑定管道任务

您可以通过在美元符号变量中使用表达式来将管道任务绑定在一起。将表达式输入为 ${SCOPE.KEY.<PATH>}

为确定管道任务的行为,在每个表达式中, SCOPE 都是 Automation Pipelines 使用的上下文。SCOPE 将查找 KEY ,它定义了任务执行的操作的详细信息。当 KEY 的值是嵌套对象时,您可以提供一个可选的 PATH

这些示例介绍了 SCOPE KEY ,并向您展示了如何在管道中使用它们。

使用 SCOPE 和 KEY

任务的输入:

${MY_STAGE.MY_TASK.input.SOMETHING}

在通知中指示任务输入

当 Jenkins 作业启动时,它可以引用从任务输入触发的作业的名称。在这种情况下,请使用以下格式发送通知:

notifications:
  email:
  - endpoint: MyEmailEndpoint
    stage: MY_STAGE
    task: MY_TASK
    subject: "Build Started"
    event: STARTED
    - user@example.org
    body: |
      Jenkins job ${MY_STAGE.MY_TASK.input.job} started for commit id ${input.COMMITID}.
task output

任务的输出:

${MY_STAGE.MY_TASK.output.SOMETHING}

在后续任务中指示任务的输出

要在任务 2 中引用管道任务 1 的输出,请使用以下格式:

taskOrder:
  - task1
  - task2
tasks:
 task1:
   type: REST
   input:
     action: get
     url: https://www.example.org/api/status
 task2:
   type: REST
   input:
     action: post
     url: https://status.internal.example.org/api/activity
     payload: ${MY_STAGE.task1.output.responseBody}

变量:

${var.myVariable}

引用端点中的变量

要对密码引用端点中的机密变量,请使用以下格式:

project: MyProject kind: ENDPOINT name: MyJenkinsServer type: jenkins properties: url: https://jenkins.example.com username: jenkinsUser password: ${var.jenkinsPassword}

变量:

${var.myVariable}

在管道中引用变量

要在管道 URL 中引用变量,请使用以下格式:

tasks:
 task1:
  type: REST
  input:
   action: get
   url: ${var.MY_SERVER_URL}
task status

任务的状态:

${MY_STAGE.MY_TASK.status}

${MY_STAGE.MY_TASK.statusMessage}

在管道任务中使用 SCOPE 和 KEY

您可以将表达式与任何支持的管道任务结合使用。以下示例展示了如何定义 SCOPE KEY 并确认语法。这些代码示例使用 MY_STAGE MY_TASK 作为管道阶段和任务名称。

要了解有关可用任务的更多信息,请参见 Automation Pipelines 中提供哪些类型的任务

Input

summary :用户操作请求的摘要

description :用户操作请求的描述

approvers :审批者电子邮件地址列表,其中每个条目可以是包含逗号的变量,也可以使用分号分隔电子邮件

approverGroups :平台和身份的审批者组地址列表

sendemail :(可选)如果设置为 true,则可以根据请求或响应发送电子邮件通知

expirationInDays :表示请求的到期时间的天数

${MY_STAGE.MY_TASK.input.summary}

${MY_STAGE.MY_TASK.input.description}

${MY_STAGE.MY_TASK.input.approvers}

${MY_STAGE.MY_TASK.input.approverGroups}

${MY_STAGE.MY_TASK.input.sendemail}

${MY_STAGE.MY_TASK.input.expirationInDays}

Output

index :表示请求的 6 位十六进制字符串

respondedBy :批准/拒绝用户操作的人员的帐户名称

respondedByEmail :响应人员的电子邮件地址

comments :响应期间提供的注释

${MY_STAGE.MY_TASK.output.index}

${MY_STAGE.MY_TASK.output.respondedBy}

${MY_STAGE.MY_TASK.output.respondedByEmail}

${MY_STAGE.MY_TASK.output.comments}

Input

steps :一组字符串,表示要运行的命令

export :运行步骤后要保留的环境变量

artifacts :要保留在共享路径中的工件的路径

process :用于 JUnit、JaCoCo、Checkstyle、FindBugs 处理的配置元素集

${MY_STAGE.MY_TASK.input.steps}

${MY_STAGE.MY_TASK.input.export}

${MY_STAGE.MY_TASK.input.artifacts}

${MY_STAGE.MY_TASK.input.process}

${MY_STAGE.MY_TASK.input.process[0].path} # 引用第一个配置的路径

Output

export :键值对,表示从输入 exports 中导出的环境变量

artifacts :已成功保留的工件的路径

process :输入 processResponse 的已处理结果集

${MY_STAGE.MY_TASK.output.exports} # 引用所有导出

${MY_STAGE.MY_TASK.output.exports.myvar} # 引用 myvar 的值

${MY_STAGE.MY_TASK.output.artifacts}

${MY_STAGE.MY_TASK.output.processResponse}

${MY_STAGE.MY_TASK.output.processResponse[0].result} # 第一个进程配置的结果

Input

name :自定义集成的名称

version :自定义集成版本(已发布或已弃用)

properties :要发送到自定义集成的属性

${MY_STAGE.MY_TASK.input.name}

${MY_STAGE.MY_TASK.input.version}

${MY_STAGE.MY_TASK.input.properties} # 引用所有属性

${MY_STAGE.MY_TASK.input.properties.property1} # 引用 property1 的值

Output

properties :自定义集成响应中的输出属性

${MY_STAGE.MY_TASK.output.properties} # 引用所有属性

${MY_STAGE.MY_TASK.output.properties.property1} # 引用 property1 的值

Input

action createDeployment updateDeployment deleteDeployment rollbackDeployment

blueprintInputParams :用于 创建部署 更新部署 操作

allowDestroy :可以在更新部署过程中销毁计算机。

CREATE_DEPLOYMENT

  • blueprintName :云模板的名称
  • blueprintVersion :云模板的版本
  • fileUrl :选择 GIT 服务器后远程云模板 YAML 的 URL。
  • UPDATE_DEPLOYMENT

    以下任意组合:

  • blueprintName :云模板的名称
  • blueprintVersion :云模板的版本
  • fileUrl :选择 GIT 服务器后远程云模板 YAML 的 URL。
  • ------

  • deploymentId :部署的 ID
  • deploymentName :部署的名称
  • ------

    DELETE_DEPLOYMENT

  • deploymentId :部署的 ID
  • deploymentName :部署的名称
  • ROLLBACK_DEPLOYMENT

    以下任意组合:

  • deploymentId :部署的 ID
  • deploymentName :部署的名称
  • ------

  • blueprintName :云模板的名称
  • rollbackVersion :要回滚到的版本
  • 部署名称可以作为 ${Stage0.Task0.output.deploymentName} 进行访问
  • 部署 ID 可以作为 ${Stage0.Task0.output.deploymentId} 进行访问
  • 部署详细信息是一个复合对象,可以使用 JSON 结果访问内部详细信息。
  • 要访问任何属性,请使用点运算符遵循 JSON 层次结构。例如,要访问资源 Cloud_Machine_1[0] 的地址,则 $ 绑定为:

    ${Stage0.Task0.output.deploymentDetails.resources['Cloud_Machine_1[0]'].address}

    同样,对于特定实例, $ 绑定为:

    ${Stage0.Task0.output.deploymentDetails.resources['Cloud_Machine_1[0]'].flavor}

    Automation Pipelines 用户界面中,可以获取任何属性的 $ 绑定。

  • 在任务输出属性区域中,单击 查看输出 JSON
  • 要查找 $ 绑定,请输入任何属性。
  • 单击搜索图标,之后,将显示相应的 $ 绑定。
  • "id": "6a031f92-d0fa-42c8-bc9e-3b260ee2f65b", "name": "deployment_6a031f92-d0fa-42c8-bc9e-3b260ee2f65b", "description": "Pipeline Service triggered operation", "orgId": "434f6917-4e34-4537-b6c0-3bf3638a71bc", "blueprintId": "8d1dd801-3a32-4f3b-adde-27f8163dfe6f", "blueprintVersion": "1", "createdAt": "2020-08-27T13:50:24.546215Z", "createdBy": "user@vmware.com", "lastUpdatedAt": "2020-08-27T13:52:50.674957Z", "lastUpdatedBy": "user@vmware.com", "inputs": {}, "simulated": false, "projectId": "267f8448-d26f-4b65-b310-9212adb3c455", "resources": { "Cloud_Machine_1[0]": { "id": "/resources/compute/1606fbcd-40e5-4edc-ab85-7b559aa986ad", "name": "Cloud_Machine_1[0]", "powerState": "ON", "address": "10.108.79.33", "resourceLink": "/resources/compute/1606fbcd-40e5-4edc-ab85-7b559aa986ad", "componentTypeId": "Cloud.vSphere.Machine", "endpointType": "vsphere", "resourceName": "Cloud_Machine_1-mcm110615-146929827053", "resourceId": "1606fbcd-40e5-4edc-ab85-7b559aa986ad", "resourceDescLink": "/resources/compute-descriptions/1952d1d3-15f0-4574-ae42-4fbf8a87d4cc", "zone": "Automation / Vms", "countIndex": "0", "image": "ubuntu", "count": "1", "flavor": "small", "region": "MYBU", "_clusterAllocationSize": "1", "osType": "LINUX", "componentType": "Cloud.vSphere.Machine", "account": "bha" "status": "CREATE_SUCCESSFUL", "deploymentURI": "https://api.yourenv.com/automation-ui/#/deployment-ui;ash=/deployment/6a031f92-d0fa-42c8-bc9e-3b260ee2f65b" 自动执行持续部署任务:Kubernetes
  • timeout :任何操作的整体超时
  • filterByLabel :要针对操作 GET 使用 K8S labelSelector 筛选的其他标签:
  • GET、CREATE、DELETE、APPLY

  • yaml :要处理并发送到 Kubernetes 的内嵌 YAML
  • parameters :键值对 - 将 $$KEY 替换为内嵌 YAML 输入区域中的 VALUE
  • filePath :SCM Git 端点(如果已提供)中要从中获取 YAML 的相对路径
  • scmConstants :键值对 - 将 $${KEY} 替换为通过 SCM 获取的 YAML 中的 VALUE
  • continueOnConflict :设置为 true 时,如果资源已存在,任务将继续执行。
  • ROLLBACK

  • resourceType :要回滚的资源类型
  • resourceName :要回滚的资源名称
  • namespace :必须执行回滚的命名空间
  • revision :要回滚到的修订版本
  • ${MY_STAGE.MY_TASK.input.action} # 确定要执行的操作。

    ${MY_STAGE.MY_TASK.input.timeout}

    ${MY_STAGE.MY_TASK.input.filterByLabel}

    ${MY_STAGE.MY_TASK.input.yaml}

    ${MY_STAGE.MY_TASK.input.parameters}

    ${MY_STAGE.MY_TASK.input.filePath}

    ${MY_STAGE.MY_TASK.input.scmConstants}

    ${MY_STAGE.MY_TASK.input.continueOnConflict}

    ${MY_STAGE.MY_TASK.input.resourceType}

    ${MY_STAGE.MY_TASK.input.resourceName}

    ${MY_STAGE.MY_TASK.input.namespace}

    ${MY_STAGE.MY_TASK.input.revision}

    Output

    response :捕获整个响应

    response.<RESOURCE> :资源对应于 configMaps、部署、端点、输入、作业、命名空间、容器、replicaSets、Replicationcontroller、密钥、服务、statefulSets、节点、loadBalancers。

    response.<RESOURCE>.<KEY> :键对应于 apiVersion、种类、元数据、规范之一

    ${MY_STAGE.MY_TASK.output.response}

    ${MY_STAGE.MY_TASK.output.response.}

    Output

    resultUrl :生成的构建的 URL

    buildResultKey :生成的构建的键

    buildNumber :内部版本号

    buildTestSummary :运行的测试摘要

    successfulTestCount :通过的测试结果数

    failedTestCount :失败的测试结果数

    skippedTestCount :跳过的测试结果数

    artifacts :内部版本中的工件

    ${MY_STAGE.MY_TASK.output.resultUrl}

    ${MY_STAGE.MY_TASK.output.buildResultKey}

    ${MY_STAGE.MY_TASK.output.buildNumber}

    ${MY_STAGE.MY_TASK.output.buildTestSummary} # 引用所有结果

    ${MY_STAGE.MY_TASK.output.successfulTestCount} # 引用特定的测试计数

    ${MY_STAGE.MY_TASK.output.buildNumber}

    Jenkins Input

    job :Jenkins 作业的名称

    parameters :要传递到作业的参数

    ${MY_STAGE.MY_TASK.input.job}

    ${MY_STAGE.MY_TASK.input.parameters} # 引用所有参数

    ${MY_STAGE.MY_TASK.input.parameters.param1} # 引用参数的值

    Output

    job :Jenkins 作业的名称

    jobId :生成的作业的 ID,例如 1234

    jobStatus :Jenkins 中的状态

    jobResults :测试/代码覆盖率结果的集合

    jobUrl :生成的作业运行的 URL

    ${MY_STAGE.MY_TASK.output.job}

    ${MY_STAGE.MY_TASK.output.jobId}

    ${MY_STAGE.MY_TASK.output.jobStatus}

    ${MY_STAGE.MY_TASK.output.jobResults} # 引用所有结果

    ${MY_STAGE.MY_TASK.output.jobResults.junitResponse} # 引用 JUnit 结果

    ${MY_STAGE.MY_TASK.output.jobResults.jacocoRespose} # 引用 JaCoCo 结果

    ${MY_STAGE.MY_TASK.output.jobUrl}

    Input

    projectCollection :来自 TFS 的项目集合

    teamProject :从可用集合中选择的项目

    buildDefinitionId :要运行的构建定义 ID

    ${MY_STAGE.MY_TASK.input.projectCollection }

    ${MY_STAGE.MY_TASK.input.teamProject}

    ${MY_STAGE.MY_TASK.input.buildDefinitionId}

    Output

    buildId :生成的构建 ID

    buildUrl :用于访问构建摘要的 URL

    logUrl :用于访问日志的 URL

    dropLocation :工件(如果有)的放置位置

    ${MY_STAGE.MY_TASK.output.buildId}

    ${MY_STAGE.MY_TASK.output.buildUrl}

    ${MY_STAGE.MY_TASK.output.logUrl}

    ${MY_STAGE.MY_TASK.output.dropLocation}

    Input

    workflowId :要运行的工作流的 ID

    parameters :要传递到工作流的参数

    ${MY_STAGE.MY_TASK.input.workflowId}

    ${MY_STAGE.MY_TASK.input.parameters}

    Output

    workflowExecutionId :工作流执行的 ID

    properties :工作流执行的输出属性

    ${MY_STAGE.MY_TASK.output.workflowExecutionId}

    ${MY_STAGE.MY_TASK.output.properties}

    Input

    url :要调用的 URL

    action :要使用的 TTP 方法

    headers :要传递的 HTTP 标头

    payload :请求负载

    fingerprint :URL 为 https 时要匹配的指纹

    allowAllCerts :设置为 true 时,可以是任何具有 https URL 的证书

    ${MY_STAGE.MY_TASK.input.url}

    ${MY_STAGE.MY_TASK.input.action}

    ${MY_STAGE.MY_TASK.input.headers}

    ${MY_STAGE.MY_TASK.input.payload}

    ${MY_STAGE.MY_TASK.input.fingerprint}

    ${MY_STAGE.MY_TASK.input.allowAllCerts}

    Output

    responseCode :HTTP 响应代码

    responseHeaders :HTTP 响应标头

    responseBody :收到的响应的字符串格式

    responseJson :Traversable 响应(如果 content-type 为 application/json

    ${MY_STAGE.MY_TASK.output.responseCode}

    ${MY_STAGE.MY_TASK.output.responseHeaders}

    ${MY_STAGE.MY_TASK.output.responseHeaders.header1} # 引用响应标头“header1”

    ${MY_STAGE.MY_TASK.output.responseBody}

    ${MY_STAGE.MY_TASK.output.responseJson} # 引用 JSON 响应

    ${MY_STAGE.MY_TASK.output.responseJson.a.b.c} # 在响应中的 a.b.c JSON 路径之后引用嵌套对象

    Input

    url :要调用的 URL

    headers :要传递的 HTTP 标头

    exitCriteria :任务成功或失败需要满足的条件。“成功”的键值对 → 表达式,“失败”→ 表达式

    pollCount :要执行的迭代次数。 Automation Pipelines 管理员最多可以将轮询计数设置为 10000。

    pollIntervalSeconds :每次迭代之间等待的秒数。轮询时间间隔必须大于或等于 60 秒。

    ignoreFailure :设置为 true 时,将忽略中间响应失败

    fingerprint :URL 为 https 时要匹配的指纹

    allowAllCerts :设置为 true 时,可以是任何具有 https URL 的证书

    ${MY_STAGE.MY_TASK.input.url}

    ${MY_STAGE.MY_TASK.input.headers}

    ${MY_STAGE.MY_TASK.input.exitCriteria}

    ${MY_STAGE.MY_TASK.input.pollCount}

    ${MY_STAGE.MY_TASK.input.pollIntervalSeconds}

    ${MY_STAGE.MY_TASK.input.ignoreFailure}

    ${MY_STAGE.MY_TASK.input.fingerprint}

    ${MY_STAGE.MY_TASK.input.allowAllCerts}

    Output

    responseCode :HTTP 响应代码

    responseBody :收到的响应的字符串格式

    responseJson :Traversable 响应(如果 content-type 为 application/json

    ${MY_STAGE.MY_TASK.output.responseCode}

    ${MY_STAGE.MY_TASK.output.responseBody}

    ${MY_STAGE.MY_TASK.output.responseJson} # Refer to response as JSON

    Input

    host :计算机的 IP 地址或主机名

    username :用于连接的用户名

    password :用于连接的密码

    useTLS :尝试 https 连接

    trustCert :设置为 true 时,信任自签名证书

    script :要运行的脚本

    workingDirectory :运行脚本之前要切换到的目录路径

    environmentVariables :要设置的环境变量的键-值对

    arguments :要传递到脚本的参数

    ${MY_STAGE.MY_TASK.input.host}

    ${MY_STAGE.MY_TASK.input.username}

    ${MY_STAGE.MY_TASK.input.password}

    ${MY_STAGE.MY_TASK.input.useTLS}

    ${MY_STAGE.MY_TASK.input.trustCert}

    ${MY_STAGE.MY_TASK.input.script}

    ${MY_STAGE.MY_TASK.input.workingDirectory}

    ${MY_STAGE.MY_TASK.input.environmentVariables}

    ${MY_STAGE.MY_TASK.input.arguments}

    Output

    response :文件 $SCRIPT_RESPONSE_FILE 的内容

    responseFilePath $SCRIPT_RESPONSE_FILE 的值

    exitCode :进程退出代码

    logFilePath :包含 stdout 的文件的路径

    errorFilePath :包含 stderr 的文件的路径

    ${MY_STAGE.MY_TASK.output.response}

    ${MY_STAGE.MY_TASK.output.responseFilePath}

    ${MY_STAGE.MY_TASK.output.exitCode}

    ${MY_STAGE.MY_TASK.output.logFilePath}

    ${MY_STAGE.MY_TASK.output.errorFilePath}

    Input

    host :计算机的 IP 地址或主机名

    username :用于连接的用户名

    password :用于连接的密码(可以选择性地使用 privateKey)

    privateKey :用于连接的 privateKey

    passphrase :用于解除锁定 privateKey 的可选密码短语

    script :要运行的脚本

    workingDirectory :运行脚本之前要切换到的目录路径

    environmentVariables :要设置的环境变量的键-值对

    ${MY_STAGE.MY_TASK.input.host}

    ${MY_STAGE.MY_TASK.input.username}

    ${MY_STAGE.MY_TASK.input.password}

    ${MY_STAGE.MY_TASK.input.privateKey}

    ${MY_STAGE.MY_TASK.input.passphrase}

    ${MY_STAGE.MY_TASK.input.script}

    ${MY_STAGE.MY_TASK.input.workingDirectory}

    ${MY_STAGE.MY_TASK.input.environmentVariables}

    Output

    response :文件 $SCRIPT_RESPONSE_FILE 的内容

    responseFilePath $SCRIPT_RESPONSE_FILE 的值

    exitCode :进程退出代码

    logFilePath :包含 stdout 的文件的路径

    errorFilePath :包含 stderr 的文件的路径

    ${MY_STAGE.MY_TASK.output.response}

    ${MY_STAGE.MY_TASK.output.responseFilePath}

    ${MY_STAGE.MY_TASK.output.exitCode}

    ${MY_STAGE.MY_TASK.output.logFilePath}

    ${MY_STAGE.MY_TASK.output.errorFilePath}