Jenkins - 参数化 .php 文件

Jenkins - parametrise .php file

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

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

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

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

我找到的当前解决方案是 运行 this as shell 命令:

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

其中$DB_PASSWORD是相应的变量。

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

我搜索了不同的 Jenkins 插件,但只有适用于其他格式的插件,例如 .xml 等,而不能适用于 .php 文件。

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

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

更新

正如@Stanjer 所推荐的,我尝试将参数值设置为:

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

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

sed with special characters

而且我想您一定在参数化作业中使用了密码参数,它隐藏了密码。

感谢更新问题。

在您的情况下,您应该通过将其提供为 $'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