我想在我的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)我可以在运行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/