构建环境

构建环境确定了在运行构建任务的时候,环境中拥有哪些软件和工具,例如 JDK、Node、Python 等。

云原生构建 使用 Docker 容器作为构建环境。

相比于传统的虚拟机容器,Docker 容器有非常巨大的优势,行业中各个 CI 厂商也在向这方面发展。

拥有 Docker 相关知识和容器开发经验,有助于理解和使用 云原生构建

配置方式

流水线构建环境的配置方式有两种:

  1. 指定一个 image

这些镜像是之前由其他人制作出来并且推送到镜像仓库中的。

若为私有镜像,还需配置对应的用户名和密码才能使用。

参考语法pipeline.docker.image

  1. 指定一个 Dockerfile

在构建开始时,云原生构建 会先依据一些规则计算镜像版本号,若当前构建节点或远端镜像仓库中存在此版本镜像,则直接使用。 否则,云原生构建 会用 Dockerfile 通过 docker build 的方式制作、生成镜像后,再使用它,同时推送到流水线所属仓库的 Docker 制品库,供后续使用。

参考语法pipeline.docker.build

流水线指定的构建环境将作为该流水线下脚本任务的默认构建环境。

另外,脚本任务还可以单独指定 Image 作为该任务的构建环境,此时无法指定 Dockerfile。

参考语法脚本任务

指定 Image

1main:
2  push:
3    - docker:
4        # 通过此参数控制使用的 image
5        image: node:22
6      stages:
7        - stage1
8        - stage2
9        - stage3

pipeline.docker.image 参数指定 Docker Image。 其值可以是 公网中的官方镜像源或其他可以被访问到的镜像源 中的公开镜像。

指定 Dockerfile

1main:
2  push:
3    - docker:
4        # 通过此参数控制使用的 Dockerfile
5        build: ./image/Dockerfile
6      stages:
7        - stage1
8        - stage2
9        - stage3

pipeline.docker.build 参数指定 Dockerfile。

缺省镜像

当未指定 image 和 Dockerfile 时,image 会被设置为缺省镜像:cnbcool/default-build-env:latest

1main:
2  push:
3    - stages:
4        - stage1
5        - stage2
6        - stage3
7      # 未指定 image 和 Dockerfile 相当于如下声明
8      # docker:
9      # image: cnbcool/default-build-env:latest

镜像中的 VOLUME

镜像中可能包含VOLUME命令。 用插件任务的容器启动时会通过 --volumes-from 参数,将这些 volume 共享给 插件任务

例如,在 Dockerfile 中准备了文件:

1RUN mkdir /cache && echo 'hello world' > /cache/data.txt
2
3VOLUME /cache

在后续的 image-commands 中也可以访问到它。

1- name: image-commands中访问pipeline volume
2  image: alpine
3  commands:
4    - cat /cache/data.txt

使用案例

NodeJS

当需要使用 NodeJS 的构建环境时,可以直接使用 Docker Hub 之中的官方 NodeJS 镜像。

1main:
2  push:
3    - docker:
4        image: node:20
5      stages:
6        - name: 依赖安装
7          script: npm install
8        - name: 测试用例检查
9          script: npm test