本文主要介绍 Zadig 的构建模块。

在项目页面中点击构建进入构建的详情页面,按需添加 Zadig 构建或 Jenkins 构建。关于二者的区别如下:

  • Zadig 构建:在 Zadig 平台中定义服务的完整构建过程。
  • Jenkins 构建:关于服务具体的构建过程在 Jenkins 中定义执行,Zadig 中提供入口触发具体的 Jenkins Job,并基于 Jenkins Job 的镜像产物对部署在 Zadig 中的服务进行更新。

如果没有集成 Jenkins,新建构建时默认创建的是 Zadig 构建;如果需要使用 Jenkins 构建,请先集成 Jenkins

创建构建

Zadig 构建

  • 提供模版化构建能力,通过配置构建脚本实现构建过程,简单易用。
  • 整个构建模块包括通用配置、运行时环境、代码库信息、环境变量、构建脚本、镜像构建、二进制包归档和 Shell 脚本,更多细节请阅读定义构建
  • 支持多个服务使用一份构建配置,更多细节请阅读共享构建
  • 支持修改构建交付物的生成规则,更多细节请阅读构建交付物生成规则

定义构建

准备工作

明确构建所需要的依赖,依赖项包括但不限于:

  • 服务编译的代码依赖(比如依赖 Base 库,开源库等)
  • 服务编译的环境依赖(比如 Go 版本、Node 版本、编译工具等)
  • 服务编译的系统依赖(比如操作系统等)

通用配置

构建通用配置

参数说明:

  • 构建名称:构建的名称,有意义便于理解即可。
  • 构建服务:选择使用该构建配置的服务。
  • 构建超时:定义构建执行的超时时间。

运行时环境

配置构建过程运行时的环境。

创建构建

参数说明:

  • 构建系统:平台默认提供 Ubuntu 16.04/Ubuntu 18.04/Ubuntu 20.04 作为基础构建系统。

扩展知识

  1. 支持使用自定义镜像作为构建系统,详情请参阅构建镜像管理

  2. 默认提供的 Ubuntu 系列构建系统中已安装了以下工具/命令,可以在应用安装脚本和构建脚本中直接使用。

    • build-essential
    • cmake
    • curl
    • docker
    • git
    • libfontconfig
    • libfreetype6-dev
    • libpcre3-dev
    • librrd-dev
    • libsasl2-dev
    • netcat-openbsd
    • pkg-config
    • python
    • tar
    • wget
  • 应用列表:构建过程中需要用到的各类工具,比如不同版本的 Java、Go、Govendor、Node、Bower、Yarn、Phantomjs 等等。

扩展知识

  • 选择应用工具的过程中需要注意工具的依赖关系,顺序进行安装。例如:Govendor 依赖 Go,那么必须先选 Go,再选择 Govendor。

  • 平台已内置一些常见的应用,如果有其他应用或者版本需求,系统管理员可以在应用管理中配置应用的安装脚本。

  • 高级配置

    • 集群名称:选择构建任务运行时所使用的集群,其中本地集群指 Zadig 系统所在的集群,关于集群的集成可参考集群管理
    • 命名空间:选择构建任务运行时所使用的 K8s 命名空间。
    • 资源规格:平台提供 高/中/低/最低 四种配置供选择,可以根据实际需要自定义规格。

代码库信息

创建构建

参数说明:

  • 托管平台:代码库所在的平台,目前支持 GitHub、GitLab、Gerrit
  • 代码库拥有者:支持开源库,以及所配置的托管平台下的代码库拥有者
  • 代码库名称:代码库的名称
  • 默认分支:执行工作流时,默认选取的分支,与高级配置中的默认设置配合使用,可以限制每次编译的 Branch
  • Remote name:指定远程仓库名称,默认 origin
  • 克隆目录名:定义代码库被克隆后的目录名称,默认为代码库的名称
  • 子模块:同步 submodule 中配置的代码库
  • 默认设置:开启后,创建工作任务时不提供参数化方式,使用工作流设置中的默认配置执行
  • 主库 :多个代码库构建时,如果该代码库设置为主库,构建产物(镜像、Tar 包等)会使用该库的对应信息命名

提示

  • 指定克隆目录名为 A,则代码库的内容将会被克隆到 $WORKSPACE/A
  • $WORKSPACE 是 Zadig 系统构建模块内置的变量,关于其更详细的描述可阅:系统内置环境变量

环境变量

平台支持用户自定义环境变量,并在构建脚本中使用。

创建构建

说明:

  • 支持使用字符串类型或者枚举类型的环境变量。
  • 可以设置字符串类型的变量为敏感信息。设置为敏感信息后,工作流任务的构建日志中将不会再输出其明文信息。
  • 执行工作流任务时,也可以对自定义环境变量的值进行修改,覆盖此处配置的默认值,如下图所示:

运行工作流时修改环境变量

构建脚本

代码的构建过程可以在构建脚本中声明。

创建构建

构建脚本除了可以使用自定义环境变量外,还可以使用系统内置变量,包括以下变量:

变量名称描述
WORKSPACE当前工作流工作目录
TASK_ID当前工作流任务的 ID,即任务序号
IMAGE输出镜像名称,用于容器服务的部署更新
SERVICE编译的服务名称
PKG_FILE交付物文件名称
ENV_NAME环境名称
BUILD_URL构建任务的 URL
CI值恒等于 true,可视需要使用,比如用于判断是 CI 脚本,还是其他脚本
ZADIG值恒等于 true,可视需要使用,比如用于判断是否在 Zadig 系统中执行
<REPO>_PR构建过程中指定代码仓库使用的 Pull Request 信息
<REPO>_BRANCH构建过程中指定代码仓库使用的分支信息
<REPO>_TAG构建过程中指定代码仓库使用的 Tag 信息
<REPO>_COMMIT_ID构建过程中指定代码仓库使用的 Commit ID 信息

提示

  1. 如果 REPO 包含中划线 “-”,将 “-” 替换成 “_” 即可正常获取变量 <REPO>_PR<REPO>_BRANCH<REPO>_TAG<REPO>_COMMIT_ID

  2. 系统有内置的规则生成 IMAGEPKG_FILE,关于规则的查看和修改,请参考:构建交付物生成规则

镜像构建

平台默认支持通过 Dockerfile 参数化构建镜像,构建完成后会将镜像推送至镜像仓库。

点击新增构建步骤,并选择镜像构建。

docker-build docker-build docker-build

参数说明:

  • 镜像构建目录: 执行 Docker build 所在的目录。
  • Dockerfile 来源: 包括代码库模板库,模板库功能可参考 Dockerfile 模板管理
  • Dockerfile 文件的完整路径: Dockerfile 来源于代码库时,指定执行 Docker build 用到的 Dockerfile 路径。
  • 选择模板: Dockerfile 来源于模板库时,选择具体的 Dockerfile 模板。
  • 镜像编译参数: 支持 Docker build 的所有参数,比如:--build-arg key1=value1 --build-arg key2=value2

共享构建

同一个项目下的多个服务共享使用一份构建配置。

如何配置共享构建

multi-service-demo构建 - 图11 (opens new window) 为例,该项目包括 3 个 Golang 服务 service1/service2/service3,和构建相关的目录结构说明如下:

  1. ├── Dockerfile # 定义 3 个服务的 Dockerfile
  2. ├── Makefile # 定义 3 个服务的编译
  3. ├── src # 3 个服务的源代码
  4. ├── service1
  5. ├── service2
  6. └── service3

创建 Zadig 构建,构建服务中选择多个服务,配置运行时环境、应用列表和代码信息,填写构建脚本,利用系统提供变量实现构建的共享,本示例中的构建脚本如下:

  1. cd zadig/examples/multi-service-demo
  2. make build-$SERVICE
  3. docker build -t $IMAGE -f Dockerfile --build-arg service=$SERVICE .
  4. docker push $IMAGE

共享构建

如何使用共享构建

  • 创建构建配置时指定多个服务,或者创建构建完毕后修改构建,在构建服务中选择多个服务。

使用共享构建 使用共享构建

  • 也可以在为服务配置构建时,按需选择复用已有的构建配置实现构建共享。

创建服务时复用已有构建

构建交付物生成规则

  • 点击修改项目进入到项目的高级配置中,可查看该项目中生成交付物的命名规则,并按需对默认规则进行修改。

小贴士

project-high-level-config

  • Zadig 系统支持通过以下变量和常量组合的方式生成交付物名称:
变量名称描述
TIMESTAMP工作流任务的执行时间戳,形如 20211029113304
TASK_ID工作流任务的 ID
REPO_BRANCH构建过程中指定代码仓库使用的分支信息
REPO_PR构建过程中指定代码仓库使用的 Pull Request 信息
REPO_TAG构建过程中指定代码仓库使用的 Tag 信息
REPO_COMMIT_ID构建过程中指定代码仓库使用的 Commit ID 信息
PROJECT构建所属的 Zadig 项目名称
SERVICE构建编译的服务名称
ENV_NAME构建部署的环境名称
字符常量大小写字母、数字、中划线、下划线及点组合生成的 127 个字符以内的常量

Jenkins 构建

直接使用 Jenkins Job 执行后的镜像产物,用于部署更新 Zadig 中的服务。

前提

  1. 需要先在 Zadig 系统中集成 Jenkins 服务器,详见 Jenkins 集成
  2. 需要先在 Zadig 系统中集成镜像仓库,详见镜像仓库管理
  3. 要使用的 Jenkins Job 中需要配置 Build Parameters,包含 IMAGE 变量,作为构建出的镜像产物, 并将 IMAGE 推送至集成的镜像仓库中,示例如下:

jenkins build jenkins build

如何使用

jenkins build

新建构建,构建来源选择 Jenkins 构建,填写相关参数保存即可。参数说明如下:

  • 构建服务:要构建的服务。
  • jenkins job:从集成的 Jenkins Server 中按需选择 Jenkins Job。
  • 构建参数IMAGE 参数,在运行工作流的时候可以手动输入,传递给 Jenkins Job 作为构建镜像产物名称,如下图所示:

jenkins build