构建环境

构建环境确定了在运行构建任务的时候,环境中拥有哪些软件;

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

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

请确保使用 云原生构建 时,拥有使用 Docker 容器的相关经验, 或至少了解 Docker 入门知识 (opens new window)

# 配置方式

Docker 容器的配置方式有两种:

  1. 指定一个 image(已有的镜像)。这些镜像是之前由其他人制作出来并且推送到镜像仓库中的。
  2. 指定一个 Dockerfile。在构建开始时,云原生构建 会根据 Dockerfile 来即时制作镜像(或某种条件下使用缓存)并且使用。

# 指定 image

master:
  push:
    - docker:
        # 通过此参数控制使用的 image
        image: node:16
      stages:
        - stage1
        - stage2
        - stage3

pipeline.docker.image 参数指定 Docker image。 其值可以是公网中的 官方镜像库 (opens new window), 也可以是其他镜像源中的公开镜像。

# 指定 Dockerfile

master:
  push:
    - docker:
        # 通过此参数控制使用的 Dockerfile
        build: ./image/Dockerfile
      stages:
        - stage1
        - stage2
        - stage3

pipeline.docker.build 参数指定 Dockerfile。

# 镜像中的VOLUME

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

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

RUN mkdir /cache && echo '[{"author_email": "git_user1@xxx.com"}]' > /cache/cache.json

VOLUME /cache

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

- name: image-commands中访问pipeline volume
  image: alpine
  commands:
    - cat /cache/cache.json

# 缺省镜像

如果以上两种方式都没有声明,那么将使用缺省值 codingci/default-env (opens new window)

此镜像包含了:git, git-lfs, jq, rsync , docker-compose, node:14

# 使用案例

# NodeJS

当需要使用 NodeJS 的构建环境时,可以选择使用 Docker Hub 之中的 官方 NodeJS 镜像 (opens new window)

master:
  push:
    - docker:
        image: node:16
      stages:
        - name: 依赖安装
          script: npm install
        - name: 测试用例检查
          script: npm test