将sed命令与Groovy脚本化管道一起使用时出现问题?

5uzkadbs  于 2022-11-01  发布在  其他
关注(0)|答案(1)|浏览(158)

我正在尝试运行Jenkins groovy脚本化管道文件中的sed命令。

Parsing variable as below
def SERVICE = args.service
def RESOURCE = "Services"
regionSuffix = (action == 'failover') ? 'us-east-2' : 'us-east-1'
environment taking as an argument

下面的sed命令在Ubuntu终端中工作。

sed "\|CFT_ENV_FILE|s|$|$RESOURCE/$SERVICE/$environment-$regionSuffix.yml|" docker-compose.yml > docker-compose-$SERVICE.yml

但是当我通过Groovy文件应用这个命令时,它给我一个错误:

sh '''sed "\\|CFT_ENV_FILE|s|$|"${RESOURCE}"/"${SERVICE}"/"${args.environment}"-"${regionSuffix}".yml|" docker-compose.yml > docker-compose-"${SERVICE}".yml'''

jenkins error

[2022-08-03T11:54:48.642Z] /tmp/jenkins-ac851b81/workspace/Infrastructure/failover/region-failover-test-job@tmp/durable-98781677/script.sh: line 1: 
"\|CFT_ENV_FILE|s|$|"${RESOURCE}"/"${SERVICE}"/"${args.environment}"-"${regionSuffix}".yml|": bad substitution

script returned exit code 1
yqkkidmi

yqkkidmi1#

您的变量位于Jenkins/Groovy作用域中,而不是shell作用域中。因此,在将它们传递给shell之前,您需要替换它们的值:请使用"(双引号)而不是'(单引号):

sh """sed '\\|CFT_ENV_FILE|s|$|${RESOURCE}/${SERVICE}/${args.environment}-${regionSuffix}.yml|' docker-compose.yml > docker-compose-${SERVICE}.yml"""

请注意,每次使用变量(例如“${RESOURCE}”)时,不需要使用引号
另外,考虑到您可能需要根据命令逻辑转义美元符号(当不用于groovy变量时)else。
你也可以只用一个引号代替三个引号,三个引号用于多行字符串

相关问题