当前位置: 首页 > news >正文

GitLab-CI集成FTP自动发布

简介

在某些场景下,代码是以 FTP 的方式部署到服务器上,那么我们可以使用 GitLab-CI 来实现自动发布。

配置参考

.sftp-deploy: &sftp-deploy |-files=$(git log -10 --pretty=format: --name-only | grep -v '^$' | sort -u)include_patterns=$(echo "$files" | sed 's/[][*?]/\\&/g' | paste -sd, -)lftp -c "set ftp:ssl-allow no; open -u $FTP_USERNAME,$FTP_PASSWORD $FTP_HOST; cd /; mirror -RLnv --no-perms --exclude-glob .git* --exclude .git/ --include-glob='{$include_patterns}' ./ /"stages:- deploydeploy:stage: deployimage: zacksleo/docker-composer:lftpdependencies: []script:- lftp -c "set ftp:ssl-allow no; open -u $FTP_USERNAME,$FTP_PASSWORD $FTP_HOST; cd /; mirror -RLnv --no-perms ./ / --ignore-time --exclude-glob .git* --exclude .git/"- *sftp-deployonly:- master- tags

配置说明

  • FTP_HOST: FTP 服务器地址
  • FTP_USERNAME: FTP 用户名
  • FTP_PASSWORD: FTP 密码

以上通过在 GitLab 的 CI/CD 设置中添加环境变量来配置。

script 中有两段脚本,第一行使用 lftp 命令,将项目中的文件上传到服务器,配置了 --ignore-time, lftp 将会使用文件大小比对方式,只有文件大小不一样时,文件才会被上传。

有时候,即使文件内容有更改,但如果文件大小不发生变化,第一段脚本不会传输该文件,于是我们通过第二段脚本来弥补这个问题。

第二段脚本,根据最近 10 次的 git 提交记录,找出所有涉及的修改的文件,组合成 --include-glob 所需要的表达式, 通过 lftp 的 --include-glob 命令,来指定传输这些文件。

上述 include_patterns 会输出类似这样的形式: path/to/file1,path/to/file2 ,也就是说最终的命令形式为 --include-glob=‘path/to/file1,path/to/file2’

参考资料

  • LFTP官网
  • GitLab-CI使用LFTP进行持续部署
http://www.dtcms.com/a/138441.html

相关文章:

  • docker 启动mysql9认证失败
  • Postman实现接口测试(附项目实战)
  • kubesphere(一) Ubuntu 24 云服务器 单节点 kubekey 安装k8s和kubesphere
  • 碳排放因子库
  • 利用redis实现订单倒计结束后更改订单状态为已失效
  • 大数据调度组件
  • 怎么用面向对象和状态机架构,设计一个通用的按键检测功能?
  • 【docker】运行错误提示 unknown shorthand flag: ‘d‘ in -d ----详细解决方法
  • 2025 全球分布式云大会演讲实录 | 沈建发:智启边缘,畅想未来:边缘计算新场景落地与 Al 趋势新畅想
  • 探秘Transformer系列之(28)--- DeepSeek MLA(下)
  • 卷积神经网络CNN(李宏毅)
  • 【android telecom 框架分析 01】【基本介绍 2】【BluetoothPhoneService为何没有源码实现】
  • Java八种常见的设计模式
  • MySQL GTID集合运算函数总结
  • 33、Python单元测试与pytest框架从入门到精通
  • MQTT客户端核心源码解析:从发布机制到网络循环
  • [图论]Kruskal
  • Golang errors 包快速上手
  • 【安卓开发】【Android Studio】Menu(菜单栏)的使用及常见问题
  • Python解决“小D的abc字符变换”问题
  • 手机状态:UML 状态图(State Diagram)的解析与绘画
  • 天洑参加人工智能校企产学研及人才对接活动——走进南京大学人工智能学院
  • NO.96十六届蓝桥杯备战|图论基础-多源最短路|Floyd|Clear And Present Danger|灾后重建|无向图的最小环问题(C++)
  • Opencv函数及练习题
  • C# 如何比较两个List是否相等?
  • 【C++】list的模拟实现
  • android如何在生产环境中做到详实的日志收集而不影响性能?
  • Spark on K8s 在vivo大数据平台的混部实战
  • 如何用GEE下载选择的小区域范围Landsat影像
  • 【React】什么是 Hook