如何使用Gitlab CI runner设置一个非常简单的部署?
我希望自动将新工作从Gitlab存储库部署到在生产服务器上运行的实时网站。live网站是如何使用Gitlab CI runner设置一个非常简单的部署?,git,gitlab,gitlab-ci,gitlab-ci-runner,Git,Gitlab,Gitlab Ci,Gitlab Ci Runner,我希望自动将新工作从Gitlab存储库部署到在生产服务器上运行的实时网站。live网站是live分支的GIT回购克隆 我的问题是: 每次“构建”发生时,运行者似乎都会将我的repo重新克隆到~/builds/…。这是强制性行为吗?我想我真正想要的是在我的制作网站目录中有一个git pull 如果它真的每次都要克隆回购协议,为什么不重新设置它呢?至少这样可以节省大量的带宽,不是吗 如何运行存储库根目录中的deploy.sh?我当前在gitlab.com构建信息中遇到此错误:bash:line 2
live
分支的GIT回购克隆
我的问题是:
- 每次“构建”发生时,运行者似乎都会将我的repo重新克隆到
。这是强制性行为吗?我想我真正想要的是在我的制作网站目录中有一个~/builds/…
git pull
- 如果它真的每次都要克隆回购协议,为什么不重新设置它呢?至少这样可以节省大量的带宽,不是吗
- 如何运行存储库根目录中的
?我当前在gitlab.com构建信息中遇到此错误:deploy.sh
bash:line 23:deploy.sh:command not found
.gitlab ci.yml
文件:
deploy_to_production:
script:
- deploy.sh
only:
- live
tags:
- prod
细节
要做到这一点,我想在生产服务器上运行我编写的一个简单shell脚本(deploy.sh
),只要我推送到repo的特定分支(在我的例子中是live
分支)。这个shell脚本与我的.gitlab ci.yml
一起位于我的GIT存储库中
脚本基本上只是执行一个git重置
,fetch
和pull
,使生产版本与存储库中的内容保持最新
我已经在我的服务器上安装了一个“shell”多运行程序,并将其连接到gitlab.com,在那里我可以看到它处于活动状态
总的来说,我找错人了?我是否应该更改我的
deploy.sh
,这样它就不会对新工作进行git签出,而是使用cp
或者rsync
将新代码从~/builds/…
移动到生产网站中?问:克隆是一种强制性行为吗?
据我所知,这是因为假设在构建过程中您使用代码
如果您的情况不是这样,您只想“告诉生产服务器”从您的repo中提取代码,那么您可能可以采取不同的方法,并使用一个替代方法。GitLab将向您的服务器发出HTTP请求,并以JSON格式传递有关事件的信息(推送、合并等)。然后,接收脚本将对其进行解析,并决定是否执行git拉动
如果在部署之前的构建过程中确实有其他任务要对代码执行,那么是的,请更改策略并使用运行者已经为您签出的代码。我可能会尝试以某种方式使更改原子化(在运行时同步到live directory会使应用程序处于不确定状态,如果由于某种原因失败,则会使应用程序处于混乱状态),例如,将live代码放在一个符号链接的目录中。然后,部署脚本将新代码目录复制到其最终目的地,进行任何必要的调整,并将符号链接的目标从旧的实时目录更改为新的
Q:如果它真的每次都要克隆回购协议,为什么它不重新设置它呢?
对于开发者来说,这更像是一个问题。任何人的回答都只是猜测
Q:如何运行存储库根目录中的deploy.sh?
如果deploy.sh脚本设置了可执行位,那么使用
/deploy.sh
,否则bash deploy.sh
我会添加,重新“为什么不重置它”gitit”-我在Gitlab的项目>设置>项目设置区域的“构建”下注意到,您可以在git clone
或git fetch
之间进行选择。因此,您可以选择是要对每个构建进行全新的签出,还是只提取最近的更改。我决定从构建签出复制代码,并按照您的建议切换符号链接。这样我就不用编写和维护一个小型自定义nodejs服务器来监听webhook ping了。您好,您的webhook
链接似乎指向了一些内部网资源。。。