跳转到主要内容

在Buildbot中实现了Travis CI

项目描述

这是一个设置Buildbot步骤、工厂和配置助手,使您获得Buildbot和Travis CI的最佳体验

  • 与源代码一起存在的构建配置

  • 私有构建

  • 非github版本控制系统支持(gerrit,gitlab,github,github企业版)

  • 在您自己的基础设施上无限并行化构建

基本上,我们提供了一个兼容层,允许Buildbot消耗一个 .travis.yml 文件。

但buildbot_travis不支持完整的.travis.yml格式。

travis-badge codecov-badge

快速入门

首先,您需要确保您有合适的python 2.7环境。在Ubuntu 16.04上,这意味着

sudo apt-get install build-essential python-dev libffi-dev libssl-dev python-pip
pip install virtualenv

然后您创建一个virtualenv并通过pip安装buildbot_travis

mkdir bbtravis
cd bbtravis
virtualenv sandbox
. ./sandbox/bin/activate
pip install buildbot_travis

现在您可以创建一个新的master

bbtravis create-master master

现在您可以启动这个新的master

buildbot start master

然后转到UI: http://localhost:8010,其中有一个管理面板,可以配置项目。

使用Docker的快速入门

docker run -p 8010:8010 -p 9989:9989 buildbot/buildbot-travis

使用Hyper的快速入门

IP=<yourFIPaddress>
container=`hyper run -d -e buildbotURL=http://$IP/ -p 9989:9989 -p 80:8010 buildbot/buildbot-travis`
hyper fip attach $IP $container
echo go to http://$IP/#/bbtravis/config/auth  to configure admin access
echo go to http://$IP/#/bbtravis/config/workers to configure

Buildbot Nine UI插件

buildbot_travis可以通过Web UI进行配置。

您可以通过Web UI编辑项目列表、环境变量、不重要的文件、部署环境。

高级配置要么存储在yaml文件中,要么直接在配置的数据库中。

每个项目的配置文件

这是一个典型的构建out项目的.travis.yml文件

language: python

before_install: python bootstrap.py
install:./bin/buildout
script: ./bin/test

您可以在travis-ci网站上了解更多有关此文件格式的信息。

http://about.travis-ci.org/docs/user/build-configuration/

但是,本页未提及的功能可能目前不支持。

支持的语言

支持的语言列表取决于您的构建工作器配置。

借助docker,您可以根据需要创建任意数量的工作器配置镜像。

实际上,travis规范的语言参数并未充分利用buildbot的全部可能性。

您可以根据要检查的软件版本选择不同的docker镜像。这可以避免在您的travis.yml文件(如travis saas所做的那样)开始时设置工作环境的时间。

构建步骤

Travis为您提供了6个构建钩子点。

  • before_install

  • install

  • after_install

  • before_script

  • script

  • after_script

我们并不关心您从这些钩子中运行什么,只要退出代码为0表示成功,其他任何代码都表示失败。

您可以提供一个这样的单条命令

install: ./bin/buildout

或者像这样提供多条命令

install:
  - ./configure
  - ./bin/buildout

yaml中的列表中的每个元素都会创建一个单独的步骤,该步骤的名称为命令行的第一个字符。

如果您想创建一个自定义名称,buildbot_travis支持以下语法

script:
  - |
      # build
      ./configure
      make
  - |
      # tests
      make tests

Buildbot 特定功能

步骤作为字典

原始Travis只是创建一个简单的shell脚本来运行整个CI脚本。Buildbot功能更强大,buildbot_travis可以利用它。为此,您需要超出Travis“规范”标准。例如:

script:
  - |
      # build
      ./configure
      make

  - title: tests
    shell: dash
    condition: TESTS=='tests'
    cmd: make tests

如果yaml解析器遇到字典,则它将使用以下键

  • title:UI中步骤的标题

  • shell:在给定的shell中运行命令(默认为bash)

  • condition:运行步骤的条件。

    它被评估为一个Python表达式,变量是您的矩阵生成的环境变量。条件在解析yaml文件时评估。如果不满足条件,则该步骤不会插入到步骤列表中。

  • cmd:要运行的命令。

  • step:创建的buildbot步骤。

    请参阅以下详细说明。如果已定义,则忽略shelltitlecmd键。

.bbtravis.yml

为了同时与buildbot_travis和travis.org一起工作,buildbot_travis将在.travis.yml之前查找.bbtravis.yml。通过这种方式,您可以保持您的.travis.yml没有任何buildbot特定功能。

浅克隆

  • 原始Travis支持在yml文件中配置克隆深度(也称为浅克隆)。由于git clone在buildbot有机会解析yaml之前就完成了,因此在buildbot_travis的每个项目配置中完成此配置。cfg.yml(浅克隆和retryFetch)中有两个选项可用,例如:

    projects:
    -   branches:
        - master
        name: buildbot
        repository: https://github.com/buildbot/buildbot
        shallow: 200
        mode: "full"
        method: "clobber"
        stages: []
        tags: []
        vcs_type: github

插值

Buildbot有一个非常有用的插值实用程序。如果您的脚本以`!i!interpolate开头,则buildbot_travis将自动创建一个Interpolate对象

- title: make dist
  cmd: !i make REVISION=%(prop:got_revision:-%(src::revision:-unknown)s)s dist

无shell的命令

如果cmd是一个列表,则它将在不使用shell的情况下运行(这可以避免需要对变量进行shell引号引用)

script:
  - title: make dist
    cmd: [ "make", !i "REVISION=%(prop:got_revision:-%(src::revision:-unknown)s)s", "dist" ]

Buildbot 步骤电池

Buildbot自带电池。它包含大量可供使用的步骤。如果您想在自己的自定义步骤中使用这些步骤,您可以使用两种方法。

script:
  - condition: TESTS=='trial'
    step: !Trial
        name: trial
        tests: buildbot.test

默认情况下,buildbot.plugins.steps模块中的所有Buildbot步骤都是可用的。如果您想使用您自己的自定义步骤,您可以使用两种方法实现。

  • 创建一个Buildbot 插件。如果它在您的master虚拟环境中安装并识别为buildbot.plugins.steps中的内容,它将在buildbot_travis yaml解析器中可用。

  • 如果您想在master.cfg中直接定义自己的步骤,您需要在yaml解析器中直接注册您的步骤。

from buildbot_travis.travisyml import registerStepClass

class FancyStep(steps.ShellSequence):
    ...

registerStepClass("FancyStep", FancyStep)

然后在您的yaml中

script:
  - step: !FancyStep
script:
  - step: !ShellCommand "true"

  - step: !ShellCommand
        - "true"

  - step: !ShellCommand
        command: "true"

状态上下文

如果指定了github_token,bbtravis将为矩阵中的每个构建创建一个github状态,并提供到子构建的直接链接。状态的名称(即上下文)是通过项目配置的reporter_context计算的。默认值为"bb%(prop:matrix_label:+/)s%(prop:matrix_label)s"

matrix_label由触发步骤计算,是矩阵的键和值的连接。因为矩阵可能很大,而github上下文大小有限,bbtravis实现了一种让项目为标签定义缩写的方法。例如,bbtravis.yml如下所示

language: python

label_mapping:
  TWISTED: tw
  SQLALCHEMY: sqla
  SQLALCHEMY_MIGRATE: sqlam
  latest: l
  python: py

将生成如下上下文:bb/py:2.6/sqla:l/sqlam:0.7.1/tw:11.1.0

安装依赖项

使用的Docker镜像是一次性的,并且每个构建都将从干净的状态开始。

您可以创建一个具有无密码sudo的Docker镜像,就像travis一样,这样您就可以使用apt-get

before_install:
  - sudo apt-get update
  - sudo apt-get install -y -q mydependency

但是,提供一个包含所需内容的预构建Docker镜像是一种更好的做法,并且更优化。

环境

您可能想要构建同一软件的多个版本。Travis提供了

env:
 - FLAVOUR=blue
 - FLAVOUR=green
 - FLAVOUR=red

install:
  - ./configure -f $FLAVOUR
  - ./bin/buildout

对这个代码库的提交将触发对蓝色、绿色和红色版本的构建。环境变量可以在您从.travis.yml运行的脚本中像普通环境变量一样使用,也可以在.travis.yml本身中使用。

env是一系列环境变量。您可以在一行中指定多个变量,如下所示

env:
 - PROP1=foo PROP2=bar

构建矩阵

您在languageenv上的选项创建了一个隐含的构建矩阵。构建矩阵是所有可能的env选项和语言版本的组合集。您可以排除某些组合或插入额外的组合来微调此矩阵。

以下是一个排除组合和插入额外构建的示例

python:
  - 2.6
  - 2.7

env:
  - FLAVOUR=apple
  - FLAVOUR=orange

matrix:
  exclude:
    - python: 2.7
      env: FLAVOUR=orange
  include:
    - python: 2.7
      env: FLAVOUR=banana

这将为banana构建执行额外的构建,但仅针对python 2.7。并且它将关闭对orange版本的构建,再次仅针对python 2.7。

部署

左侧菜单中有一个Deploy部分。在这个部分中,一旦配置,将提供部署仪表板。

此仪表板实现了一个从提交到生产环境的自动化交付流程,用户只需点击一下即可获得您项目的最新版本。

以下是一个仪表板的模板

可交付成果

阶段

(项目)

提交

开发

质量保证

生产

可交付成果A

GIT修订版本

1.2.3

GIT标签

GIT标签

例如,可交付成果A的版本1.2.3(通过GIT标签指定)已部署到开发阶段。

以下是设置Buildbot Travis中的部署仪表板的5个步骤。

  1. 在“设置”部分有一个可用的“部署”部分。在这个部分中,“部署环境”是交付物将要部署的目标环境(或阶段)的列表。这些环境应该按照您的开发流程定义进行排序。示例:

    COMMIT (merged dev), DEV, QA, PROD
    BEWARE!The first column is reserved for COMMIT stage so you do not need to define it in the Stages list.
  2. 转到左侧菜单中的“部署”部分。您应该看到一个类似于上面的部署仪表板。阶段应该与1)中定义的阶段相同。

  3. 转到“设置/项目”部分。在不同的项目中,将相应的阶段添加到阶段字段中。阶段可以是2)中定义的阶段的一个子集。

  4. 您应该看到一个完全配置的部署仪表板,其中包含所有交付物、阶段、GIT修订和GIT标签。GIT修订和GIT标签可用在下拉列表中。当您选择特定版本时,会弹出一个窗口来在特定阶段启动部署过程。

  5. 要启用按钮部署,您需要定义部署过程。创建部署脚本并更新每个交付物的.travis.yml文件的脚本和/或after_script部分。

    示例

    after_script:
       - |
         # Deployment
           python ./deploy.py --repo "${repository}" --stage "${stage}" --version "${version}";
    
           ${repository} is the URL of the project's (or deliverable's) repo.
           ${stage} is the retrieved from the Deployment dashboard.
           ${version} is retrieved from the Deployment dashboard.

它的工作原理

基本行为是

  • 提交被选中(默认为轮询,通过/change_hook/poller?poller=pollername网络钩子提供额外的触发器)

  • 在“孵化器”构建器上安排构建 - 这是一个配置为使用普通奴隶的构建器

  • 发生检出 - 用于获取.travis.yml,而不是实际执行构建

  • “孵化器”在每个环境中触发构建,这些环境在.travis.yml中定义的构建矩阵中

  • “作业”构建器在干净的潜在构建奴隶(VM或docker)中进行单个构建

  • setup-steps步骤根据.travis.yml的内容动态添加ShellCommand步骤

  • 当作业完成后,VM或容器会被丢弃。

  • “孵化器”构建器作为汇总构建结果的手段。

  • MailNotifier子类使用构建历史中找到的.travis.yml,以便可以相应地调整接收者列表和是否发送邮件。XXX:这需要适应九

命令行

buildbot_travis包附带一个bbtravis命令行实用程序。

此实用程序非常有用,可以在不将其推送到CI的情况下在本地测试travis.yml。它允许测试travis.yml和用于运行工作者的docker镜像。它允许仅运行您正在工作的矩阵部分

示例

bbtravis run -d tardyp/metabbotcfg  -j8 TESTS=trial TWISTED=latest

这将并行运行由标记为tardyp/metabbotcfg的docker镜像产生的结果测试,并且仅筛选TESTS==‘trial’和TWISTED==‘latest’的矩阵环境

UI使用urwid控制台UI框架,并将终端分割成几个终端,显示每个矩阵运行。您可以使用鼠标滚轮进行滚动,并点击以放大并获取更多详细信息。

待办事项

这个特殊分支是buildbot_travis的九端口。与之前的版本相比,以下功能尚未提供

  • 自定义MailNotifier需要适应九数据API,以便获取.travis.yml配置

  • mergerequest应该适应新的collapseRequest API

  • SVN应当得到验证(迄今为止仅测试了git)

  • metric功能实际上并不是针对travis的,而应该在buildbot master中直接提供

  • nextBuild功能应重新实现:在没有“-job”奴隶可用时允许避免运行孵化器

与原始Travis格式相比,以下是一个不完全支持的功能列表

  • after_success, after_failure。尚未实现,但很容易添加。

  • deploy。部署步骤必须在所有矩阵子构建成功后执行

并在默认hyper worker中配置您的hyper密钥。您还应该配置一个身份验证插件以保护这些密钥。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

buildbot_travis-0.6.4.tar.gz (352.8 kB 查看散列)

上传时间 源代码

构建分发

buildbot_travis-0.6.4-py2.py3-none-any.whl (371.9 kB 查看散列)

上传时间 Python 2 Python 3

支持者