Bitbucket Pipelines 在 Atlassian 的 Bitbucket 云上提供持续交付功能

  • Steffen Opel
  • 金灵杰

2016 年 7 月 12 日

话题:持续集成DevOps持续交付语言 & 开发

在巴塞罗那举行的AtlasCamp上,Atlassian 公司发布了 Bitbucket Pipelines 的 beta 版本,在其 Bitbucket Cloud 上提供用于持续交付功能。同时,Atlassian 公司也宣布他们当前基于 Bamboo Cloud 提供的持续集成 / 持续交付云将于 2017 年 1 月 31 日关闭。但是他们强调Bamboo Server仍然将作为Bitbucket Server(之前名为 Stash)预置的持续集成 / 持续交付工具。

Bitbucket Pipelines是 Atlassian 公司源码仓库托管服务Bitbucket的云版本新的持续交付(Continuous Delivery,CD)特性,它无需设置构建代理,也无需集成外部持续集成工具。由于整个开发流程,从代码到部署都在 Bitbucket Cloud 上完成,Pipelines 旨在“帮助团队在每次代码推送后进行构建、测试和部署代码”,同时应该无需在不同工具之间进行切换,提供快速反馈环路。例如,构建状态会展示在所有相关联的提交、分支和拉取请求上,并可以从构建失败的命令处直接进入查看日志。

和其他流行的基于云的持续集成 / 持续交付解决方案类似,Bitbucket Pipelines 基于类似代码的配置,用于驱动基于临时Docker容器的构建环境在每次代码提交到托管仓库的自动运行。一旦对一个仓库开启之后,开发者可以通过在代码仓库根目录的bitbucket-pipelines.yml YAML 文件来管理他们的持续交付管线,其中可以通过引用镜像来指定构建环境,这些镜像可以来自

Docker Hub或者自定义注册中心。一个简单的示例如下:

image: python:3.4.3
pipelines:
  default: # 针对分支构建,默认不需要指定 pipeline。
    - step:
        script:
          - pip install -U tox
          - pip --version
          - tox --version
  branches: # 分支 pipeline 特定的容器 
    feature/*:
      - step:
          image: python:3.5.1 # 该步骤使用独立的镜像。
          script:
            - echo "Runs only on branches that match this pattern."

InfoQ 和Sten Pittet(Bitbucket Pipelines 产品经理)进行了交流,深入了解 Atlassian 公司的集成持续交付解决方案。

InfoQ:您能给我们详细介绍下 Bitbucket Pipelines 和它的工作原理吗?

**Pittet:**Atlassian 在持续集成和持续交付上对 Bamboo Server 和 Bamboo Cloud 的投入已经有一段时间,我们希望找到一种方法,让开发团队在快速发布的同时有优秀的质量。持续交付可以帮助开发者达到这个目的,但是对于云上因为设置的复杂性,使得用户难以适应。我们的使命是让开发过程民主化(democratize),帮助每个软件开发团队了解(持续交付)的潜力并更好的工作。纵观我们所拥有的东西,我们意识到实现持续交付的最佳方式通过将持续集成 / 持续交付工作流集成到 Bitbucket 来简化我们的产品,贴近应该和持续交付结合的代码仓库。

InfoQ:市场上有很多持续集成 / 持续交付的产品,很多已经集成到了 Bitbucket,直接在 Bitbucket Cloud 中构建一个新的解决方案的动机是什么?

Pittet:主要动机是为软件开发团队简化流程。之前进行持续交付比较困难是因为我们没有类似 Docker 这样的技术,可以通过简单的容器化运行代理。但是我们将 pipeline 引入 Bitbucket 的主要原因是质量问题不应该等待。如今,测试已经变得越来越关键,我们希望从第一天起就能够对每个开发团队产生价值。因此我们为 Bitbucket 创建了新的平台 […]。我们相信我们现在已经将 Bitbucket 变成了一个可以编码、构建、测试和部署的平台,它拥有开发者需要的所有确保软件高质量的工具。

InfoQ:如果我对 Bitbucket Pipelines 了解的没错,每个构建步骤都作为独立的容器实例运行在 Docker 镜像中?

Pittet:是的,开发者可以在代码中使用 YAML 格式文件定义自己的 pipeline[…],同时他们可以为指定的分支定义不同的 pipeline 以支持类似Gitflow的分支工作流特性。在每个 pipeline 中,我们有一些步骤。像这样我们可以定义一个所有步骤都使用的 Docker 镜像,也可以在步骤级别覆盖镜像 […]。在 beta 版本中,pipeline 限制了每个只有一个步骤,但是我们将在未来进行扩展,使其更加灵活 […]。

Bitbucket 提供了默认Docker 镜像作为构建环境。用户可以从 Docker Hub 或者自定义注册中心引用镜像,亦或创建他们自己的镜像。手工或者在Docker Hub 上自动构建的镜像也可以在Bitbucket 进行监控

Pittet 确认 Bitbucket Pipelines 实现基于亚马逊 EC2 容器服务(ECS)。虽然这种透明和被管控容器的使用是 Pipeline 的价值主张之一,用户也提出了提供在他们自己的 ECS 集群中执行构建能力的请求。

InfoQ:Bitbucket Pipelines 自身作为Bitbucket Connect插件实现,Pipelines 自身能够被按需扩展吗?

Pittet:这是我们希望在将来提供的功能,beta 版本的一个目标是和合作伙伴和希望扩展 Bitbucket Pipelines 的开发者共同协作,以了解什么是最好的实现方案。如果我们使用 Bamboo Cloud 作为示例,由于其Plugins 2架构的技术限制,我们将没有那样的机会 […]。通过 Pipelines 我们现在有很多的机会来实现这个目标。我们必须定义这些集成方案,但是我们期待我们能够在未来做些什么。

InfoQ:你们已经在促成第三方提供商(例如 Azure 和 AWS)的集成方案。这个点上的集成会包括什么?它们会走向插件的道路吗?

Pittet:目前,我们的集成方案基于文档。这些文档将帮助我们的测试用户把 Pipeline 集成到诸如 Azure 平台,得他们可以在上面进行部署。我们也有一些和移动平台的集成 […]。我们将和合作伙伴一起工作,使得这些集成在未来会变得更加简单。

InfoQ:Atlassian 最近将预置的 Git 解决方案 Stash更名为 Bitbucket Server,和 Bitbucket Cloud 一起成为联合品牌,并且整合了用户接口和 API,Bitbucket Pipelines 也会因此为 Bitbucket Server 提供服务吗?

Pittet:我们没有这样的计划。我们考虑到 Bamboo Server 是 Bitbucket Server 非常好的预置解决方案,它们已经很好的集成到了一起。我们的计划是在 Bamboo Server 上投入更多以使其成为大型企业更好的解决方案。最近我们推出了一个新的 250 级代理 [参见前文],因此我们对两边都认真对待,我们希望 Bamboo Server 继续发展。

目前客户已经表达了对 Bitbucket Pipelines 会替代 Bamboo Cloud 但没有提供功能对比列表的担忧。当前显著的限制是缺少对Mercurial 的支持,缺少邮件或者 HipChat提醒,没有构件存储管理,无法将构建和推送 Docker 镜像作为 pipeline 的一部分,缺少和JIRA 开发面板集成。对用户来说目前也缺少为解耦交付和部署而使用的定时调度或者人工触发构建功能,和第三方服务集成的网络钩子限制并行构建数量和设置静默期功能。另一方面,Bitbucket Pipelines 类似的配置方式,既以代码方式设置配置文件、使用模板API,也是 Bamboo Server 上需求强烈的特性。

Atlassian 还未透露 Bitbucket Pipelines 的定价策略,并且在 beta 测试期间继续免费提供,内含每个用户每个月 300 分钟的免费构建。例如一个团队的 10 个开发人员将会有每个月 3000 分钟额度,以账户级别计算,在每个月的第一天重置。定价策略将根据团队用户数量来制定定价模型。

Bitbucket Pipelines 文档提供了更多细节,包括常见问题。Atlassian 的开发者工具支持门户页和 AtlassianQ&A 论坛的bitbucket-pipelines话题区提供技术支持。监控 Bitbucket Cloud 的公开问题追踪系统中的Pipelines 部分信息可以了解最新开发进度。

查看英文原文:Bitbucket Pipelines Provides Continuous Delivery within Atlassian’s Bitbucket Cloud

持续集成DevOps持续交付语言 & 开发