我想自动将新工作从我的 Gitlab 存储库部署到在生产服务器上运行的实时网站。实时网站是 GIT 存储库克隆live
branch.
我的问题:
每次“构建”发生时,跑步者似乎都会重新克隆我的存储库,进入~/builds/...
。这是强制性行为吗?我想我真正想要的是git pull
在我的生产网站目录中。
如果它真的每次都必须克隆存储库,为什么不呢git reset
它?随着时间的推移,至少这会节省大量带宽,不是吗?
我该如何运行我的deploy.sh
哪个在存储库根目录中?我目前在 gitlab.com 构建信息中收到此错误:bash: line 23: deploy.sh: command not found
My .gitlab-ci.yml
file:
deploy_to_production:
script:
- deploy.sh
only:
- live
tags:
- prod
Details
为此,我想运行我编写的一个简单的 shell 脚本(deploy.sh
)在生产服务器上,每当我推送到我的存储库的特定分支(live
分支,就我而言)。这个 shell 脚本位于我的 GIT 存储库中,与我的.gitlab-ci.yml
.
该脚本基本上只是做了一个git reset
, fetch
and pull
,使生产版本与存储库中的内容保持同步。
我在我的服务器上安装了一个“shell”多运行器,并将其连接到 gitlab.com,在那里我可以看到它处于活动状态。
总的来说,我找错了树?我应该改变我的deploy.sh
这样它就不会对新工作进行 git checkout,而是使用cp
也许rsync
移动新代码~/builds/...
进入生产网站?
问:克隆是强制性行为吗?
据我所知,这是因为假设在构建过程中您使用代码。
如果这不是您的情况,并且您只想“告诉生产服务器”从您的存储库中提取代码,那么也许您可以采取不同的方法并使用webhook https://docs.gitlab.com/ee/user/project/integrations/webhooks.html反而。 GitLab 会向您的服务器发出 HTTP 请求,并以 JSON 格式传递有关事件的信息(推送、合并等)。然后接收脚本将解析它并决定是否执行 git pull。
如果您在部署之前的构建过程中确实需要对代码执行其他任务,那么可以更改策略并使用运行程序已为您签出的代码。我可能会尝试改变atomic以某种方式(rsync到实时目录中会使您的应用程序在运行时处于某种不确定的状态,如果由于某种原因失败则处于混乱状态),例如通过将实时代码放在符号链接的目录中。然后,部署脚本会将新的代码目录复制到其最终目标,进行必要的调整,并将符号链接的目标从旧的实时目录更改为新的目录。
问:如果每次都必须克隆存储库,为什么不 git 重置它?
这对开发商来说更是一个问题。任何其他人的答案都只是猜测。
问:如何运行存储库根目录中的deploy.sh?
If the 部署.sh脚本已设置可执行位,然后使用./deploy.sh
, 否则bash deploy.sh
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)