为什么这个命令在Jenkins身上不起作用呢?

ru9i0ody  于 2022-11-02  发布在  Jenkins
关注(0)|答案(1)|浏览(190)

我是一个Jenkins初学者。
为什么此命令有效?

sed -i -E s/'image: '(.*)${stack_name}-${service_name}:.*\$/'image: '\1${stack_name}-${service_name}:${version}/g

为什么同一个命令在包含在Jenkinsfile中时不起作用?

sh "sed -i -E s/'image: '(.*)${stack_name}-${service_name}:.*\$/'image: '\1${stack_name}-${service_name}:${version}/g"

错误为:

/opt/jenkins_data/workspace/secuview-front_master-Z2ADTSIGTSEJOG3UYRU4FPDUF5VZMB3SMQLEOUD46TUZG4POWKYQ@tmp/durable-a484faaf/script.sh: line 2: syntax error near unexpected token `('
lnxxn5zx

lnxxn5zx1#

Jenkinsfiles本质上是Apache Groovy脚本,因此Groovy的字符串转义规则适用。当你有斜杠时,它们需要被转义(例如\-〉\\),当你使用双引号时,使用${}的文字实际上是由脚本解释的,而不是传递给shell步骤。
请尝试以下操作:

sh 'sed -i -E s/\'image: \'\\(.*\\)${stack_name}-${service_name}:.*\\$/\'image: \'\\1${stack_name}-${service_name}:${version}/g'

相关问题