Jenkins中Docker命令--sql-mode参数单引号转义问题求助
在Jenkinsfile中让docker命令的
--sql-mode='''参数原样执行 问题根源在于Jenkinsfile基于Groovy语法,当用单引号包裹sh命令时,Groovy会将连续两个单引号解析为一个转义单引号。你原命令里的--sql-mode='''会被Groovy处理成--sql-mode=',导致参数不符合预期。
以下是几种可行的解决方法:
方法一:用双引号包裹整个命令
Groovy的双引号字符串不会转义内部的单引号,能直接把命令原样传递给shell执行:
sh "docker run --name container_name -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_0900_ai_ci --sql-mode='''"
方法二:在单引号命令中转义单引号
按照Groovy单引号的转义规则,每两个单引号代表一个实际的单引号。要输出三个单引号,需要写六个连续单引号:
sh 'docker run --name container_name -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_0900_ai_ci --sql-mode='''''''
方法三:使用Groovy三重单引号字符串
三重单引号支持原样保留内部的单引号,只需注意不要用连续三个单引号提前闭合字符串即可。要输出三个单引号,直接写六个连续单引号:
sh '''docker run --name container_name -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_0900_ai_ci --sql-mode=''''''
额外说明
如果你的实际需求是将sql-mode设为空值,只需要写--sql-mode=''即可。此时在单引号命令中写成--sql-mode=''(四个单引号)就能正确传递--sql-mode=''参数。
内容的提问来源于stack exchange,提问作者Liviu
相关产品推荐
相关产品推荐

