Bitbucket自定义步骤中ALIAS变量无法传递值的问题
问题解决:Bitbucket流水线自定义步骤中变量无法传递到SSH远程命令
问题场景
我在Bitbucket流水线定义了带变量的自定义步骤,传入的ALIAS变量始终无法在SSH远程命令中生效:
自定义步骤代码:
definitions: steps: - step: &var-test name: Var test script: - ssh ${HOST} "source ~/.bash_profile; cd domains/\${ALIAS}.example.com; ls -la"
调用步骤时传入变量:
- step: <<: *var-test name: Var test variables: - ALIAS: 'test.'
HOST变量能正常工作,但ALIAS始终为空,流水线报错:
+ ssh ${HOST} "source ~/.bash_profile; cd domains/\${ALIAS}.example.com; ls -la" bash: line 1: cd: domains/.example.com: No such file or directory
原因分析
你在命令里用了\${ALIAS},转义符\会阻止Bitbucket流水线的本地shell解析这个变量,导致${ALIAS}原封不动传到远程主机。而远程主机环境中并没有定义ALIAS变量,所以展开后就变成空值,路径也就成了domains/.example.com。
解决方法
需要让本地流水线先解析ALIAS变量,再把完整的命令传到远程主机,去掉转义符即可:
修改自定义步骤的脚本部分:
script: - ssh ${HOST} "source ~/.bash_profile; cd domains/${ALIAS}.example.com; ls -la"
这样本地会先把${ALIAS}替换为test.,最终传到远程的命令是:
source ~/.bash_profile; cd domains/test..example.com; ls -la
如果你的ALIAS变量包含空格、特殊字符,还可以用引号包裹变量确保解析正确:
script: - ssh ${HOST} "source ~/.bash_profile; cd domains/\"${ALIAS}\".example.com; ls -la"
或者改用单引号拼接的写法:
script: - ssh ${HOST} 'source ~/.bash_profile; cd domains/'${ALIAS}'.example.com; ls -la'
内容的提问来源于stack exchange,提问作者pioSko
相关产品推荐
相关产品推荐

