Php laravel项目的CI/CD如何使其稳定
我想用詹金斯来完成我的拉威尔项目 我用管道来做这个。正如你们所知,拉威尔不需要构建步骤。我也不使用测试。我只想有一个Php laravel项目的CI/CD如何使其稳定,php,laravel,docker,jenkins,Php,Laravel,Docker,Jenkins,我想用詹金斯来完成我的拉威尔项目 我用管道来做这个。正如你们所知,拉威尔不需要构建步骤。我也不使用测试。我只想有一个阶段('deploy')。在推送到存储库时,jenkins主机收到通知,提取项目并运行驻留在laravel项目中的jenkins管道。由于我的jenkins主机和laravelapi主机彼此不同,这就是我面临的问题所在 正如我所说,我没有build和test阶段。因此,只有在管道中部署。但是要运行laravel项目,在使用jenkins之前,我有bash脚本,其中有10行代码。例如
阶段('deploy')。
在推送到存储库时,jenkins
主机收到通知,提取项目并运行驻留在laravel
项目中的jenkins管道。由于我的jenkins主机
和laravelapi
主机彼此不同,这就是我面临的问题所在
正如我所说,我没有build
和test
阶段。因此,只有在管道中部署。但是要运行laravel
项目,在使用jenkins
之前,我有bash
脚本,其中有10行代码。例如(更改权限、将当前用户设置为我的用户、运行composer安装、运行docker compose等等)
。由于我有另一台Laravel主机,我有两个选项:
1) 在stage('deploy')
中,我可以将build.sh文件从jenkins主机传输到laravel api主机。然后将ssh放入LaravelAPI主机并在那里运行该文件。我不喜欢的一点是,如果在build.sh文件中设置权限或其他内容中途出错,会使我的项目处于不希望的状态,甚至不会得到通知,我会将损坏的项目投入生产
2) 我可以在stage('build')
运行'composer install和其他东西
,然后从中创建dockerfile(包括供应商文件夹),然后在获取映像(其中也包含供应商)后,将此docker映像上载到dockerhub,然后在stage('deploy')中我可以通知远程主机,并将jenkins的脚本文件传递给laravel远程主机,其中包含从dockerhub提取最新图像并运行它的代码。这样,我就不会有不希望的状态,因为该图像已经包含供应商文件夹,它已经获得了权限和所有这些东西。这样做的问题是,制作图像将占用大量硬盘空间。想象一下为存储库上的每次推送创建图像
您建议我做什么?标准做法是您的选项2,为每个构建创建一个新的映像。通常,在Docker中,您根本不会独立地复制源代码;您构建图像并仅处理这些图像。(Docker for development的“Docker for development”模式是构建和镜像,然后用本地源代码树替换其所有内容,这完全不是Docker在生产环境中的常用方式。)
您应该确保为每个映像提供一个唯一的标识符,如构建的时间戳或某种源代码管理提交ID。这几乎是一些更高级别的自动化系统(例如Kubernetes)所必需的,并且可以很容易地回滚损坏的构建
在您描述的工作流中,您可以将几乎任何类型的文件打包到一个映像中,然后将它们发送给运行人员。有一个很大的价值,在某种形式的验证阶段,以确保尴尬的打字错误不会导致一个永远不会开始的图像。我的意思是…编写测试:-)标准实践是您的选择2,为每个构建创建一个新映像。通常,在Docker中,您根本不会独立地复制源代码;您构建图像并仅处理这些图像。(Docker for development的“Docker for development”模式是构建和镜像,然后用本地源代码树替换其所有内容,这完全不是Docker在生产环境中的常用方式。)
您应该确保为每个映像提供一个唯一的标识符,如构建的时间戳或某种源代码管理提交ID。这几乎是一些更高级别的自动化系统(例如Kubernetes)所必需的,并且可以很容易地回滚损坏的构建
在您描述的工作流中,您可以将几乎任何类型的文件打包到一个映像中,然后将它们发送给运行人员。有一个很大的价值,在某种形式的验证阶段,以确保尴尬的打字错误不会导致一个永远不会开始的图像。我的意思是…写测试:-)谢谢你的回答。但我不明白你所说的“标准实践是你的选择2,为每个构建创建一个新映像”是什么意思。通常在Docker中,你根本不独立复制源代码;你构建映像并只处理这些映像。(Docker for development)构建和映像,然后用本地源代码树替换其所有内容的模式根本不是Docker在生产环境中通常使用的方式。)”。如果我为每个推送存储库制作构建映像,我的jenkins主机将是超级巨大的,而且没有任何原因——我不会在这里运行project一旦你将映像推送到存储库,你就可以安全地对docker系统进行修剪以回收空间。所以你喜欢我的选项2。制作映像(安装软件包,运行composer安装,然后将我的源代码和供应商文件夹一起移动到该映像中)并将该映像推送到docker hub?让系统修剪?你喜欢这样吗?如果答案是肯定的,那么docker hub呢?如果我每天第100次推送到github存储库,想象一下一个月后,我在docker hub中有3000张图片。想象一年,谢谢你的回答。但我不明白你所说的“标准实践是你的选择2,为每个构建创建一个新映像”是什么意思。通常在Docker中,你根本不独立复制源代码;你构建映像并只处理这些映像。(Docker for development)构建和映像,然后用本地源代码树替换其所有内容的模式根本不是Docker在生产环境中通常使用的方式。)”。