因此,我们目前正在远离当前的部署提供程序: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上执行此操作,因此任何想法示例或教程都将很棒。
谢谢。
〜丹尼
答案 0 :(得分:-1)
可能会有所帮助:https://github.com/banago/PHPloy 看起来该工具是为php项目设计的,但我认为它可以使用其他Web部署。
它是如何工作的: PHPloy在您的服务器上存储一个名为.revision的文件。该文件包含已部署到该服务器的提交的哈希。当您运行phploy时,它将下载该文件,并将其中的提交引用与您尝试部署的提交进行比较,以找出要上传的文件。 PHPloy还为存储库中的每个子模块存储一个.revision文件。