CircleCI 配置第一章: Docker镜像 Image 配置 - 使用 CircleCI Convenience Image

前言

在使用 CI 工具进行持续集成的时候, 免不了要定义配置文件, 并在配置文件中定义项目的工做流程. Circle 是一个对开源项目友好的 CI 工具, 本文将以 CircleCI 入手, 解析配置文件中定义 Docker 镜像的配置项: image字段.node

对于大多数初次尝试使用 CircleCI 的用户, 最难以拿捏的莫过于使用 docker 镜像时, 配置中 docker 字段下 image 的定义, 本文将介绍如何配置 image 选项 - 使用 CircleCI Convenience Image, 以及与之相关配置的最佳实践.golang


Convenience Image 的两种类型

CircleCI 为咱们提供了 语言类镜像服务类镜像两种类型的 Convenience Image, 在这些镜像中预设了不少依赖, 能够为咱们进行持续集成提供便利.

语言类镜像

语言类镜像内置了某种语言相关的依赖和工具.docker

语言类镜像须要在 docker 字段下的第一个 image 字段中定义, 做为执行时的首要容器.数据库

语言类镜像支持的语言列表:
  • Android
  • Clojure
  • Elixir
  • Go (Golang)
  • JRuby
  • Node.js
  • OpenJDK (Java)
  • PHP
  • Python
  • Ruby
  • Rust
格式
docker: 
    -image: circleci/language:version[-tag]
复制代码
配置示例
docker:
    -image: circleci/golang:1.9
复制代码

语言类镜像变体

在语言类镜像的基础上, CircleCI 还提供了这类镜像的变体, 即在提供了某种语言依赖的基础上增长了更多的依赖, 预装了其余的语言和工具json

经过添加如下后缀, 就可使用在某种 Convenience Image 的基础上预置了更多依赖的镜像浏览器

  • -noderuby

    • 添加了 Nodejs 相关依赖
  • -browsersbash

    • 添加了 浏览器 相关依赖
    • includes Chrome, Firefox, Java 8, and Geckodriver
  • -browsers-legacy工具

    • 大体同上, 略有区别
    • includes Chrome, Firefox, Java 8, and PhantomJS
  • -node-browserspost

    • 同时添加了 -node 变体 和 -browser 镜像变体所提供的依赖
  • -node-browsers-legacy

    • 同时添加了 -node 变体 和 -browsers-legacy 镜像变体所提供的依赖
配置示例
- image: circleci/node:10-jessie-browsers
复制代码

服务类镜像

服务类镜像主要是为项目提供服务 (例如数据库服务) 时使用的.

它们必需要在语言类镜像后面定义, 做为次要镜像.

CircleCI 为如下服务提供了服务类镜像

  • buildpack-deps
  • DynamoDB
  • MariaDB
  • MongoDB
  • MySQL
  • PostgreSQL
  • Redis
配置示例
- image: circleci/mongo:4.1.7-xenial
复制代码

服务类镜像变体

CircleCI 仅仅为服务类镜像提供了一种变体, -ram

配置示例
- image: circleci/postgres:9.5-postgis-ram
复制代码

配置镜像的最佳实践 Best Practices

配置 CircleCI Convenience Image 的最佳实践是 定义最精确版本的镜像.

这是由于 CircleCI Convenience Image 是基于最新版本的上游镜像制做的, 例如镜像 circleci/ruby:2.4-node 是基于最新的 Ruby 2.4-node 容器镜像制做的.

使用最精确的镜像能够避免因为上游的镜像更新而致使的 Convenience Image 的更新从而所带来的不稳定性, 从而保证项目运行环境的稳定性.

配置 Image 的最佳实践就是经过一个额外的标签来固定镜像的版本.

也就是说, 与其使用 circleci/ruby:2.4-node 镜像, 不如加上一个标签 -jessie 或 -stretch 来固定镜像所用的操做系统, 来确保项目使用的镜像是基于某个特定版本的 Debian 系统 ( 例如 circleci/ruby:2.3.7-jessie )

咱们也能够经过指定镜像的 SHA 版原本使用最精确的镜像.

使用精确镜像的两种方法:

  1. 使用一个标签来固定镜像的系统类型
  2. 使用一个明确的 Docker 镜像 ID
# 最佳实践示例
# 示例 1
# 使用固定系统的镜像
- image: circleci/ruby:2.4.2-jessie-node



# 示例 2
# 使用固定版本镜像
- image:circleci/ruby@sha256:df1808e61a9c32d0ec110960fed213ab2339451ca88941e9be01a03adc98396e
复制代码

全部 Convenience Image 镜像的可用后缀

请查询该文件: circleci.com/docs/2.0/do…

示例配置

一个应用了 Node.js 语言镜像和 MongDB 服务镜像的 CircleCI 项目配置文件

# .circleci/config.yml
version: 2.1

jobs:
  build:
    docker:
      - image: circleci/node:10.13-jessie-browsers
      - image: circleci/mongo:4.0.4-xenial-ram

    steps:
      - run: echo "A first hello"
复制代码
相关文章
相关标签/搜索