Gitlab CI将文件传送到远程服务器(rsync)

时间:2020-07-10 08:34:56

标签: gitlab gitlab-ci

我正在使用SVN,但我想继续学习Git,更具体地说是Gitlab。

我具有以下结构:

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

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

我可以在git push之后/之前仅通过Gitlab自动运行“ delivery.sh”吗?

示例:

  • 我需要对client1 /
  • 的文件“ MyFiletoSend.sh”进行修改。
  • 我做出改变
  • 提交并推送
  • Gitlab在我的“ client1 /”文件上运行“ delivery.sh”。
  • 将文件“ MyFiletoSend.sh”发送到“ client1”的服务器,而无需触摸“ client2”。

2 个答案:

答案 0 :(得分:1)

是的,有可能

但是首先您需要了解gitlab ci的工作原理。阅读这篇文章https://docs.gitlab.com/ee/ci/yaml/

您将在管道中创建一个步骤,该步骤将在您推送代码(在主代码或任何其他分支/ mr中)后执行所需的操作

关于这份工作?您必须创建一个,您可以使用此代码来帮助您 https://gist.github.com/hnlq715/6c222ba0fd868bae7e4dfd3af61bf26e

答案 1 :(得分: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