Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Gitlab CI runner设置一个非常简单的部署?_Git_Gitlab_Gitlab Ci_Gitlab Ci Runner - Fatal编程技术网

如何使用Gitlab CI runner设置一个非常简单的部署?

如何使用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

我希望自动将新工作从Gitlab存储库部署到在生产服务器上运行的实时网站。live网站是
live
分支的GIT回购克隆

我的问题是:

  • 每次“构建”发生时,运行者似乎都会将我的repo重新克隆到
    ~/builds/…
    。这是强制性行为吗?我想我真正想要的是在我的制作网站目录中有一个
    git pull

  • 如果它真的每次都要克隆回购协议,为什么不重新设置它呢?至少这样可以节省大量的带宽,不是吗

  • 如何运行存储库根目录中的
    deploy.sh
    ?我当前在gitlab.com构建信息中遇到此错误:
    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
链接似乎指向了一些内部网资源。。。