构建开放源码项目

本文在以下部分提供了在CircleCI上构建开源项目的技巧和最佳实践:

概述

为了支持开源社区,Github或Bitbucket上的组织每周将获得10万免费积分,这些积分可以用于开源项目。这些积分可以花在linux媒体资源上。每个组织最多可以有四个并发作业在运行。

注意:如果您正在macOS上构建一个开源项目,请联系billing@www.drag240sx.com以启用这些额外的容器。

安全

虽然开源可以是解放的实践,但要注意不要解放敏感信息。

  • 如果您的存储库是公开的,您的Circleci项目及其构建日志也是公开的。注意您选择打印的信息。
  • 在CircleCI应用程序中设置的环境变量对公众隐藏,这些变量不会被共享叉子除非显式地启用。

开源项目的功能和设置

以下特性和设置对于开放源码项目特别有用。

私人环境变量

许多项目需要API令牌、SSH密钥或密码。私有环境变量允许您安全地存储机密,即使您的项目是公开的。

有关更多信息,请参见环境变量文档。

只构建拉动请求

默认情况下,Circleci构建每个分支的每个提交。对于开源项目来说,这种行为可能过于激进,这通常比私人项目更明显更多。

要更改此设置,转到项目设置>先进你的项目并设置只构建拉动请求选项

注意:即使启用此选项,Circleci仍将构建项目默认分支和标签的所有提交

从分支存储库构建拉请求

许多开源项目接受来自叉子存储库的PR。建立这些PRS是一种有效的方法,可以在手动查看变更之前捕获错误。

默认情况下,Circleci不会从叉子存储库构建PRS。要更改此设置,转到项目设置>先进你的项目并设置构建分叉的拉请求选项

请注意BitBucket用户目前不支持该特性。

注意:如果用户提交一个请求存储库从一个叉,但没有管道被触发,然后用户最有可能是后一个项目叉在他们的个人账户,而不是项目本身CircleCi,导致工作触发下用户的个人账户,而不是组织账户。要解决这个问题,让用户在CircleCI上取消跟踪他们的项目分支,转而跟踪源项目。当他们提交pull请求时,这将触发他们的作业在组织下运行。

从派生的拉请求向构建传递秘密

在父存储库中运行不受限制的构建可能是危险的。项目通常包含敏感信息,此信息可供任何人可以推送触发构建的代码的任何人可用。

默认情况下,CircleCI不会向来自开源项目的派生PRs的构建传递秘密,并且隐藏四种类型的配置数据:

注意:在启用此设置之前,需要保密的开源项目的分叉PR构建不会在CircleCI上成功运行。

如果您愿意与任何创建您的项目并打开PR的人共享秘密,那么您可以启用通过秘密从叉子拉出请求构建选项。在里面项目设置>先进,设置通过秘密从叉子拉出请求构建选项

缓存

基于GitHub Repo的Github仓库分离缓存。Circleci使用Fork PR发件人的GitHub存储库ID来标识缓存。

  • 来自同一个fork repo的PRs将共享一个缓存(如前所述,这包括主回购中的PRs与主回购共享一个缓存)。
  • 在不同的Fork Repos中的两个PRs将有不同的缓存。
  • 促成共享环境变量将在原始repo和所有派生构建之间启用缓存共享。

目前,没有高速缓存的预先,因为这种优化尚未使其到优先级列表的顶部。

开放源码项目示例

以下是在Circleci上建立的项目(大小和小)的一些例子:

  • 反应- Facebook的基于JavaScript基础的反应是用Circleci(以及其他CI工具)构建的。
  • 反应本地- 使用JavaScript构建本机移动应用程序并反应。
  • -在JavaScript中添加静态类型,以提高开发人员的生产力和代码质量。
  • 继电器- JavaScript框架,用于构建数据驱动的React应用程序。
  • vue.js是一个渐进的、可逐步采用的JavaScript框架,用于在web上构建UI。
  • 故事书-交互式UI组件开发和测试:React, React Native, Vue, Angular, Ember。
  • 电子-使用JavaScript、HTML和CSS构建跨平台桌面应用程序。
  • 棱角-框架建设浏览器和桌面网络应用程序。
  • 阿波罗- 为GraphQL构建灵活的开源工具。
  • PyTorch-数据操作和机器学习平台。
  • Calypso.支持WordPress.com的下一代网络应用程序。
  • 快车道-一个构建自动工具的Android和iOS。
  • - 这npm替换

另请参阅

参考例子文档有关Circleci功能和编程语言组织的更多公共和开源项目配置链接。