[英]CI/CD for laravel project how to make it stable
我想在我的laravel项目中使用jenkins。
我为此使用管道。 如您所知,laravel不需要构建步骤。 我也不使用测试。 我只想要一个stage('deploy').
推送到存储库时, jenkins
主机会收到通知,拉出项目并运行laravel
项目中驻留的jenkins管道。 由于我的jenkins host
和laravel api
主机彼此不同,因此这是我面临的问题。
如我所说,我没有build
和test
阶段。 所以只能deploy
在pipeline
。 但是要运行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.