CircleCI 配置第一章: Docker映象 Image 配置 - 使用 CircleCI Convenience Image

Apolo_Du發表於2019-05-28

前言

在使用 CI 工具進行持續整合的時候, 免不了要定義配置檔案, 並在配置檔案中定義專案的工作流程. Circle 是一個對開源專案友好的 CI 工具, 本文將以 CircleCI 入手, 解析配置檔案中定義 Docker 映象的配置項: image欄位.

對於大多數初次嘗試使用 CircleCI 的使用者, 最難以拿捏的莫過於使用 docker 映象時, 配置中 docker 欄位下 image 的定義, 本文將介紹如何配置 image 選項 - 使用 CircleCI Convenience Image, 以及與之相關配置的最佳實踐.


Convenience Image 的兩種型別

CircleCI 配置第一章: Docker映象 Image 配置 - 使用 CircleCI Convenience Image
CircleCI 為我們提供了語言類映象服務類映象兩種型別的 Convenience Image, 在這些映象中預設了很多依賴, 可以為我們進行持續整合提供便利.

語言類映象

語言類映象內建了某種語言相關的依賴和工具.

語言類映象需要在 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 還提供了這類映象的變體, 即在提供了某種語言依賴的基礎上增加了更多的依賴, 預裝了其他的語言和工具

通過新增以下字尾, 就可以使用在某種 Convenience Image 的基礎上預置了更多依賴的映象

  • -node

    • 新增了 Nodejs 相關依賴
  • -browsers

    • 新增了 瀏覽器 相關依賴
    • includes Chrome, Firefox, Java 8, and Geckodriver
  • -browsers-legacy

    • 大致同上, 略有區別
    • includes Chrome, Firefox, Java 8, and PhantomJS
  • -node-browsers

    • 同時新增了 -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 配置第一章: Docker映象 Image 配置 - 使用 CircleCI Convenience Image
配置 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"
複製程式碼

相關文章