Symfonyob娱乐下载的新功能:可复制的构建
2018年2月14日·发表的哈维尔Eguiluz
可再生的构建是一组软件开发实践,它创建了“从人类可读的源代码到计算机使用的二进制代码的可验证路径”。换句话说,如果不更改源代码,编译结果应该始终完全相同。
在Symfony的例子中解释得更简单:如果构建容器并多次对同一个未更改的应ob娱乐下载用程序的缓存进行预热,那么结果应该总是相同的。
为什么可复制构建很重要?因为软件检查和审计是在源代码上完成的,但应用程序总是在设备上编译运行。如果构建是可重现的,则可以编译审计过的源代码,并验证编译后的结果与正在某些设备上运行的结果完全相同。多方可以独立地重做这个过程,并确保他们都得到完全相同的结果,确保二进制代码来自给定的源代码。
在实践中,可复制的构建意味着编译过程必须完全确定的.编译后的代码不能包含日期/时间值或随机生成的值。但Symfony和它的一些主要第三方依赖(如Monoob娱乐下载log和Doctrine)却并非如此。
这需要在Symfony应用程序的编译方式上做一些改变(我们在3.4分支中做了ob娱乐下载这些改变,所以你不必安装Symfony 4来使用它们):
- 变量名不再是随机的(
Uniqid (mt_rand(), true), false)
)在已编译的Twig模板(树枝# 2621) - 为惰性服务代理生成的类名不再是随机的(
散列(sha256, spl_object_hash(定义)美元。$ this - >盐)
)的Symob娱乐下载fony容器(ob娱乐下载symfony # 25978) - 独白包不再为它的一些服务生成随机id (
monolog.gelf.publisher函数”。”,真的)
) (monolog-bundle # 248) - Symfony Cache组件的Filesystem适配器现ob娱乐下载在使不可过期的项目不受时间的影响(在它们在一年内过期之前)(ob娱乐下载symfony # 26127)
- 由Symfony编译的容器使用构建日期时间来生成容器ob娱乐下载的唯一散列(它使用简单的
时间()
调用)。这个时间是可以配置的kernel.container_build_time
参数(ob娱乐下载symfony # 26128)
在Symfony方面,使Symfoob娱乐下载ny构建可重现的工作已经完成,但是在Symfony应用程序中常用的其他依赖关系中,您可能仍然面临一些问题。例如:
- 由Composer优化的自动装载机生成的APCu前缀是不确定性的(作曲家# 7049)
发表在#生活在边缘
评论
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
如果您安装了ProxyManager的2.2版本(需要PHP 7.2+),那么ProxyManager中的确定性属性名就已经存在了。请参阅https://github.com/Ocramius/ProxyManager/pull/385的PR。他们方面的讨论似乎是他们不想把这个回移植到旧版本。
对于Composer来说,有一种方法可以获得一个确定性的构建:使用权威的类映射优化来代替APCu的自动加载器。
Javier Eguiluz is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now