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"
複製代碼
相關文章
相關標籤/搜索