简介 ​

统一构建平台是一款软件包构建平台,实现从源码到二进制软件包与软件仓库的平台服务。该平台通过统一的软件包配置管理,软件包依赖关系分析,实现基于依赖关系的软件包高效构建。帮助开发者与合作伙伴建设自己的用户个人仓,OS核心仓,构建门禁能力。

快速入门 ​

用户注册 ​

登录注册流程 ​

地址:https://eulermaker.compass-ci.openeuler.openatom.cn,访问前需添加白名单。

  1. 登录
    首页右上角点击“登录”,跳转至openEuler社区登录页面。 image 输入openEuler社区帐号用户名、密码。 image openEuler授权成功后,根据用户是否已经绑定eulermaker帐号,跳转页面。
    • 已绑定:页面返回首页 image
    • 未绑定:页面跳转至帐号注册页面,填写用户信息,完成注册。 image

创建工程 ​

  1. 创建project
    首页点击“all projects”的view按钮,跳转页面到projects总体页面。 image 切换至Private Projects页签点击"Add project"按钮,填写project工程基本信息,完成创建。 image

  2. 查看新建的project
    成功新建project工程后,点击private projects中该工程名,页面跳转至project overview页面。

添加package ​

点击“add package”按钮,输入package信息,添加package。 image

工程配置 ​

  1. 点击"config"tab栏, 跳转至project config页面。
  2. 此页面可编辑build targets、flags、publish、config等工程配置信息。config支持yaml格式输入,配置使能开关。 image

继承工程 ​

  1. 工程继承
    project overview页面点击"inherit Project"按钮,填写继承项目名称,完成继承项目创建。页面跳转至继承工程overview页面,项目继承只继承父项目工程配置信息。 image

  2. 包继承
    package overview页面点击"Branch Package"按钮,弹窗中默认显示包继承项目信息,完成继承项目创建。页面跳转至继承工程overview页面,包继承会继承父项目工程配置信息及该软件包。 image

创建构建任务 ​

单包构建

  1. 在project overview页面Packages列表中选择需要构建的包,点击包名进入package overview页面。
  2. Package overview页面Git Repo中可修改Git Url及Branch。
  3. 在build targets中完成构建设置,Os_variant设置构建任务执行环境,Arch设置执行机架构,Ground projects地基项目选择,Build Flag设置是否构建,Publish Flag设置是否发布,Operation列可对已添加数据进行修改及删除。
  4. 点击start Build按钮。 image
  5. 切换至build tab页中可查看该构建任务执行情况,也可返回该项目build tab中查看构建状态。

全量构建

  1. 在project overview页面点击Full build按钮,可触发全量构建。 image
  2. 切换至project build页面,点击build information列表中选择需要查看的build_id,右侧Details中展示该构建任务中待构建包列表及构建状态,点击上方export按钮可将待构建包列表导出为xlsx文件。

增量构建

  1. 在project overview页面点击Incremental build按钮,可触发增量构建。 image
  2. 切换至project build 页面,点击build information列表中选择需要查看的build_id,右侧Details中展示该构建任务中待构建包列表及构建状态,点击上方export按钮可将待构建包列表导出为xlsx文件。

构建历史查看 ​

工程构建历史查看

  1. 在project overview页面点击构建历史页面,可查看该工程历史构建任务及构建详情。 image
  2. 点击构建历史中任意一条构建ID,页面右侧显示该次构建任务构建包的spec名称,状态,构建详情。 image
  3. 点击构建详情页面DAG关系表按钮,可查看本次构建任务依赖关系及构建相关信息。 image

获取软件包 ​

  1. 在project overview页面Packages列表中选择需要下载的包,点击包名进入package overview页面。
  2. 切换至Download tab页,该页面展示最新构建出的软件包,点击Download 按钮下载包,点击View Details查看软件包详情。 image

镜像定制 ​

添加流水线 ​

创建流水线

  1. 首页点击“镜像定制”的查看按钮,跳转页面到流水线列表总体页面。

    image

  2. 点击“添加流水线”功能按钮,填写流水线工程页面基本信息,流水线类型可选择版本镜像及镜像定制两种类型,点击确认按钮完成创建。

    image

查看新建的流水线工程
成功新建流水线工程后,点击创建后的流水线名称,页面跳转至流水线详情页面。

image

版本镜像类型 ​

版本参数配置 ​

  1. 点击“版本参数配置”框,右侧跳转至版本参数配置页面,点击“修改”按钮,添加版本参数配置信息,其中表单字段校验规则如下: image
表单字段校验规则
repo源地址地址长度小于1000,且配置多个repo源时用空格分割
镜像类型只针对iso镜像,必填选择框
产品名称只允许字母数字,且“产品名称-版本号[-Release号]-架构”的字符个数不超过32
版本号只允许字母数字和“-”和“.”,必须字母或数字开头,且“产品名称-版本号[-Release号]-架构”的字符个数不超过32
Release号可缺省,若填写,则规则与版本号相同

镜像定制类型 ​

定制业务包 ​

iso/cpio格式 ​
  1. 点击创建好的镜像定制类型流水线名称,进入流水线详情。

  2. 点击定制业务包按钮,右边切换至定制业务包界面,界面如下图,点击修改按钮进入修改界面。 image

  3. 填写产品名称,填写安装镜像时的所展示的产品名称。

  4. 配置内核参数,为了系统能够更稳定高效地运行,用户可以根据需要修改内核命令行参数,多个参数使用空格分隔。
    例如:"net.ifnames=0 biosdevname=0 crashkernel=512M oops=panic softlockup_panic=1 reserve_kbox_mem=16M crash_kexec_post_notifiers panic=3 console=tty0"

  5. 添加repo源,输入需要添加rpm包的repo源的正确url地址。

  6. 添加rpm包:配置好正确的repo源后,点击添加按钮,弹出添加rpm包弹窗,勾选需要的rpm包,也可以通过弹窗右上角搜索需要的rpm包,点击确认即可保存。若要删除已添加的rpm包,点击rpm包表格操作列的移除或者勾选需要删除的rpm包,点击批量移除按钮即可。 image

  7. 添加驱动:填写驱动文件路径及文件名,多个以空格分隔,可选填。

  8. 添加命令:填写系统命令,多个以空格分隔,可选填。

  9. 添加库文件:填写库文件名称,多个以空格分隔,可选填。

  10. 删除其他文件:填写需要删除的文件路径及文件名,多个以空格分隔,可选填。

  11. 配置分区:点击加号图标,新增一条配置分区,根据需要填写以下配置。 image

    • 磁盘索引:磁盘的编号,请按照hdx的格式填写,x指第x块盘。
    • 挂载目录:指定分区挂载的路径。用户既可以配置业务分区,也可以对默认配置中的系统分区进行调整。
    • 分区大小:分区大小的取值有四种,可通过点击单位按钮来更换,最大上限为16T。其中MAX为指定将硬盘上剩余的空间全部用来创建一个分区,只能在最后一个分区配置该值。
    • 分区类型:分区有三种,主分区:primary;扩展分区:extended(该分区只需配置hd磁盘号即可);逻辑分区:logical。
    • 分区文件系统类型:目前支持的文件系统类型有:ext4、vfat。
    • 是否二次格式化:表示二次安装时是否格式化,选择是或否。
  12. 配置网络:点击加号图标,新增一条配置网络,根据需要填写以下配置。
    image

    • BOOTPROTO:none:引导时不使用协议,不配地址;static:静态分配地址;dhcp:使用DHCP协议动态获取地址。
    • DEVICE:网卡名称,如eth0。
    • IPADDR:IP地址。当BOOTPROTO参数为static时,该参数必配,如:192.168.11.100;其他情况下,该参数不用配置。
    • NETMASK:子网掩码。当BOOTPROTO参数为static时,该参数必配,如:255.255.255.0;其他情况下,该参数不用配置。
    • STARTMODE:启用网卡的方法。manual:用户在终端执行ifup命令启用网卡。auto\hotplug\ifplugd\nfsroot:当OS识别到该网卡时,便启用该网卡。off:任何情况下,网卡都无法被启用。
  13. 添加用户自定义文件:点击加号图标,弹出文件管理器弹窗,选择需要上传的文件,点击打开按钮即可上传,上传成功后状态变为成功,并且需要填写目标存放路径。若要删除文件,点击操作列的删除字段即可。

    注:用户自定义文件上传大小不得超过16M

  14. 添加hook脚本:点击加号图标,弹出文件管理器弹窗,选择需要上传的hook脚本文件,文件名称需符合“S+数字(至少两位,个位数以0开头)”开头,数字代表hook脚本的执行顺序(脚本名称示例:S01xxx.sh),点击打开按钮即可上传,上传成功后状态变为成功,并且需要选择hook脚本存放的子目录。若要删除文件,点击操作列的删除字段即可。

    注:hook脚本上传文件大小不得超过16M

    image

  15. 填好各项配置后,点击右上角保存按钮。

docker/mini_docker/mini_cpio/iso_normal/qcow2格式 ​
  1. 点击创建好的镜像定制类型流水线名称,进入流水线详情。
  2. 点击定制业务包按钮,右边切换至定制业务包界面,界面如下图,点击修改按钮进入修改界面。 image
  3. 添加repo源,输入需要添加rpm包的repo源的正确url地址。
  4. 添加rpm包:配置好正确的repo源后,点击添加按钮,弹出添加rpm包弹窗,勾选需要的rpm包,也可以通过弹窗右上角搜索需要的rpm包,点击确认即可保存。若要删除已添加的rpm包,点击rpm包表格操作列的移除或者勾选需要删除的rpm包,点击批量移除按钮即可。 image
  5. 填好各项配置后,点击右上角保存按钮。

配置系统参数 ​

  1. 只有iso/cpio格式需要配置系统参数。
  2. 进入创建好的流水线后,点击配置系统参数按钮,右边切换至配置系统参数界面,点击修改按钮进入修改界面。 image
  3. 配置主机参数:根据需要填写或选择相关参数,其中主机名为字母、数字、“-”的组合,首字母必须是字母或数字。 image
  4. 配置root初始密码:【密码校验格式】,两次需保持一致,可点击右边可视图标观测输入密码。
  5. 配置grub初始密码:【密码校验格式】,两次需保持一致,可点击右边可视图标观测输入密码。 image
  6. 填好各项配置后,点击右上角保存按钮。

制作系统 ​

点击“制作系统”框,右侧自动跳转至制作系统页面,点击下方镜像构建按钮,弹出构建弹窗,点击确认按钮,页面显示相应的构建状态以及相关构建日志。 image

镜像下载及构建日志查询 ​

  1. 方法一:镜像构建完成后,点击流水线中制作系统页面,下方显示构建日志信息,点击镜像下载按钮,将镜像下载至本地。 image

  2. 方法二:镜像构建完成后,点击流水线中的构建历史页面,操作栏显示镜像下载、查看日志选项。点击查看日志可进入构建日志页面。点击镜像下载按钮,将镜像下载至本地。 image

构建历史 ​

  1. 在流水线详情页面,点击构建历史,跳转至流水线构建历史页面。 image

  2. 根据该页面查看流水线历史的镜像构建信息以及相关的镜像和构建日志。 image

用户管理 ​

  1. 在流水线详情页面,点击用户管理,跳转至流水线用户管理页面。 image

  2. 点击“添加用户”按钮,填写相关用户名称,并设置相应的用户权限(Maintainer/Reader)。 image

流水线工程克隆 ​

  1. 点击需要克隆的流水线,进入到流水线详情页面,点击下方“克隆按钮”,填写或选择克隆流水线分组,填写新流水线名称后,点击确认按钮,完成流水线克隆。 image

  2. 页面跳转至克隆的流水线详情页面,流水线克隆了相应的配置参数信息。

删除流水线 ​

点击需要删除的流水线,进入到流水线详情页面,点击下方“删除按钮”,弹出确认窗口,点击确认按钮,删除整条流水线,包括相关构建的镜像。 image

基于命令行进行构建 ​

本地安装EulerMaker客户端 ​

EulerMaker将lkp-tests作为客户端,通过本地安装lkp-tests,lkp-tests提交任务依赖ruby,建议安装ruby2.5及以上版本。

下载安装 lkp-tests ​

运行以下命令安装/设置lkp-test:

shell
    git clone https://atomgit.com/cicd-sig/lkp-tests.git
    cd lkp-tests
    make install
    source ~/.${SHELL##*/}rc

配置文件 ​

本地配置文件配置用户名, 密码、网关等信息:

  • #{ENV['HOME']}/.config/cli/defaults/*.yaml 优先
yaml
    GATEWAY_IP: xxx
    GATEWAY_PORT: xxx
    SRV_HTTP_REPOSITORIES_HOST: xxx
    SRV_HTTP_REPOSITORIES_PORT: xxx
    SRV_HTTP_REPOSITORIES_PROTOCOL: xxx
    SRV_HTTP_RESULT_HOST: xxx
    SRV_HTTP_RESULT_PORT: xxx
    SRV_HTTP_RESULT_PROTOCOL: xxx
    DAG_HOST: xxx
    DAG_PORT: xxx
    ACCOUNT: xx
    PASSWORD: xx
    OAUTH_TOKEN_URL: https://omapi.osinfra.cn/oneid/oidc/token
    OAUTH_REDIRECT_URL: xx
    PUBLIC_KEY_URL: xx

其中网关GATEWAY_IP和GATEWAY_PORT必须配置; gitee帐号GITEE_ID和GITEE_PASSWORD若不配置只能执行游客可执行的命令; SRV_HTTP_RESULT_HOST,SRV_HTTP_RESULT_PORT是存储job日志的微服务,和SRV_HTTP_RESULT_PROTOCOL仅用于ccb log子命令;SRV_HTTP_REPOSITORIES_HOST和SRV_HTTP_REPOSITORIES_PORT是repo源,和SRV_HTTP_REPOSITORIES_PROTOCOL仅用于ccb download子命令,若无下载需求,可以不配置。

配置完成后可执行以下命令,查看是否可以正常使用ccb命令。

shell
ccb -h/--help

CLI 客户端 ​

命令总览 ​

txt
# CRUD
# Elasticsearch 7.x文档基本操作(CRUD) 
 https://www.cnblogs.com/liugp/p/11848408.html
 Elasticsearch CRUD基本操作
 https://www.cnblogs.com/powercto/p/14438907.html

ccb create <index> <os_project> k=v|--json JSON|--yaml YAML # Details see "ccb create -h".
ccb update <index> <os_project> k=v|--json JSON|--yaml YAML

ccb select <index> <os_project> k=v|--json JSON-file|--yaml YAML-file [-f/--field key1,key2...]
              [-s/--sort key1:asc/desc,key2:asc/desc...]
ccb download os_project=<project_name> packages=<package_name> architecture=x86/aarch64 [--sub] [--source] [--debuginfo]
ccb cancel $build_id
ccb log <job_id>
ccb build-single os_project=<project_name> packages=<package_name> k=v|--json JSON-file|--yaml YAML-file

命令详情 ​

1. ccb select查询各表信息 ​

查询所有的projects全部信息

shell
ccb select projects

注意: rpms和rpm_repos,这两个表由于数据量过大,无法通过ccb select 表名命令直接查询该表的全部信息, 查询rpms表必须使用-f指定过滤字段或者使用key=value指定明确的过滤条件。

shell
ccb select rpms -f repo_id
ccb select rpms repo_id=openEuler-24.03-LTS:baseos-openEuler:24.03-LTS-x86_64-313

查询rpm_repos表必须使用key=value指定明确的过滤条件,如果不知道value的值,可以先查询其他表获取,然后再使用key=value查询rpm_repos表。

shell
ccb select builds -f repo_id  # 先查询builds获得repo_id值
ccb select rpm_repos repo_id=openEuler-24.03-LTS:baseos-openEuler:24.03-LTS-x86_64-313 # 使用上个命令获得的repo_id值查询rpm_repos表

查询符合要求的projects的全部信息

shell
ccb select projects os_project=openEuler:Mainline owner=xxx

查询符合要求的projects的部分信息

shell
ccb select projects os_project=openEuler:Mainline --field os_project,users

查询符合要求的projects的部分信息并排序

shell
ccb select projects os_project=openEuler:Mainline --field os_project,users --sort create_time:desc,os_project:asc

列出指定project的所有snapshot

shell
ccb select snapshots os_project=openEuler:Mainline

注:查看其他表类似

2. ccb create project ​

创建project

json
ccb create projects test-project --json config.json
config.json:
{
    "os_project": "test-project",
    "descrption": "this is a private project of zhangshan",
    "my_specs": [
        {
            "spec_name": "gcc",
            "spec_url": "https://atomgit.com/src-openEuler/gcc.git",
            "spec_branch": "openEuler-24.03-LTS"
        },
        {
            "spec_name": "python-flask",
            "spec_url": "https://atomgit.com/src-openEuler/python-flask.git",
            "spec_branch": "openEuler-24.03-LTS"
        }
    ],
    "build_targets": [
        {
            "os_variant": "openEuler_24.03",
            "architecture": "x86_64"
        },
        {
            "os_variant": "openEuler_24.03",
            "architecture": "aarch64"
        }
    ],
    "flags": {
        "build": true,
        "publish": true
    }
}

3. ccb update projects $os_project ​

project添加package

json
ccb update projects $os_project --json update.json
update.json:
{
    "my_specs+": [
        {
         "spec_name": <package-name>,
      "spec_url": <some-url>,
      "spec_branch": <some-branch>
        },
        ...
    ]
}

project增删user

json
ccb update projects $os_project --json update.json
update.json:
{
    "users-": ["zhangsan"],
    "users+": {
        "lisi": "reader",
     "wangwu": "maintainer"
    }
}

锁定某个package

shell
ccb update projects test-project package_overrides.$package.lock=true

解锁某个package

shell
ccb update projects test-project package_overrides.$package.lock=false

4. 单包构建 ​

build_targets可以不传,可以有1或多个,如果不传,采用os_project默认配置的build_targets。

json
ccb build-single os_project=test-project packages=gcc --json build_targets.json
build_targets.json:
{
    "build_targets": [
        {
            "os_variant": "openEuler:24.03",
            "architecture": "x86_64"
        },
        {
            "os_variant": "openEuler:24.03",
            "architecture": "aarch64"
        }
    ]
}

5. 全量/增量构建 ​

指定build_type=full则为全量构建,指定build_type=incremental则为增量构建; build_targets参数与单包构建中的build_targets一样,可以不传,可以有1或多个,如果不传,采用os_project默认配置的build_targets; 如果指定snapshot_id,则os_project可不传,表示基于某个历史快照创建全量/增量构建。

json
ccb build os_project=test-project build_type=full --json build_targets.json # 全量构建
ccb build snapshot_id=xxx build_type=incremental --json build_targets.json # 增量构建
build_targets.json: 
{
    "build_targets": [
        {
            "os_variant": "openEuler:24.03",
            "architecture": "x86_64"
        },
        {
            "os_variant": "openEuler:24.03",
            "architecture": "aarch64"
        }
    ]
}

6. 下载软件包 ​

如果指定snapshot_id,则os_project可不传; dest表示指定软件包下载后存放的路径,可不传,默认使用当前路径。

基本用法 ​

shell
ccb download os_project=test-project packages=python-flask architecture=aarch64 dest=/tmp/rpm
ccb download snapshot_id=123456 packages=python-flask architecture=aarch64 dest=/tmp/rpm

-s的用法 ​

shell
# 使用-s 表示下载该packages的源码包。示例如下所示:
ccb download os_project=test-project packages=python-flask architecture=aarch64 -s

-d的用法 ​

shell
# 使用-d 表示下载该packages的debug(debuginfo和debugsource)包。示例如下所示:
ccb download os_project=test-project packages=python-flask architecture=aarch64 -d

-b的用法 ​

shell
# 使用-b all 表示下载该packages的所有子包。示例如下所示:
ccb download os_project=test-project packages=python-flask architecture=aarch64 -b all

# 使用-b $rpm 表示下载该packages的指定子包$rpm,指定多个子包以逗号分隔。示例如下所示:
ccb download os_project=test-project packages=python-flask architecture=aarch64 -b python2-flask
ccb download os_project=test-project packages=python-flask architecture=aarch64 -b python2-flask,python3-flask

-s -d -b 组合使用 ​

shell
# 使用-b all -s -d 表示下载该packages的debug包,源码包和所有子包。示例如下所示:
ccb download os_project=test-project packages=python-flask architecture=aarch64 -b all -s -d

# 使用-b $rpm -s -d 表示下载该packages的debug包,源码包和指定子包(指定多个子包以逗号分隔)。示例如下所示:
ccb download os_project=test-project packages=python-flask architecture=aarch64 -b python2-flask -s -d
ccb download os_project=test-project packages=python-flask architecture=aarch64 -b python2-flask,python3-flask -s -d

7. cancel 取消构建任务 ​

shell
ccb cancel $build_id

8. 查看job日志 ​

shell
ccb log <job_id>

概念/术语 ​

术语含义
project一组包的集合,其中包含build_target配置,软件包的git_url配置
build_target指定构建目标,包含目标的os系统及版本,cpu架构
package软件包,使用spec_name来标识,一个package会生成一个或多个rpm。
snapshotproject的快照,将记录当前时刻下,各个软件包的commit_id,以及依赖project的snapshot,保障构建一个包所需要的依赖固定,snapshot_id全局唯一
build对project的构建任务,基于snapshot来创建,每个build_target会生成一个build,build_id全局唯一
job每一次build任务会生成一个或多个job,每个job对应一个软件包的构建
build_single单包构建
build_type构建类型,可指定为full/incremental