Jenkins - parametrise .php文件

时间:2015-07-14 06:03:04

标签: php yii jenkins parameters parameter-passing

我正在配置Jenkins以使其构建我的项目。 它检查源代码,安装所有必需的库等。

我的应用程序配置存储在params.php文件(Yii 1.x样式)中,它看起来如下:

return array(
    'dbHost' => 'dbHostValuePlaceholder',
    'dbPasssword' => 'dbPasswordValuePlaceholder',
    /* other values go here */
);

显然我需要用启动参数化构建时设置的密码替换 dbPasswordValuePlaceholder

我发现当前的解决方案是以shell命令运行它:

sed -i s/dbPasswordValuePlaceholder/$DB_PASSWORD/g $WORKSPACE/protected/config/params.php

其中 $ DB_PASSWORD 是对应的变量。

此解决方案与简单字符串完美配合,但密码可能看起来像a1@2";$&^*&-=+/*-:'/.,,,,,,,,^^^^^ - 在这种情况下, sed 因未转义的字符而失败。

我搜索过不同的Jenkins插件,但只有插件可以与.xml等其他格式一起使用,并且都不能与.php文件一起使用。

我需要避免将我的配置值从 .php 文件移到其他格式。

有没有办法用构建参数值替换 .php 文件中描述的标记?

更新

正如@Stanjer建议的那样,我试图将param值设置为:

a1@2";$&^*&-=+/*-:\'/.,,,,,,,,^^^^^

因此,在这种情况下,PHP中的以下代码是正确的,有效:

'universalPassword' => 'a1@2";$&^*&-=+/*-:\'/.,,,,,,,,^^^^^',

没有帮助,这是输出:

[build.int] $ /bin/sh -xe /tmp/hudson642312569695847678.sh
+ sed -i s/defaultUniversalPassword/a1@2";$&^*&-=+/*-:\'/.,,,,,,,,^^^^^/g /var/www/build.int/protected/config/params.php
sed: -e expression #1, char 43: unknown option to `s'
Build step 'Execute shell' marked build as failure
Finished: FAILURE

2 个答案:

答案 0 :(得分:1)

我不确定任何以这种方式工作的jenkins插件,但我需要知道是否可以使用sed忽略特殊字符:

sed with special characters

我想你必须在参数化作业中使用密码参数,这会隐藏密码。

答案 1 :(得分:1)

感谢更新的问题。

在您的情况下,您应该通过提供$'string'来证明它已经被转义。

所以命令看起来像:

$ sed s#dbPasswordValuePlaceholder#$'"a1@2";$&^*&-=+/*-:\'/.,,,^^^"'#g test.php

并输出:

<?php

return array(
    'dbHost' => 'dbHostValuePlaceholder',
    'dbPassword' => '"a1@2";$dbPasswordValuePlaceholder^*dbPasswordValuePlaceholder-=+/*-:'/.,,,,,,,,^^^^^"',
    /* other values go here */
);

?>

如果使用变量:

export NEWPASS=$'"a1@2";$&^*&-=+/*-:\'/.,,,^^^"'

sed "s#dbPasswordValuePlaceholder#$NEWPASS#g" test.php