【发布时间】:2019-04-25 05:10:15
【问题描述】:
是否可以使用arguments 或abstraction 来尽量减少 YAML 文件中的重复代码?
我正在编写一个触发部署的 YAML 文件,并且在部署之前和之后我想调用一个松弛通道来指示部署正在开始和结束,以及它是否失败。
这是我写的,但感觉太冗长了:
example_deploy:
- call: notify
in:
msgText: "Deployment starting for environment *${environment}*"
- try:
- ${oneops.environmentCommitAndDeploy(environment = 'production', platform = '${platform}', deployAllPlatforms = false )}
error:
- log: "Error trying to deploy: ${lastError.cause}"
- call: notify
in:
msgText: " :fire: Deployment failed for environment *${environment}* http://concord.com/#/process/${txId}/log"
- exit
- call: notify
in:
msgText: " :party: Deployment succeeded for environment *${environment}* http://concord.com/#/process/${txId}/log"
notify:
- task: slack
in:
channelId: ${alerts}
username: ${slackname}
iconEmoji: ${slackEmojiLooper}
text: "${msgText}"
现在,如果我想拥有example_deploy_2 并做同样类型的事情,我是否必须重写所有代码?或者有没有办法拥有一个“函数”或抽象 YAML 的重复部分?
更新
我已经使用call 来抽象对 slack 的调用,但现在我想知道是否可以对 slack 进行通用调用并动态更新消息 - 因为现在我正在重复传递给块的参数我定义为called
示例
example_deploy:
- call: slack_start_deploy
- try:
- ${transitionVariableUpdate(platform = '${platform}', environment = '${environment}', component = '${component_ear}' variables = { appVersion = '${BRANCH_NAME}-${BUILD_NUMBER}' })}
- ${environmentCommitAndDeploy(environment = 'qa', platform = '${platform}', deployAllPlatforms = false )}
error:
- log: "Error trying to deploy: ${lastError.cause}"
- call: slack_deploy_error
- exit
- call: slack_deploy_success
slack_start_deploy:
- slack.postMessage:
text: "${entryPoint} Deployment starting for environment *${environment}*"
channelId: ${alerts}
username: ${slackname}
iconEmoji: ${slackEmojiConcord}
slack_deploy_error:
- slack.postMessage:
text: " :fire: ${entryPoint} Deployment failed for environment *${environment}* http://concord.com/#/process/${txId}/log"
channelId: ${alerts}
username: ${slackname}
iconEmoji: ${slackEmojiConcord}
slack_deploy_success:
- slack.postMessage:
text: " :party: Deployment succeeded for environment *${environment}* http://concord.com/#/process/${txId}/log"
channelId: ${alerts}
username: ${slackname}
iconEmoji: ${slackEmojiConcord}
【问题讨论】:
-
您的示例无效 YAML
error:是一个映射键,其缩进与前面的序列项一样多,- call:是一个序列项,其缩进量与exampel_deplay:键一样多。你不能在 YAML 中混合这样的集合 -
@anthon 省去我的详细信息 - 我对更大的图景感兴趣。
标签: yaml abstraction