jenkins php build,php – Jenkins指南需要构建,部署,提供和回滚,保留5个版本

警告tl; tr

好的 – 你想要的一切.很多问题 – 长篇故事.

Jenkis“只是”一个连续的集成服务器.

持续集成,基本上意味着您不必在开发人员计算机上运行编译和单元测试步骤,而是将其转移到中央服务器,对吧?

由于编译和链接现在位于中央服务器上,因此开发人员有更多时间进行开发,而不是等待编译完成.这就是这个CI事情的起源.

现在,在查看PHP项目时,没有涉及任何编译或链接过程.

从事PHP项目的Continous Integration工作归结为仅进行单元测试,也可能是一些报告生成.

你可以清楚地看到,在看Jenkins-PHP这样的辅助项目时,它为Jenkins-http://jenkins-php.org/example.html上的PHP项目提供了模板设置.

起点是“jenkins在你提交来源之后做了些什么”.

您已经有了Git存储库的配置.它受到监视,每当新提交到达时,都会触发新的“构建过程”.

什么是“构建过程”?

可以在Jenkis GUI中部分配置构建过程.

部分意味着,重点是“触发器”和“通知”的配置以及“报告生成”.报告生成意味着,当某些构建工具完成其作业并处理其日志文件并将其转换为更好的格式时.

例如.当phpunit完成它的工作时,可以使用代码覆盖率日志,将其转换为一个漂亮的HTML页面并将其移动到/ www文件夹以供公众查看.)

但是,此构建过程的大多数实际工作都在构建配置文件中进行了描述.在这里,像“Phing”,“ant”(phing的大哥哥)和“nant”(win)这样的构建工具开始发挥作用.

构建工具为脚本任务提供了基础.

这是您的自动化发生的地方!

您必须自己编写自动化步骤的脚本.

Jenkins只是一个GUI,提供了一些用于显示build.log和报告以及重新启动构建的按钮.

换句话说:你不能简单地将Jenkins和你的PHP项目放在一起,希望你可以在GUI上一起点击你的构建和部署过程.

我们还不在那里!工具越来越好,但这还有很长的路要走.

让我们暂时关注Jenkis.让我们关注构建步骤.

当您只在CLI上时,您将如何构建和部署项目?

做吧!您可能希望记下简单文本文件中涉及的所有命令和步骤.

现在,将这些步骤转换为自动化步骤.

在项目的根文件夹中创建“build.xml”.

... build steps ..

现在我们需要一些构建步骤.

构建工具将它们称为“目标”.构建目标对任务进行分组.

您可以自己执行每个目标,也可以链接它们.

规则:保持目标较小 – 在一个目标中最多5-7个cli命令.

现在让我们介绍具有依赖关系的目标链.

让我们假设,您的任务“构建”之前应该运行“phpunit”.

在CLI上,您只需运行phpunit,然后运行构建命令.

在构建配置中,您必须将调用包装到exec任务中.

因此,您创建一个“phunit”目标并将其作为依赖项添加到目标“build”.

依赖关系在指定它们的目标之前执行.

像Phing这样的构建工具提供了许多核心任务,如chown,mkdir,delete,copy,move,exec(…)和其他任务(对于git,svn,notify).请参阅Phing http://www.phing.info/docs/master/hlhtml/index.html或Ant http://ant.apache.org/manual/的文档

Phing的一个好处是可以在构建配置文件中用PHP编写AdhocTasks并运行它们.这也可以用ant,只需构建一个执行PHP和脚本的exec任务.

好的 – 让我们快进:您在此构建配置中重新创建了完整的构建和部署过程.您现在可以独立使用目标命令.现在我们切换回Jenkins CI或任何其他CI服务器并对其进行配置,以使用目标任务运行构建工具.通常你会有一个名为mainor build的默认目标,它将所有目标(步骤)链接在一起.

现在,当新提交到来时,Jenkins通过执行构建脚本来启动构建过程.

鉴于这些信息,关于Jenkins如何与构建工具交互,

你的一些问题是自我解释的.你只需要创建步骤,为了完成,你想要的…

让我们开始Q& A轮:

Q1:Jenkins工作区文件夹

工作区是项目所在的地方.新提交到达那里.

在“高级”下,为项目选择一个工作目录,而不更改Jenkins主目录.选中“使用自定义工作区”框并设置Jenkins将代码拉入并构建的目录.

也可以在那里配置构建文件夹以及要保留的构建量.

Q2:作曲家

Composer保留一个本地缓存 – 它位于$COMPOSER_HOME / cache中.当使用相同的依赖项时,将使用本地缓存.这样可以避免重新下载它们.如果引入了新的依赖项或更改了版本,则会在composer安装和编译器更新中获取并重新使用这些内容.

Composer安装/更新总是来自网络或缓存.

供应商文件夹没有存活.删除并重新安装依赖项.

如果需要很长时间,则需要很长时间.故事的结局.

如果需要很长时间,请使用Composer一次,然后添加新的构建目标“zip-copy-vendor-folder”和“copy-unzip-vendor-folder”.我猜,你可以想象这些事情的作用.

现在,您必须为压缩供应商文件引入if检查.如果供应商zip文件存在,则跳过作曲家安装目标并继续“copy-unzip ..”..好吧,你知道了.这是一个调整..只有当您的依赖关系非常稳定并且远未经常更改时才这样做.

通常,您将需要一个构建目标“get-dependencies-with-composer”,它执行composer安装. Composer将自动使用缓存.

Q3:获取最新版本并移至新目的地

最新版本位于构建文件夹中 – 或者,如果您定义了移动文件的步骤,则它已在您所需的文件夹中.

Q4:如何获取媒体文件

只需添加一个构建目标,即将媒体文件夹复制到项目中.

Q5:为资产处理添加构建目标

你已经知道了这个位置:它是“构建后”.这意味着它是一个部署步骤,对吗?添加新目标以上传您的文件夹可能通过FTP上传到您的CDN.

Q6:何时清除缓存(memcache,redis)

我建议用一个简单的方法:“部署 – 刷新缓存 – rewarm缓存”策略.

PHP应用程序的热插拔很复杂.您必须有一个PHP类支持更改底层组件,而系统开始运行两个版本.旧版本从缓存中淡出,新版本逐渐消失.

请独立询问这个问题!

这并不像人们想象的那么容易.

这很复杂,也是Rasmus Lerdorf最受欢迎的话题之一.

Q7.1:如何回滚到以前的版本?

通过在先前版本的文件夹中运行部署目标/任务.

Q7.2:我如何设置以保留最近5个成功的版本.

Jenkins在build文件夹中设置了“要保留多少个构建”.

将其设置为5.

问题8:如何获取构建失败和部署电子邮件警报失败的电子邮件?

自动.电子邮件通知是默认的如果我错了,请查看通知“电子邮件”.

**问题9:在通过电子邮件成功部署后,操作如何获取最新提交消息列表. **

添加构建目标“send-git-log-via-email-to-operations”.

我觉得,就像我今天写了一本书……

你可能感兴趣的:(jenkins,php,build)