我正在使用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”吗?
示例:
答案 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