Bitbucket 是Atlassian公司的Git平台,与Jira、Confluence和生态系统中的其他工具集成。Bitbucket提供Git仓库托管、通过Bitbucket Pipelines内置的CI/CD以及强大的代码审查工具。根据Atlassian,2024的数据,全球超过1000万开发者和80万团队使用Bitbucket。
要点
Bitbucket 是一个用于托管Git仓库的网络平台,由Atlassian公司开发。最初Bitbucket只支持Mercurial(从2008年开始),但在2020年停止对Mercurial的支持后,完全转向了Git。该平台有两个版本:Bitbucket Cloud(SaaS,Atlassian托管)和Bitbucket Data Center(面向企业的本地版本)。
Bitbucket相比竞争对手的主要优势 — 与Atlassian产品的深度集成。Jira自动将提交和Pull Request与任务关联,Confluence允许在文档中嵌入代码片段,Opsgenie将部署与事件关联。对于已经使用Atlassian生态系统的团队来说,Bitbucket是自然的选择,因为它不需要配置额外的集成。
Bitbucket Cloud提供多个托管级别。免费套餐包括一个用户和有限的存储空间(1 GB)。标准套餐每位用户每月3美元,提供无限私有仓库和每月2500分钟的Pipelines。Bitbucket采用用户许可模式:每个有权访问仓库的用户(包括只读用户)都需要付费。
Bitbucket Pipelines 是一个基于Docker容器运行的内置CI/CD系统。Pipelines直接集成到Bitbucket Cloud中,无需安装单独的运行器或配置webhook。配置在仓库根目录下的 bitbucket-pipelines.yml 文件中描述。每个管道由组合成序列的步骤(steps)组成。
Pipelines支持并行步骤、手动触发、推送和定时触发器、依赖缓存和构建产物。每个步骤在隔离的Docker容器中执行,其镜像在配置中指定。以下是一个构建Android应用程序并进行测试和发布到Firebase App Distribution的示例管道:
# bitbucket-pipelines.yml
image: openjdk:17-jdk
pipelines:
pull-requests:
'**':
- step:
name: Build and Test
caches:
- gradle
script:
- ./gradlew assembleDebug testDebugUnitTest
artifacts:
- app/build/outputs/apk/debug/
branches:
main:
- step:
name: Deploy to Firebase
script:
- pipe: atlassian/firebase-distribution:1.0.0
variables:
APP_FILE: 'app/build/outputs/apk/debug/app-debug.apk'
Bitbucket Pipelines在Cloud版本中每个管道有50分钟的限制,这对大多数项目来说足够,但对于大型单一仓库来说可能成为瓶颈。在Data Center中,这个限制被完全取消 — 管道的持续时间仅由服务器的可用资源决定。Pipelines还支持自定义Docker镜像,允许使用任何构建和测试工具。
Bitbucket中的Pull Request 注重企业代码审查流程的实现。Bitbucket提供:针对diff特定行的内联评论、来自Pipelines或外部服务的强制检查(checks)、合并的最少批准数量、在所有检查通过之前阻止合并以及利益冲突声明(decline)。PR界面分为三列:源代码、diff和文件结构。
Bitbucket的独特功能 — Code Insights。这是一个用于集成外部代码质量工具(SonarQube、CodeScene、ESLint、Detekt)的API,这些工具直接在Pull Request界面中显示其结果。开发者可以看到:新错误数量、测试覆盖率、代码异味和重复。Code Insights允许基于客观指标(而不仅仅是审阅者的主观意见)做出关于合并的决定。
Bitbucket还支持分支限制(branch permissions):可以禁止删除分支,强制为某些分支创建PR,限制有权合并到main的用户列表。此外还有合并检查(merge checks) — 在Merge按钮之前必须满足的强制性条件列表(Pipelines通过,至少N个批准,没有未解决的评论)。设置保护生产分支免受意外未经审查的更改。
Bitbucket与Jira的集成 — 平台的关键优势。当开发者在提交消息中包含任务密钥时(例如 PROJ-123),Jira会自动将此提交与任务关联。在任务界面中,会显示Development选项卡,其中收集了与此任务相关的所有提交、Pull Request、分支和部署。PR在合并时自动更新Jira中的任务状态(转换为Done)。
Confluence 也与Bitbucket集成:可以通过Code Block宏将仓库中的实时代码片段插入到Confluence页面中。代码中的更改会自动与Confluence同步,这便于维护架构文档。此外,Atlassian提供Smart Commits — 直接从提交消息管理Jira任务:更改状态、添加时间和优先级。
对于DevOps自动化,Bitbucket支持Deployment Gate — 将部署与任务版本关联。当管道到达部署阶段时,Jira会检查此版本中的所有任务是否具有Approved状态。如果没有 — 部署将被阻止。这实现了持续交付原则,在任务级别(而不仅仅是代码级别)进行质量控制。
Bitbucket允许创建仓库模板以标准化项目结构。对于移动项目,可以创建包含预设文件的模板:Gradle配置、gitignore、Detekt和Ktlint设置、Android CI管道和带有构建说明的README。新项目只需几次点击即可从模板创建,这加快了新开发人员的入职速度。
Bitbucket与GitHub和GitLab的比较 取决于团队工作的生态系统。Bitbucket在社区规模上输给GitHub(1000万对1亿用户),但凭借Atlassian技术栈在企业集成方面胜出。如果团队已经使用Jira进行任务管理和Confluence进行文档 — Bitbucket提供无缝集成,无需额外配置。
在CI/CD方面,Bitbucket Pipelines在高级场景中落后于GitLab CI/CD(没有子管道、矩阵构建、多级管道),并且在现成操作数量上落后于GitHub Actions(Marketplace Actions包含20,000多个步骤,而Bitbucket有数千个公共pipe)。然而,由于Atlassian提供的现成pipe组件,Pipelines在典型场景中配置更简单。
| 标准 | Bitbucket | GitHub | GitLab |
|---|---|---|---|
| CI/CD | Pipelines,50分钟/步 | Actions,2000分钟/月 | CI/CD,无限制(自助) |
| 集成 | Jira,Confluence | Copilot,Slack,Azure | Kubernetes,Prometheus |
| Self-Hosted | Data Center(付费) | Enterprise Server | CE(免费) |
| 用户 | ~1000万 | ~1亿 | ~3000万 |
| 许可证 | 专有 | 专有 | MIT(开源) |
选择Bitbucket在两种情况下是合理的:团队已经使用Atlassian生态系统(Jira + Confluence + Opsgenie),或者工作在企业环境中,Bitbucket Data Centre已经作为标准工具部署。对于初创公司和开源项目,GitHub提供更丰富的社区和免费功能,而GitLab — 最好的自托管CI/CD。
Bitbucket Data Center 是该平台的企业版,旨在安装在自己的基础设施上。与Cloud版本不同,Data Center提供:集群(多节点的主动-主动模式)、Smart Mirroring(地理分布的镜像以加速clone/fetch)、高可用性(集群时99.99%正常运行时间)和完整的操作审计。
Data Center包含Cloud版本的所有功能,但带有企业扩展。Smart Mirroring 自动同步不同数据中心服务器之间的仓库 — 来自欧洲和亚洲的开发人员获得相同的clone/fetch速度,因为Git操作通过最近的镜像执行。审计日志记录每一个操作:谁、何时以及从哪个IP创建了分支、进行了推送、合并了PR。
Bitbucket Data Center的许可基于用户数量(而非仓库数量)。50用户的最低许可起价为每年1520美元(标准套餐)。对于以下组织,Data Center是强制性的:需要可用性SLA、数据不能离开所在国家(GDPR、152-FZ)、开发人员数量超过500人或需要与企业LDAP/SAML系统集成。
Bitbucket Snippets — 用于存储和共享小段代码的工具。与仓库不同,Snippets没有完整的Git历史记录,但支持版本控制、评论和分支。Snippets对于共享配置(用于本地开发的docker-compose.yml)、SQL迁移脚本和不需要完整仓库的代码示例非常有用。每个Snippet都有唯一的URL,可以关联到Jira中的项目。
Bitbucket REST API 2.0 允许以编程方式管理仓库、Pull Request、分支和权限。API用于自动化工作流程:从模板创建仓库、批量更新权限、获取Pull Request统计信息以及与外部CI系统集成。对于经过身份验证的用户,速率限制为每小时1000个请求。API通过Page和Pagelen参数支持分页以处理大型数据集。
常见问题
Bitbucket 是Atlassian的平台,用于存储带有CI/CD、代码审查和内置Jira集成的Git代码。由已在Atlassian生态系统中工作的团队使用。
Pipelines 使用pipe组件(Atlassian的现成步骤),对于典型任务更简单。GitHub Actions提供更广泛的市场和灵活的矩阵构建,但需要更多配置。
对于5人团队,Bitbucket Cloud Standard每月费用为15美元(每位用户3美元)。免费套餐仅适用于一个用户,功能有限。
Bitbucket提供内置导入器,支持从GitHub、GitLab和其他平台导入。在界面中选择Import repository,输入URL和身份验证信息 — 所有提交和分支都将被迁移。
Data Center 是Bitbucket的企业版,用于安装在自有服务器上,具有集群、Smart Mirroring和审计功能。适合拥有数百名开发人员和数据安全要求的组织。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。