我想在我的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)我可以在运行{{1}的stage('build')
中进行所有操作,之后再从其中制作'composer install and other stuff
(包括供应商文件夹),然后获取映像(也包含供应商) ),将此docker映像上传到dockerhub,然后在stage('deploy')中我可以通知远程主机有关此信息,并将脚本文件从jenkins传递到该laravel远程主机,该脚本文件包含从dockerhub中提取最新映像并运行它的代码。这样,我就不会有不希望的状态,因为该图像已经包含了供应商文件夹,它已经获得了权限以及所有这些东西。问题是制作映像将占用大量硬盘。并想象为存储库中的每次推送创建映像。
您建议我该怎么做?
答案 0 :(得分:0)
标准做法是您的选择2,即为每个版本创建一个新映像。通常,在Docker中,您根本不会独立地复制源代码。您生成图像并仅处理这些图像。 (构建和映像的“用于开发的Docker”模式,然后用本地源代码树替换其所有内容,这根本不是生产环境中通常使用Docker的方式。)
您应该确保为每个图像赋予唯一的标识符,例如构建的时间戳或某种源代码管理提交ID。对于某些更高级别的自动化系统(例如,Kubernetes),这几乎是必需的,并且它可以很容易地回滚损坏的构建。
在您描述的工作流程中,您可以将几乎所有类型的文件打包到一个图像中,然后发送出去运行。进行某种验证阶段具有很大的价值,可确保令人尴尬的错字不会导致图像永远不会开始。我的意思是...编写测试:-)