LFTP同步远程FTP与本地GitLab仓库无变更问题求助
问题
使用LFTP从远程FTP服务器拉取文件到GitLab仓库,流水线执行时显示"Removing file"、"Transferring file"等正常日志,调试模式下路径也正确,但GitLab仓库始终无变更。该功能昨日正常,当前主要使用force_pull阶段,推送到FTP的功能正常,FTP变量配置无误。
流水线配置代码
image: alpine:latest stages: - push - force_pull - pull variables: op: "1" MYTHICLOCALDIR: ./Mythic MYTHICREMOTEDIR: ./plugins/MythicMobs LIBLOCALDIR: ./Lib LIBREMOTEDIR: ./plugins/MythicLib pull: stage: pull script: - apk add lftp sudo #- apt-get update -qq && apt-get install -y -qq lftp - lftp -c "set ftp:ssl-allow no;set ftp:ssl-protect-data no; open -u $FTPUSER,$FTPPASS $FTPHOST; mirror -v -e $MYTHICREMOTEDIR $MYTHICLOCALDIR --ignore-time --parallel=60/; quit" - lftp -c "set ftp:ssl-allow no;set ftp:ssl-protect-data no; open -u $FTPUSER,$FTPPASS $FTPHOST; mirror -v -e $LIBREMOTEDIR $LIBLOCALDIR --ignore-time --parallel=60/; quit" only: - schedules environment: name: Mythic_Pull parallel: matrix: - node_version: "12" push: stage: push script: - apk add lftp sudo #- apt-get update -qq && apt-get install -y -qq lftp - lftp -c "set ftp:ssl-allow no;set ftp:ssl-protect-data no; open -u $FTPUSER,$FTPPASS $FTPHOST; mirror -R -v -e -p $MYTHICLOCALDIR $MYTHICREMOTEDIR --ignore-time --parallel=60 -x .gitkeep/; quit" - lftp -c "set ftp:ssl-allow no;set ftp:ssl-protect-data no; open -u $FTPUSER,$FTPPASS $FTPHOST; mirror -R -v -e -p $LIBLOCALDIR $LIBREMOTEDIR --ignore-time --parallel=60 -x .gitkeep/; quit" rules: - if: '$op == "2"' when: always environment: name: Mythic_Push parallel: matrix: - node_version: "12" force_pull: stage: force_pull script: - apk add lftp sudo - apk add git sudo - git config user.email "$GITLAB_USER_EMAIL" - git config user.name "$GITLAB_USER_NAME" #- apt-get update -qq && apt-get install -y -qq lftp #- lftp -c "set ftp:ssl-allow no;set ftp:ssl-protect-data no; open -u $FTPUSER,$FTPPASS $FTPHOST; mirror -v -e $MYTHICREMOTEDIR $MYTHICLOCALDIR --ignore-time --delete-first --parallel=100/;" - lftp -c "set ftp:ssl-allow no;set ftp:ssl-protect-data no; open -u $FTPUSER,$FTPPASS $FTPHOST; mirror -v $LIBREMOTEDIR $LIBLOCALDIR --ignore-time --scan-all-first --transfer-all --log=lftp-log --parallel=60/" - git add . - git commit -m "Initial commit" - git push origin master rules: - if: '$op == "1"' when: always environment: name: Mythic_Force_Pull parallel: matrix: - node_version: "12"
排查与解决方法
- 验证Git追踪状态:在
git add .后添加git status命令,查看是否有文件被标记为变更。如果显示"nothing to commit",说明下载的文件可能不在Git工作目录,或被.gitignore规则排除。- git add . - git status - git commit -m "Initial commit" - 确认文件是否真实下载:在LFTP命令后添加目录查看命令,检查文件是否存在于目标本地目录:
- lftp -c "..." # 原LFTP命令 - ls -la $LIBLOCALDIR - 检查Git推送权限与分支:确认流水线使用的Git用户有推送
master分支的权限;若仓库默认分支不是master,需将git push origin master修改为对应分支(如main)。 - 修正LFTP路径问题:确认远程FTP路径
$LIBREMOTEDIR是否为相对路径(相对于FTP登录根目录),如果是绝对路径需去掉开头的./。 - 处理无变更的提交:若文件内容未实际变化但需要强制提交,可使用
git commit --allow-empty,但优先排查文件是否真的需要更新。
内容的提问来源于stack exchange,提问作者Holy
相关产品推荐
相关产品推荐

