在Buildbot中实现了Travis CI
项目描述
这是一个设置Buildbot步骤、工厂和配置助手,使您获得Buildbot和Travis CI的最佳体验
与源代码一起存在的构建配置
私有构建
非github版本控制系统支持(gerrit,gitlab,github,github企业版)
在您自己的基础设施上无限并行化构建
基本上,我们提供了一个兼容层,允许Buildbot消耗一个 .travis.yml 文件。
但buildbot_travis不支持完整的.travis.yml格式。
快速入门
首先,您需要确保您有合适的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步骤。
请参阅以下详细说明。如果已定义,则忽略shell、title和cmd键。
.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
构建矩阵
您在language和env上的选项创建了一个隐含的构建矩阵。构建矩阵是所有可能的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个步骤。
在“设置”部分有一个可用的“部署”部分。在这个部分中,“部署环境”是交付物将要部署的目标环境(或阶段)的列表。这些环境应该按照您的开发流程定义进行排序。示例:
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.
转到左侧菜单中的“部署”部分。您应该看到一个类似于上面的部署仪表板。阶段应该与1)中定义的阶段相同。
转到“设置/项目”部分。在不同的项目中,将相应的阶段添加到阶段字段中。阶段可以是2)中定义的阶段的一个子集。
您应该看到一个完全配置的部署仪表板,其中包含所有交付物、阶段、GIT修订和GIT标签。GIT修订和GIT标签可用在下拉列表中。当您选择特定版本时,会弹出一个窗口来在特定阶段启动部署过程。
要启用按钮部署,您需要定义部署过程。创建部署脚本并更新每个交付物的.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密钥。您还应该配置一个身份验证插件以保护这些密钥。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。