Jenkins Pipeline 的 `sh` 步骤里使用 ‘‘‘ ... ‘‘‘和 “““ ... “““ 的区别,一篇文章搞定
1️⃣ Groovy 字符串类型
在 Jenkins Pipeline(Groovy 脚本)中:
引号类型 | 用法 | 特点 |
---|---|---|
'single quotes' | 'hello' | 不做变量插值,内容完全原样输出 |
"double quotes" | "hello ${env.VAR}" | 会对 ${...} 进行 变量插值 |
'''triple single quotes''' | '''multi-line string''' | 原样多行字符串,不做变量插值 |
"""triple double quotes""" | """multi-line string""" | 多行字符串,支持变量插值 |
2️⃣ 在 sh
步骤里的区别
示例 1:
sh '''
if [ -d "workspace" ] && [ ! -d "workspace/.git" ]; thenecho "workspace git repo,clean it up"rm -rf workspace
fi
'''
- 使用
'''
,Groovy 不会解析任何${...}
,所有内容直接原样传给 shell。 - 安全性高,适合写大量 shell 命令。
示例 2:
sh """
if [ -d "${env.REPO_NAME}" ] && [ ! -d "${env.REPO_NAME}/.git" ]; thenecho "${env.REPO_NAME} not git repo,clean it up"rm -rf "${env.REPO_NAME}"
fi
"""
- 使用
"""
,Groovy 会对${env.REPO_NAME}
进行 变量替换。 - 适合你需要在 shell 里使用 Jenkins 环境变量 或 Groovy 变量的情况。
3️⃣ 总结
'''
→ 原样多行,不解析变量 → 安全、适合固定 shell 脚本。"""
→ 原样多行,但会解析${...}
→ 可在 shell 里直接使用 Groovy/Jenkins 变量。
如果你想把 workspace
改成 ${env.REPO_NAME}
,就必须用 """
,否则 '''
里 ${env.REPO_NAME}
不会被替换。