本文主要介绍 Zadig 的构建模块。
在项目页面中点击构建
进入构建的详情页面,按需添加 Zadig 构建或 Jenkins 构建。关于二者的区别如下:
- Zadig 构建:在 Zadig 平台中定义服务的完整构建过程。
- Jenkins 构建:关于服务具体的构建过程在 Jenkins 中定义执行,Zadig 中提供入口触发具体的 Jenkins Job,并基于 Jenkins Job 的镜像产物对部署在 Zadig 中的服务进行更新。
Zadig 构建
- 提供模版化构建能力,通过配置构建脚本实现构建过程,简单易用。
- 整个构建模块包括通用配置、运行时环境、应用、代码库信息、敏感信息、构建脚本、镜像构建、二进制包归档和 Shell 脚本,更多细节请阅读定义构建。
- 支持多个服务使用一份构建配置,更多细节请阅读共享构建。
- 支持修改构建交付物的生成规则,更多细节请阅读构建交付物生成规则。
定义构建
准备工作
明确构建所需要的依赖,依赖项包括但不限于:
- 服务编译的代码依赖(比如依赖 Base 库,开源库等)
- 服务编译的环境依赖(比如 Go 版本、Node 版本、编译工具等)
- 服务编译的系统依赖(比如操作系统等)
通用配置
参数说明:
构建来源
:选择Zadig 构建
。构建超时
:定义构建执行的超时时间。构建名称
:构建的名称,有意义便于理解即可。构建服务
:选择使用该构建配置的服务。
运行时环境
配置构建过程运行时的环境。
参数说明:
构建系统
:平台默认提供 Ubuntu 16.04/Ubuntu 18.04/Ubuntu 20.04 作为基础构建系统。资源规格
:平台提供 高/中/低/最低 四种配置供选择,可以根据实际需要自定义规格。集群名称
:选择构建任务运行时所使用的集群,其中本地集群
指 Zadig 系统所在的集群,关于集群的集成可参考集群管理。命名空间
:选择构建任务运行时所使用的 K8s 命名空间。
扩展知识
支持使用自定义镜像作为构建系统,详情请参阅构建镜像管理。
默认提供的 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。
平台已内置一些常见的应用,如果有其他应用或者版本需求,系统管理员可以在应用管理中配置应用的安装脚本。
代码库信息
参数说明:
托管平台
:代码库所在的平台,目前支持 GitHub、GitLab、Gerrit代码库拥有者
:支持开源库,以及所配置的托管平台下的代码库拥有者代码库名称
:代码库的名称默认分支
:执行工作流时,默认选取的分支,与高级配置中的默认设置配合使用,可以限制每次编译的 BranchRemote name
:指定远程仓库名称,默认origin
克隆目录名
:定义代码库被克隆后的目录名称,默认为代码库的名称子模块
:同步submodule
中配置的代码库默认设置
:开启后,创建工作任务时不提供参数化方式,使用工作流设置中的默认配置执行主库
:多个代码库构建时,如果该代码库设置为主库,构建产物(镜像、Tar 包等)会使用该库的对应信息命名
提示
- 指定
克隆目录名
为 A,则代码库的内容将会被克隆到$WORKSPACE/A
中 $WORKSPACE
是 Zadig 系统构建模块内置的变量,关于其更详细的描述可阅:系统内置环境变量
环境变量
平台支持用户在构建脚本中使用自定义环境变量,若构建脚本中存在敏感信息,可以设置勾选敏感信息来隐藏控制台 Console 输出。声明自定义环境变量后,工作流执行任务时可以修改变量值。
构建脚本
代码的构建过程可以在构建脚本中声明。
构建脚本除了可以使用自定义环境变量外,还可以使用系统内置变量,包括以下变量:
变量名称 | 描述 |
---|---|
WORKSPACE | 当前工作流工作目录 |
TASK_ID | 当前工作流任务的 ID,即任务序号 |
IMAGE | 输出镜像名称,用于容器服务的部署更新 |
SERVICE | 编译的服务名称 |
PKG_FILE | 交付物文件名称 |
ENV_NAME | 环境名称 |
BUILD_URL | 构建任务的 URL |
CI | 值恒等于 true,可视需要使用,比如用于判断是 CI 脚本,还是其他脚本 |
ZADIG | 值恒等于 true,可视需要使用,比如用于判断是否在 Zadig 系统中执行 |
<REPONAME>_PR | 构建过程中指定代码仓库使用的 Pull Request 信息 |
<REPONAME>_BRANCH | 构建过程中指定代码仓库使用的分支信息 |
<REPONAME>_TAG | 构建过程中指定代码仓库使用的 Tag 信息 |
<REPONAME>_COMMIT_ID | 构建过程中指定代码仓库使用的 Commit ID 信息 |
提示
如果 REPONAME 包含中划线 “-”,将 “-” 替换成 “_” 即可正常获取变量
<REPONAME>_PR
、<REPONAME>_BRANCH
、<REPONAME>_TAG
、<REPONAME>_COMMIT_ID
。系统有内置的规则生成
IMAGE
和PKG_FILE
,关于规则的查看和修改,请参考:构建交付物生成规则。
镜像构建
平台默认支持通过 Dockerfile 参数化构建镜像,构建完成后会将镜像推送至镜像仓库。
点击新增构建步骤,并选择镜像构建。
参数说明:
镜像构建目录
: 执行 Docker build 所在的目录。Dockerfile 来源
: 包括代码库
和模板库
,模板库功能可参考 Dockerfile 模板管理。Dockerfile 文件的完整路径
: Dockerfile 来源于代码库时,指定执行 Docker build 用到的 Dockerfile 路径。选择模板
: Dockerfile 来源于模板库时,选择具体的 Dockerfile 模板。镜像编译参数
: 支持 Docker build 的所有参数,比如:--build-arg key1=value1 --build-arg key2=value2
。
共享构建
同一个项目下的多个服务共享使用一份构建配置。
如何配置共享构建
以 multi-service-demo (opens new window) 为例,该项目包括 3 个 Golang 服务 service1/service2/service3,和构建相关的目录结构说明如下:
├── Dockerfile # 定义 3 个服务的 Dockerfile
├── Makefile # 定义 3 个服务的编译
├── src # 3 个服务的源代码
├── service1
├── service2
└── service3
创建 Zadig 构建,构建服务中选择多个服务,配置运行时环境、应用列表和代码信息,填写构建脚本,利用系统提供变量实现构建的共享,本示例中的构建脚本如下:
cd zadig/examples/multi-service-demo
make build-$SERVICE
docker build -t $IMAGE -f Dockerfile --build-arg service=$SERVICE .
docker push $IMAGE
如何使用共享构建
- 创建构建配置时指定多个服务,或者创建构建完毕后修改构建,在
构建服务
中选择多个服务。
- 也可以在为服务配置构建时,按需选择复用已有的构建配置实现构建共享。
构建交付物生成规则
- 点击修改项目进入到项目的高级配置中,可查看该项目中生成交付物的命名规则,并按需对默认规则进行修改。
小贴士
- 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 中的服务。
前提
- 需要先在 Zadig 系统中集成 Jenkins 服务器,详见 Jenkins 集成。
- 需要先在 Zadig 系统中集成镜像仓库,详见镜像仓库管理。
- 要使用的 Jenkins Job 中需要配置 Build Parameters,包含
IMAGE
变量,作为构建出的镜像产物, 并将IMAGE
推送至集成的镜像仓库中,示例如下:
如何使用
新建构建,构建来源选择 Jenkins 构建
,填写相关参数保存即可。参数说明如下:
构建服务
:要构建的服务。jenkins job
:从集成的 Jenkins Server 中按需选择 Jenkins Job。构建参数
:IMAGE
参数,在运行工作流的时候可以手动输入,传递给 Jenkins Job 作为构建镜像产物名称,如下图所示: