在gitlab CI构建期间缓存构建文件夹

时间:2019-12-02 09:48:47

标签: gitlab gitlab-ci gitlab-ci-runner

我有一个远程服务器,可以通过Nginx为我的项目提供服务。我正在使用Gitlab CI来自动化部署过程,但遇到了问题。 当我将提交推送到master分支时,gitlab-runner运行良好,但问题是它删除了我的React build文件夹(没关系,因为我已经将其放入.gitignore中了),但是因为它总是删除我的构建文件夹,所以在构建完成之前,Nginx无法提供任何文件,并且创建了新的构建文件夹。 此问题有解决方案吗?如果可以在构建过程完成之前缓存构建文件,那就太好了。我附加了gitlab.ci.yml。谢谢你!

image: docker:latest
services:
  - docker:dind
stages:
  - build
  - deploy
variables:
    GIT_SSL_NO_VERIFY: "1"
build-step:
  stage: build
  tags:
    - shell
  script:
    - docker image prune -f
    - docker-compose -f docker-compose.yml -f docker-compose.prod.yml build
deploy-step:
  stage: deploy
  tags:
    - shell
  script:
    - docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d


1 个答案:

答案 0 :(得分:1)

应该可以在启动部署作业时使用git fetch并禁用git clean。这是变量的链接,以执行此操作:

https://docs.gitlab.com/ee/ci/yaml/#git-clean-flags

https://docs.gitlab.com/ee/ci/yaml/#git-strategy

它看起来像这样:

deploy-step:
  variables:
    GIT_STRATEGY: fetch
    GIT_CLEAN_FLAGS: none
  stage: deploy
  tags:
    - shell
  script:
    - docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

这应该使GitLab使用git fetch而不是git clone,并且不要运行任何git clean ...命令。然后,不应删除之前运行的构建工件。

但是这有一些问题。如果构建出现问题,您可能最终不得不手动登录到运行程序要对其进行修复的服务器。 GitLab使用git clean的原因是为了防止此类问题。

一个更合适的解决方案是使用nginx来拥有一种dubble缓冲区。您可以有两个不同的构建文件夹,在nginx中更改配置,然后向nginx发送信号以重新加载配置。然后,nginx将确保正常切换到应用程序的新版本,而不会出现任何中断。这是执行此操作的人的链接:

https://syshero.org/2016-06-09-zero-downtime-deployments-using-nginx/