构建环境
779 字约 3 分钟
构建环境确定了在运行构建任务的时候,环境中拥有哪些软件和工具,例如 JDK、Node、Python 等。
云原生构建
使用 Docker 容器作为构建环境。
相比于传统的虚拟机容器,Docker 容器有非常巨大的优势, 行业中各个 CI 厂商也在向这方面发展。
拥有 Docker 相关知识和容器开发经验,有助于理解和使用 云原生构建
。
配置方式
流水线构建环境的配置方式有两种:
指定一个 Image
这些镜像是之前由其他人制作出来并且推送到镜像仓库中的。
若为私有镜像,还需配置对应的用户名和密码才能使用。
指定一个 Dockerfile
在构建开始时,
云原生构建
会先依据一些规则计算镜像版本号,若当前构建节点或远端镜像仓库中存在此版本镜像,则直接使用。 否则,云原生构建
会用 Dockerfile 通过docker build
的方式制作、生成镜像后,再使用它,同时推送到流水线所属仓库的 Docker 制品库,供后续使用。
流水线指定的构建环境将作为该流水线下脚本任务的默认构建环境。
另外,脚本任务还可以单独指定 Image 作为该任务的构建环境,此时无法指定 Dockerfile。
参考语法脚本任务。
示例
指定 Image
main:
push:
- docker:
# 声明流水线默认使用的构建环境。
image: node:22
stages:
# 脚本任务使用上述声明的构建环境,运行指令
- node -v # 输出 v22.xx.xx
指定 Dockerfile
FROM node:20
main:
push:
- docker:
# 声明流水线使用上面的 Dockerfile 构建的镜像作为流水线默认构建环境。
build: image/Dockerfile
stages:
- node -v # 输出 v20.xx.xx
脚本任务指定 Image
main:
push:
- docker:
# 声明流水线默认使用的构建环境。
image: node:22
stages:
# 该脚本任务使用上述声明的构建环境,运行指令
- node -v # 输出 v22.xx.xx
- name: 脚本任务指定构建环境
image: node:20
# 该脚本任务使用指定的构建环境
script: node -v #输出 v20.xx.xx
缺省镜像
当流水线未指定 Image 和 Dockerfile 时,云原生构建 的 Image 会被设置为缺省镜像:cnbcool/default-build-env, 云原生开发的 Image 会被设置为:cnbcool/default-dev-env。
main:
push:
- stages:
- stage1
- stage2
- stage3
# 未指定 image 和 Dockerfile 相当于如下声明
# docker:
# image: cnbcool/default-build-env
main:
vscode:
- services:
- vscode
stages:
- stage1
- stage2
- stage3
# 云原生开发未指定 image 和 Dockerfile 相当于如下声明
# docker:
# image: cnbcool/default-dev-env
镜像中的 VOLUME
镜像中可能包含 VOLUME
命令。 用插件任务的容器启动时会通过 --volumes-from
参数,将这些 Volume 共享给 插件任务。
例如,在 Dockerfile 中准备了文件:
RUN mkdir /cache && echo 'hello world' > /cache/data.txt
VOLUME /cache
在后续的 image-commands 中也可以访问到它。
- name: image-commands中访问pipeline volume
image: alpine
script:
- cat /cache/data.txt