Gitlab CI Web部署

时间:2019-01-03 10:16:27

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

因此,我们目前正在远离当前的部署提供程序:Beanstalk,这很好,但是我们处于顶层,并且我们会不断用完空间或达到存储库限制。因此,我们正在远离,因此请不要建议任何其他SaaS提供商。

我个人将Gitlab用于我自己的项目和一些公司项目,令人惊讶的是我们在公司大楼的本地服务器上使用了自托管版本。

我们已经设置了CI,目前正在使用以下部署代码(我已经将这些代码缩减为用于开发的部署了)-当我们部署到现有的linux服务器时,它将使用shell执行程序进行部署。

variables:
  HOSTNAME: '<hostname>'
  USERNAME: '<username>'
  PASSWORD: '<password>'
  PATH_DEV: '/path/to/www'

# Define the stages (we can add as many as we want)
stages:
  # - build
  - deploy

# The code for development deployment
deploy_dev:
  stage: deploy
  script:
    - echo "Deploying to development environment..."
    - rm .gitlab-ci.yml
    - rsync -urltvz --filter=':- .gitignore' --exclude=".git" -e "sshpass -p"$PASSWORD" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" * $USERNAME@$HOSTNAME:$PATH_DEV
    - echo "Finished deploying."
  environment:
    name: Development
    url: http://dev.domain.com
  only:
    - envdev

问题:

当我们使用上面的代码来部署它时,它是完美的并且确实很好地工作,并且它在优化等之后部署了所有代码,但是我们在这里发现了一个小错误。

当您删除文件时,rsync命令将不会删除该文件,现在我进行了一些搜索,发现可以添加--remove标志,并且可以正常工作-但它也删除了所有用户上传的内容。现在,我在过滤中添加了.gitignore,因此它将忽略其中的某些文件(通常是用户生成的)或配置文件或/和库(npm等)。这很好,直到用户开始使用我们框架中的媒体管理器上载文件,该文件管理器存储在不在.gitignore文件中的文件夹中,并且因为包含其他文件而无法保存,因为我们还在其中添加了自己的文件,因此它们可由用户编辑,所以现在我不确定如何管理它。

我们正在寻找的是CI设置,该设置会将文件更改上载到服务器,因此它将搜索最新的提交,查找已更改的最新文件,然后仅向上推送这些文件。当然,我仍然想在Gitlab CI上执行此操作,因此任何想法示例或教程都将很棒。

谢谢。

〜丹尼

1 个答案:

答案 0 :(得分:-1)

可能会有所帮助:https://github.com/banago/PHPloy 看起来该工具是为php项目设计的,但我认为它可以使用其他Web部署。

它是如何工作的: PHPloy在您的服务器上存储一个名为.revision的文件。该文件包含已部署到该服务器的提交的哈希。当您运行phploy时,它将下载该文件,并将其中的提交引用与您尝试部署的提交进行比较,以找出要上传的文件。 PHPloy还为存储库中的每个子模块存储一个.revision文件。