试图理解这个 CI 的东西,所以我在我的生产服务器中下载了 Jenkins......
1. Jenkins(或任何其他 CI 系统)是否安装在生产服务器中,或者我应该有一个单独的服务器来构建 Jenkins?如果 Jenkins 在另一台服务器中,我如何将构建作为我正在运行的生产代码集成?或者这个 CI 的事情与部署无关?
然后我在/var/lib/jenkins/.ssh 上创建了一个 SSH 密钥,作为部署密钥添加到我的 Bitbucket (Git) 存储库中......
2. 这是正确的方法吗?
。并在项目设置的 Git 插件中使用jenkins
用户凭据设置存储库 URL git@bitbucket.org:...
。到目前为止一切顺利,我的构建将项目签出到 Jenkins 工作区,然后我注意到它运行的每个构建都是一个签出,对于每个签出,作为一个 Composer 驱动的项目,我的vendors/
目录不存在,所以我没有phpunit.xml
用作引导程序来加载类和运行测试的autoload.php
文件。因此,除了phpunit
作为构建外壳命令之一之外,我还添加了composer init
.
3. 这是对的吗?我应该在每个构建上运行composer init
吗?
主要问题可能是:我的建筑是从绿地空间建造的吗?我是否应该签出并运行composer install
以及我的项目每次(每次构建)都必须运行的任何脚本?
谢谢!
- Jenkins(或任何其他 CI 系统)是否安装在生产服务器中,或者我应该为 Jenkins 构建设置单独的服务器?如果 Jenkins 在另一台服务器中,我如何将构建作为我正在运行的生产代码集成?或者这个 CI 的事情与部署无关?
然后我在/var/lib/jenkins/.ssh 上创建了一个 SSH 密钥,作为部署密钥添加到我的 Bitbucket>(Git) 存储库中......
- 这是正确的方法吗?
没错。我有一堆以这种方式配置的服务器。在不久的将来,我想调查是否可以使用 SSH 凭据插件将我的凭据存储在那里,这样我就不必关心该密钥的文件系统权限。
- 这是对的吗?我应该在每个构建上运行作曲家初始化吗?
主要问题可能是:我的建筑是从绿地空间建造的吗?我是否应该签出并运行作曲家安装以及我的项目每次(每次构建)必须运行的任何脚本?
这取决于您的要求。您可以有多个构建,也可以参数化您的构建以支持不同的行为。例如,我让Laravel构建,根据环境参数,他们可能会使用Selenium进行进一步测试,或者只是运行phpunit。
我通常在 Jenkins 中为每个 PHP 应用程序准备两个项目。一个从 git 中签出代码,清理工作区中其他构建的任何剩余部分,并调用 Laravel 的特使来构建项目。它基本上的作用是使用一些额外的参数调用composer install
,并调用迁移和数据库种子例程来准备应用程序进行测试。
另一个作业是在我提升(使用 Jenkins Promoted BuildPlugin)构建时触发的,它复制(使用复制工件插件)在构建期间创建并已经过测试的工作区,并通过 scp 将其部署到 QA 服务器中的文件夹。然后,它会更新一些符号链接,最后可以进行测试了。
随着时间的推移以及开发人员和其他团队的更多要求,您将熟悉许多其他插件(如 Email-ext 插件),以发送自定义通知并包含有关构建的更多信息。
最佳实践会为 Jenkins 规定一个单独的 VM,只是为了将其与可能部署到的其他环境区分开来。
Jenkins可以使用脚本删除其他服务,因此删除您正在部署项目的运行 Jenkins 的同一 tomcat 将是......不便。
我属于偏爱将多个 Jenkins 工作链接在一起的阵营。 一个作业建立。 另一个测试。第三个部署。 这样你就可以确切地知道哪个工作有问题。 您还可以查看作业运行时间,并更好地了解需要这么长时间的时间(是否部署? 是单元测试吗?并从更高的 POV 解决问题。
我在 2015 年博伊西代码营上做了一个 Jenkins 最佳实践演讲,可在此处获得:http://lanyrd.com/2015/boise-code-camp/sdkggb/