Gitlab CI用于将文件传输到远程服务器(rsync)

4

我正在使用SVN,但我想转换到Git,并更具体地转换到GitLab。

我有以下结构:

MyStructure/
  customer/
    client1/
      delivery.sh
      MyFiletoSend.sh
    client2/
      delivery.sh
      MyFiletoSend2.sh

目前,“delivery.sh”将修改(rsync)的文件“MyFiletoSend.sh”发送到服务器“client1”。

是否可以在Gitlab上仅针对此次推送中修改的文件自动运行“delivery.sh”?

例如:

  • 我要对来自client1/的文件“MyFiletoSend.sh”进行修改
  • 我进行修改
  • 提交并推送
  • Gitlab正在运行“delivery.sh”以处理我的“client1/”文件。
  • 文件“MyFiletoSend.sh”被发送到“client1”的服务器,而不会触及“client2”。
2个回答

3

1
假设您的delivery.sh脚本具备所需的rsync逻辑,GitLab内置了逻辑以检测文件更改并执行bash命令作出响应。您可以为每个客户端创建一个单独的作业,可以在同一阶段并行运行。此方法还可审计,因为它将清楚地显示哪些客户端已更新以及使用哪个文件版本。
update-client-1:
  stage: update-clients
  only:
    changes:
      # Detect change only in MyFiletoSend.sh:
      - customer/client1/MyFiletoSend.sh
      # Detect any change in the customer folder:
      - customer/client1/*
  script:
      - cd customer/client1
      - delivery.sh

update-client-2:
  stage: update-clients
  only:
    changes:
      - customer/client2/*
  script:
      - cd customer/client2
      - delivery.sh


# repeat for all remaining clients

更多信息请参考:https://docs.gitlab.com/ee/ci/yaml/#onlychangesexceptchanges


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接