繁体   English   中英

laravel项目的CI / CD如何使其稳定

[英]CI/CD for laravel project how to make it stable

我想在我的laravel项目中使用jenkins。

我为此使用管道。 如您所知,laravel不需要构建步骤。 我也不使用测试。 我只想要一个stage('deploy'). 推送到存储库时, jenkins主机会收到通知,拉出项目并运行laravel项目中驻留的jenkins管道。 由于我的jenkins hostlaravel api主机彼此不同,因此这是我面临的问题。

如我所说,我没有buildtest阶段。 所以只能deploypipeline 但是要运行laravel项目,在使用jenkins之前,我有bash脚本,其中包含10行代码。 例如(changing permissions, making current user as my user, running composer install, running docker-compose and so on) 。由于我有Laravel的另一台主机,因此我有2个选项:

1)在stage('deploy')我可以将build.sh文件从jenkins主机传输到laravel api主机。 然后将ssh放入laravel api主机并在那里运行该文件。 我不喜欢这样的事情是,如果我在该build.sh文件中设置权限或其他东西在一半途中出错,那会使我的项目处于不希望的状态,我什至不会得到通知,我会怎么办?将有坏掉的项目投入生产。

2)我可以在运行'composer install and other stuff stage('build')完成所有工作'composer install and other stuff ,之后dockerfile制作dockerfile (包括供应商文件夹),然后获取映像(也包含供应商)之后,上传此docker镜像到dockerhub中,然后在stage('deploy')中,我可以通知远程主机并将其从jenkins传递到该laravel远程主机,该脚本文件包含从dockerhub中提取最新镜像并运行它的代码。 这样,我就不会有不希望的状态,因为该图像已经包含了供应商文件夹,它已经获得了权限以及所有这些东西。 问题是制作映像将占用大量硬盘。 并想象为存储库中的每次推送创建映像。

你建议我该怎么办?

您的选择2是标准做法,为每个版本都制作一个新映像。 通常,在Docker中,您根本不会独立地复制源代码。 您生成图像并仅处理这些图像。 (构建和映像的“ Docker for development”模式,然后将其所有内容替换为本地源代码树,这根本不是生产环境中通常使用Docker的方式。)

您应该确保为每个图像赋予唯一的标识符,例如构建的时间戳或某种源代码管理提交ID。 对于某些更高级别的自动化系统(例如,Kubernetes),这几乎是必需的,并且它使得回滚损坏的构建非常容易。

在您描述的工作流程中,您几乎可以将任何类型的文件打包到一个映像中,然后发送出去运行。 进行某种验证阶段具有很大的价值,可以确保令人难堪的错字不会导致图像永远不会开始。 我的意思是...编写测试:-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM