Bitbucket部署流水线使用atlassian/scp-deploy无法排除SCP传输文件夹
问题原因及修复方案
核心原因1:排除路径格式错误
atlassian/scp-deploy 底层实际调用rsync执行文件同步(原生scp本身没有--exclude参数),rsync的--exclude规则要求路径必须相对于你指定的传输源根目录,不能填写本地绝对路径:
- 你当前配置的
LOCAL_PATH为${BITBUCKET_CLONE_DIR}/*,实际传输的是克隆目录下的所有子文件/子文件夹,源根目录就是${BITBUCKET_CLONE_DIR} - 你填写的
${BITBUCKET_CLONE_DIR}/vendor/*是本地绝对路径,rsync在源根目录下匹配不到对应路径,因此排除规则完全不生效
核心原因2:变量未正常解析
你在EXTRA_ARGS的取值中使用了单引号,YAML语法中单引号包裹的内容不会解析内部的${BITBUCKET_CLONE_DIR}变量,实际传递给rsync的参数会保留未替换的变量字符串,进一步导致规则失效。
修复方案
直接修改EXTRA_ARGS参数,去掉绝对路径前缀和不必要的变量引用即可:
# 排除vendor下所有文件和.env文件 EXTRA_ARGS: '--exclude=vendor/* --exclude=.env' # 如果要排除整个vendor文件夹,可简化为 # EXTRA_ARGS: '--exclude=vendor --exclude=.env'
注意:即使你后续把
LOCAL_PATH修改为${BITBUCKET_CLONE_DIR}(不带末尾的/*),以上排除规则依然有效,不需要做任何调整。
可选验证步骤
如果需要确认排除规则是否正确传递,可临时在pipe执行前添加变量打印命令排查:
script: - echo "Expected exclude args: --exclude=vendor --exclude=.env" - pipe: atlassian/scp-deploy:1.0.1 variables: # 其他变量保持原有配置不变 USER: $USER SERVER: $SERVER REMOTE_PATH: '/tmp/deploy' LOCAL_PATH: '${BITBUCKET_CLONE_DIR}/*' EXTRA_ARGS: '--exclude=vendor --exclude=.env'
内容的提问来源于stack exchange,提问作者Manish Garotki
相关产品推荐
相关产品推荐

