2017-01-02 58 views
1

我对一些自动化使用詹金斯,我在那里有模式和DB信息存储像迭代通过ANT脚本哈希阵列

[schema1:db1, schema2:db2]存储在Ant属性${schemaValue}

<propertycopy name="schemaValue" from="${SchemaVariable}"/> 

现在的工作我我通过这个数组哈希试图循环执行的连接, 我试图与

 <for param="theparam" list="${schemaValue}"> 
      <sequential> 
       <echo message="param: @{theparam}"/> 
      </sequential> 
     </for> 

但这认为${schemaValue}作为字符串,而不是一个数组,

帮助。

编辑

至于建议由@ AR.3,我试图与

<propertyregex override="yes" property="paramValue" input="@{theparam}" regexp=".+:([^\]]+)]?" replace="\1"/> 
<echo message="paramValue: ${paramValue}"/> 
<propertyregex override="yes" property="paramKey" input="@{theparam}" regexp="[?([^\[]+):]" replace="\1"/> 
<echo message="paramKey: ${paramKey}"/> 

$ {} paramValue给我DB1和DB2正确

$ {} paramKey我抛出错误

回答

1

在严格的意义上,在标准编程语言中存在的Ant中没有数组的概念。 for循环将简单地迭代由分隔符分隔的字符串元素(默认分隔符为,)。在你的情况下,它看起来更像是一个映射或键值对的列表。

如果预期的行为是在地图(db1db2)打印的值,涉及正则表达式替换的附加步骤,可以使用:

<for param="theparam" list="${schemaValue}"> 
    <sequential> 
     <propertyregex override="yes" 
       property="paramValue" input="@{theparam}" 
       regexp=".+:([^\]]+)]?" replace="\1"/> 
     <echo message="param: ${paramValue}"/> 
    </sequential> 
</for> 

所以最初,包含在theparam的回荡值将是[schema1:db1schema2:db2]。图案.+:([^\]]+)]?将匹配针对这样的值,通过针对匹配:

  1. 一个或多个字符,
  2. 后跟一个:
  3. 随后非]字符,
  4. 后跟零个或一个]

propertyregex将使第一组的值,即,一个接([^\]]+)在属性paramValue匹配。这实际上是冒号后的值。

运行它应该会打印:

[echo] param: db1 
[echo] param: db2 

编辑:

拿到钥匙,而不是,您可以使用下面的正则表达式:

<propertyregex override="yes" property="paramKey" 
       input="@{theparam}" regexp="\[?([^\[]+):[^\]]+]?" replace="\1"/> 
+0

- 是否有可能获得价值像schema1:db1,然后是sch2ma2:db2。因为我在这里接收动态模式名​​称和数据库名称。 – useranon

+0

@Jasmine是的,只需修改上述正则表达式以满足您的需求。在这种情况下,您可以尝试'[?([^ \ [] +:[^ \]] +)]?'。 – manouti

+0

我试过用“([^ \ [] + :)”来查找关键字$ {paramKey},但它不按预期方式呈现。 – useranon