我正在配置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
答案 0 :(得分:1)
我不确定任何以这种方式工作的jenkins插件,但我需要知道是否可以使用sed忽略特殊字符:
我想你必须在参数化作业中使用密码参数,这会隐藏密码。
答案 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