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

标签 php laravel docker jenkins

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

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

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

你建议我该怎么办?

最佳答案

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

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

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

关于php - laravel项目的CI/CD如何使其稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56067430/

相关文章:

php - 将多个条目插入一列

php - Laravel - 一对多关系不是以一种方式工作

javascript - 使用 XMLHTTP JavaScript 通过 cURL PHP 接收参数

docker - 无法让流量进入 docker 容器

docker - 在 docker 容器中运行 nginx 的性能问题

docker - 如何从 Docker 运行 PyCharm?

php - 从 C++ 发送到 PHP/HTML

php - 拉维尔;如何使 setLocale 永久化?

Laravel 无法查看用户是否在 404 错误页面登录

javascript - 添加第二个文本框后表单停止自动提交?