【发布时间】:2018-07-16 09:46:05
【问题描述】:
在 Jenkins Pipeline 中,我们部署了一个 PHP 站点,该站点具有 PHP 格式的配置文件。现在我们想使用 StreamingTemplateEngine 来创建这些具有不同内容的配置文件(让我们说用于开发和生产阶段的不同数据库)。 在 PHP 中,变量以 $ - 符号为前缀,现在与来自 StreamingTemplateEngine 的 $ - 符号标记的占位符发生冲突。这意味着它在到达 PHP 变量时会抛出异常,应该保持原样。
我认为一个例子可以更清楚地说明:
模板文件test.php.template:
<?php
$my_php_config_variable = "${StreamingTemplateEnginePlaceholder}"
?>
Groovy 代码片段:
import groovy.text.StreamingTemplateEngine
def placeholders = [
"StreamingTemplateEnginePlaceholder": "SOME_VALUE",
]
def templateContent = new File('test.php.template').text
def engine = new StreamingTemplateEngine()
def configContent = engine.createTemplate(templateContent).make(placeholders).toString()
println configContent
现在生成的 configContent 字符串应该是:
<?php
$my_php_config_variable = "SOME_VALUE"
?>
但是引擎抛出这个异常:
Exception in thread "main" groovy.text.TemplateExecutionException: Template execution error at line 2:
1: <?php
--> 2: $my_php_config_variable = "${StreamingTemplateEnginePlaceholder}"
3: ?>
at SimpleGroovyScript.run(SimpleGroovyScript.groovy:10)
at SimpleGroovyScript.main(SimpleGroovyScript.groovy)
Caused by: groovy.lang.MissingPropertyException: No such property: my_php_config_variable for class: groovy.tmp.templates.StreamingTemplateScript1
... 2 more
说,占位符映射中缺少“$my_php_config_variable”。
现在我们的问题是:
1.) 模板中的 PHP 变量能否以某种方式标记为保留给 TemplateEngine 的原样?
或
2.) 引擎能否以某种方式简单地忽略占位符映射中“缺失”的占位符并保持字符串不变?
提前感谢每一个提示! T0mcat
【问题讨论】:
标签: groovy