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:
    - deploy

deploy:
    stage: deploy
    image: zacksleo/docker-composer:lftp
    dependencies: []
    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-deploy
    only:
        - 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'

参考资料

相关推荐
張萠飛2 小时前
Linux下如何使用shell脚本导出elasticsearch中某一个index的数据为本地csv文件
linux·运维·elasticsearch
猫头虎4 小时前
[特殊字符]解决 “IDEA 登录失败。不支持早于 14.0 的 GitLab 版本” 问题的几种方法
java·ide·网络协议·http·https·gitlab·intellij-idea
LanLance4 小时前
ES101系列09 | 运维、监控与性能优化
java·运维·后端·elasticsearch·云原生·性能优化·golang
风早君6 小时前
jenkins集成gitlab发布到远程服务器
服务器·gitlab·jenkins
爱宇阳6 小时前
使用 Docker Compose 部署 Jenkins(LTS 版)持续集成环境
ci/cd·docker·jenkins
疯狂的沙粒7 小时前
如何通过git命令查看项目连接的仓库地址?
大数据·git·elasticsearch
IT成长日记11 小时前
Elasticsearch集群手动分片分配指南:原理与实践
大数据·elasticsearch·手动分片分配
Elastic 中国社区官方博客1 天前
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
大数据·人工智能·elasticsearch·搜索引擎·云计算·全文检索·aws
Tom Boom1 天前
Git常用命令完全指南:从入门到精通
大数据·git·elasticsearch·docker·自动化测试框架
星星点点洲1 天前
【Elasticsearch】 查询优化方式
elasticsearch·搜索引擎