我正在尝试运行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'''
[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
1条答案
按热度按时间yqkkidmi1#
您的变量位于Jenkins/Groovy作用域中,而不是shell作用域中。因此,在将它们传递给shell之前,您需要替换它们的值:请使用
"
(双引号)而不是'
(单引号):请注意,每次使用变量(例如“${RESOURCE}”)时,不需要使用引号
另外,考虑到您可能需要根据命令逻辑转义美元符号(当不用于groovy变量时)else。
你也可以只用一个引号代替三个引号,三个引号用于多行字符串