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'

参考资料

相关推荐
ModestCoder_10 小时前
Git 版本管理教程
大数据·git·elasticsearch
Dxy123931021614 小时前
ES8.13.4数据类型简介
elasticsearch
golang学习记14 小时前
Facebook 为什么不用 Git?
git·elasticsearch·facebook
GIS阵地14 小时前
git拉取时报错
大数据·git·elasticsearch
顾安r17 小时前
12.27 脚本网页 GITHUB推送教程
linux·css·html·gitlab·github
不爱吃糖的程序媛17 小时前
cJSON 适配 OpenHarmony PC 完整指南
大数据·elasticsearch·搜索引擎
AC赳赳老秦17 小时前
企业级人工智能平台选型深度分析:天翼云 DeepSeek 与开源解决方案的部署考量与成本博弈
人工智能·elasticsearch·zookeeper·rabbitmq·github·时序数据库·deepseek
G皮T18 小时前
【Elasticsearch】查询性能调优(一)
大数据·elasticsearch·搜索引擎·全文检索·es·性能·opensearch
Elastic 中国社区官方博客19 小时前
使用 LocalAI 和 Elasticsearch 构建本地 RAG 应用
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
G皮T20 小时前
【Elasticsearch】查询性能调优(二):SQL LIMIT 和 terminate_after 对比
大数据·sql·elasticsearch·搜索引擎·全文检索·es·opensearch