我在jenkins中运行shell脚本如下(更改为groovy格式)。但是当我尝试在jenkins中运行时,它没有替换 port_https 的值。但是,当我尝试手动运行时,将值更改为已导出。
sh "find ./ -type f -name '*.yml' -exec sed -i -e \"s/url_protocol: http\$/url_protocol: https/g\" {} \\ ;"sh "find ./ -type f -name '*.yml' -exec sed -i -e \'s/protocol: \"http\"\$/protocol: \"https\"/g\' {} \\;"sh "export abc_port=\"\$(find ./pdf/myInventory/dyn_conf/group_vars/abc1/vars.yml -exec grep abc_solution_portbase: {} \\; | cut -d: -f2)\" ; export port_https=\$((\$abc_port + 81)) ; export port=\"\$(find ./pdf/myInventory/dyn_conf/group_vars/def1/vars.yml -exec sh -c 'grep -A 3 -e def_nei_abc_host {} | grep -e port' \\; | cut -d: -f2)\" ; find ./pdf/myInventory/dyn_conf/group_vars/def1/vars.yml -exec sed -i -e 's/port:\${port}/port: \"\"\${port_https}\"\"/g' {} \\;"
控制台输出显示每个参数的正确导出值。
更新
有问题的行
find ./pdf/myInventory/dyn_conf/group_vars/def1/vars.yml -exec sed -i -e 's/port: "24080"$/port: 24081/g' '{}' ';'
我试图让端口成为
port: "24081"
正如你所说,我将单引号改为双引号,如下所示
find ./pdf/myInventory/dyn_conf/group_vars/def1/vars.yml -exec sed -i -e \"s/port:\${port}\$/port: \"\${port_https}\"/g\" {} \\;"
但是当我尝试使用jenkins运行时,端口的双引号无法识别。并成为
port: 24081