基于Jenkins框架Tizen镜像的一键创建

简介

本文提供从GBS 0.21版本开始支持的GBS Jenkins jobs的综合信息,包含以下内容:

  • GBS 本地编译
  • 列表方式进行本地编译

主要包含以下几个方面:

  • 概述
  • 准备工作
  • 部署说明
  • 具体说明
  • 配置数据

概述

GBS Jenkins jobs为小团队更加高效的编译,镜像创建提供一个自动化方案。

只用在job web的图形界面上点击几个按钮就可以创建镜像,并同步到仓库和镜像下载服务器中,这样就不用开发者在本地手动编译和创建镜像了,因此提高了团队工作效率。

准备工作

GBS Jenkins jobs基于Jenkins框架,所以它需要一台主编译器和一些从编译器。 从编译器的个数由开发团队的规模和编译工作的频率而定。

具体到我们的情况,具体要求如下:

:主从节点都是逻辑概念,因此可以同时建在一台机器上。

  • 一个Jenkins主节点
  • 多个Jenkins从节点
  • 一个专门用作下载服务器的机器

下载服务器不用连接到Jenkins主节点,但是远程同步和SSH必须要正确配置,确保所有的从编译器可以更新编译结果到下载服务器上。

部署说明

本节介绍如何部署GBS Jenkins jobs

安装和配置Jenkins的主从编译器

Jenkins主从编译器需要提前准备好。

更多关于GBS Jenkins jobs的系统支持信息,请参考支持的发行版

更多Jenkins主从编译器的安装信息,请参考以下内容:

Jenkins的主编译器的额外配置:

  • Configure Markup Fromatter: 该设置为Jenkins 1.553版本以后需要。 有一些用于gbs jenkins job和参数的RAW HTML数据,需要jenkins支持。 在jenkins主编译器的主页中的具体步骤是:Manage Jenkins => Configure Global Security => Enable security => Markup Fromatter,选择 Raw HTML。
  • Global Proxy:如果需要代理,推荐在Jenkins主编译器中设置,具体的设置页面是:Manage Jenkins => Configure System => Global Properties =>Environment variables添加代理,如http_proxy, https_proxy, no_proxy等。

Jenkins从编译器的额外配置:

  • sudoer Setting:gbs jenkins脚本需要对gbs build和镜像创建使用sudo 操作,jenkins job要jenkins用户运行,该用户是在安jenkins时自动创建的,所以需要把jenkins用户加入/etc/sudoers和/etc/sudoers.d/。
  • Tizen开发环境设置:首先,确保ssh <alias_of_git_server> 可以正常工作,其次,通过GBS Jenkins脚本下载并安装工具

部署GBS Jenkins Jobs

照开发工具安装文档,gbs-jenkins-job(主节点)和gbs-jenkins-scripts (所有编译节点)也是从Tizen工具仓库中安装。

以openSUSE 12.3为例,执行以下命令部署GBS Jenkins jobs

$ sudo zypper addrepo http://download.tizen.org/tools/latest-release/openSUSE_12.3/ tools
$ sudo zypper refresh
$ sudo zypper install gbs-jenkins-jobs    # for jenkins master
$ sudo zypper install gbs-jenkins-scripts  # for jenkins slave nodes

装后,Jenkins主节点需要重新启动,重新加载所有GBS Jenkins jobs。 成功重载后,以下两个工作可以正常进行了:

  • GBS 本地编译
  • 列表方式进行本地编译

工作说明:

GBS Jenkins jobs由以下两部分组成:

  • GBS本地编译:用于Tizen编译,镜像创建和编译结果发布。
  • 列表化本地编译:根据用户自定义进行部分软件包的编译。

GBS本地编译说明

这项工作是基于repo和GBS的Tizen安装包的译,像的创建和编译结果的发布设计的。 可以配置成定期或者手动触发的方式运行。

使能发布功能,包括编译报告,仓库和镜像的编译结果都会同步到相应的下载服务器上。

使用该功能前,强烈建议先理解手动从Scratch创建Tizen镜像的方法。

支持的选项如下:

MANIFEST_URL

这个选项指定manifest路径地址,该地址在仓库的命令中会使用到。例如,tizen:scm/manifest, scm/manifest 是远程tizen.orgGerrit中manifest路径,然而tizen在 ~/.ssh/config种是一个别名, ~/.ssh/config范例如下:

Host tizen review.tizen.org
Hostname review.tizen.org
Port 29418
User <username>
#ProxyCommand connect -S <proxy>:<port> %h %p
MANIFEST_BRANCHES
该参数指定用于代码同的manifest分支,会直传递给repo命令。
PROFILE
该参数指定用于编译的profile,现在的有效值是IVI和Mobile
ARCH
该参数指定编译架构,当前可选的有效值是i586和armv7l。
REMOTE_REPOS (可选)
该参数指定编译过程中获取安装包的远程仓库。 有效的远程仓库必须包含tizen仓库数据,包括编译数据,镜像和仓库等,例如:http://download.tizen.org/releases/daily/tizen/ivi/ivi/tizen_20140305.14/
PARALEL_THREADS
该参数指定可以有多少个编译节点可以同时运行。 有效值是非负整数。
EXCLUDE_PACKAGES
该参数指定编译时哪些包不被包含。 该参数可以防止循环依赖。 多个包名需要使用逗号分开。
BUILD_ARGS
该参数指定更多GBS编译参数,可以传递到gbs build命令中。 支持多个GBS参数,不同的参数之间需要使用空格进行分隔,更多关于gbs build参数,请参考gbs build使用
PUBLISH
该参数使能包括编译报告,镜像和仓库的编译结果的发布。
PUBLISH_URL
该参数指定编译结果发布的URL。 PUBLISH_URL的格式必须和rsync的格式一致,可以是本地或者远程URL,例如:user@hostname:/path/to/publish_dir

列表化本地编译的说明

编译用户自定义的部分软件包,也就是说,开发者可以指定一个包含远程仓库上已经更新的软件包的列表,检查最终的镜像基于这些改变是否能工作正常。

想使用该功能,必须要指定一个远程仓库,GBS需要的编译包和MIC需要的ks文件可以从这个仓库中获得。

远程仓库的例子如下:

http://download.tizen.org/releases/daily/tizen/ivi/ivi/tizen_20140212.7/

大部分的配置参数和GBS本地编译时一样的,额外的如下:

KS
该参数指定MIC使用哪个ks文件进行创建镜像。 有效值需要包含指定的远程仓库。 也支持ks文件列表,ks文件名之间使用空格分隔。
BUILD_RDEPS
该参数使能编译依赖,也就是说,有编译依赖的包会按照真确的依赖顺序进行编译。
PACKAGE_LIST
该选项指定需要编译的包列表,以行的形式列出来。 格式必须是远程Gerrit上的全路径。

更多信息请参考Jenkins job 页面。

配置数据

以上介绍的两种Jenkins工作都是最基础的,用户可以克隆他们,并创建新的工作。 例如,GBS本地编译可以被克隆,用于每天测试不同的profile(IVI/Mobile/PC)。 对于不同的新jobs,用户可以配置默认的MANIFEST_BRANCHESPROFILE

更多高级配置

  • 配置编译触发

    Jenkins jobs支持编译触发,配置步骤如下:

    1. 进入指定的GBS Jenkins jobs主页。
    2. 点击配置页面左上角的配置按钮。
    3. 找到编译触发,选择并设置自己需要的。

    例如,选择期编译,设置计划值来使能周期计划任务。 点击配置页中的帮助按钮,寻找帮助信息。

  • 编译环境

    Jenkins支持从MANIFEST_URL中定义的Gerrit或者Git服务器中下载源代码。 配置的时候,要确保编译从节点的SSH私钥和网络设置。 另一种方法,如下所示:

    添加证书并安装SSH代理Jenkins插件,然后在编译环境中添加你的证书。

    GBS的输出信息支持彩色打印。 为了支持彩色打印,需要安装 AnsiColor Jenkins 插件。 该插件支持Ansi转移序列和彩色打印。

  • 配置编译从节点

    Jenkins jobs默认在Jenkins主节点上运行。 添加一个从节点,并让Jenkins jobs在从节点上运行。 步骤如下:

    1. 照Jenkins document为Jenkins主节点添加编译从节点,并记下节点标签。
    2. Jenkins job的Configure按钮进入配置界面。
    3. 索Restrict where this project can be run,然后输入运行GBS Jenkins jobs的从节点的标签。
    4. 点击保存和接受
  • 为每个Jenkins Jobs设置默认值

    GBS Jenkins Jobs需要很多参数,所以一旦Jenkins jobs被成功安装,最好为大部分参数设置默认值,这样可以节省用户在设置时的重复手动设置。 如果工作是周期运行的,这个默认配置就是必须的了。