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

How do I set up a very simple deployment using a Gitlab CI runner?

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

我的问题:

我的 .gitlab-ci.yml 文件:

deploy_to_production:
  script:
    - deploy.sh
  only:
    - live
  tags:
    - prod

详情

为此,我想 运行 我在生产服务器上编写的一个简单的 shell 脚本 (deploy.sh),每当我推送到我的回购协议的特定分支时(live 分支,在我的例子中)。这个 shell 脚本在我的 GIT 存储库中,与我的 .gitlab-ci.yml.

一起

该脚本基本上只是执行 git resetfetchpull,使生产版本与存储库中的内容保持同步。

我在我的服务器上安装了一个 "shell" multi-运行ner,并将其连接到 gitlab.com,在那里我可以看到它处于活动状态。

总的来说,我找错人了?我是否应该更改我的 deploy.sh 以便它不对新工作执行 git 签出,而是使用 cp 或者 rsync 将新代码从 ~/builds/...进入制作网站?

问:克隆是强制行为吗?

据我所知,这是因为假设您在构建过程中使用代码。

如果这不是您的情况,并且您只想 "tell the production server" 从您的存储库中提取代码,那么也许您可以采取不同的方法并改用 webhook。 GitLab 将向您的服务器发出 HTTP 请求,并以 JSON 格式传递有关事件(推送、合并等)的信息。然后接收脚本会解析它并决定是否执行 git pull.

如果您在部署前的构建过程中确实有其他任务要对代码执行,那么是的,请更改策略并使用 运行 人员已经为您签出的代码。我可能会尝试以某种方式更改 atomic(rsyncing 到实时目录会使您的应用程序在 运行s 时处于某种不确定状态,如果它由于某种原因失败了),例如通过将实时代码放在符号链接的目录中。然后部署脚本会将新的代码目录复制到它的最终目的地,进行任何必要的调整并将符号链接的目标从旧的活动目录更改为新的。

问:如果真的每次都要克隆repo,为什么不git重置它?

这对开​​发人员来说更像是一个问题。任何其他人的回答都只是猜测。

问:如何 运行 我的 deploy.sh 位于存储库根目录中?

如果 deploy.sh 脚本设置了可执行位,则使用 ./deploy.sh,否则 bash deploy.sh.