借助变量和表达式,您可以在管道任务中使用输入参数和输出参数。您输入的参数会将管道任务绑定到一个或多个变量、表达式或条件,并会确定管道的运行行为。
管道可以运行简单或复杂的软件交付解决方案
将管道任务绑定在一起时,可以包括默认表达式和复杂表达式。因此,管道可以运行简单或复杂的软件交付解决方案。
要在管道中创建参数,请单击
输入
或
输出
选项卡,然后通过输入美元符号
$
和表达式来添加变量。例如,此参数用作调用 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}