在使用 CI 工具進行持續集成的時候, 免不了要定義配置文件, 並在配置文件中定義項目的工做流程. Circle 是一個對開源項目友好的 CI 工具, 本文將以 CircleCI 入手, 解析配置文件中定義 Docker 鏡像的配置項: image字段.node
對於大多數初次嘗試使用 CircleCI 的用戶, 最難以拿捏的莫過於使用 docker 鏡像時, 配置中 docker 字段下 image 的定義, 本文將介紹如何配置 image 選項 - 使用 CircleCI Convenience Image, 以及與之相關配置的最佳實踐.golang
語言類鏡像內置了某種語言相關的依賴和工具.docker
語言類鏡像須要在 docker 字段下的第一個 image 字段中定義, 做爲執行時的首要容器.數據庫
docker:
-image: circleci/language:version[-tag]
複製代碼
docker:
-image: circleci/golang:1.9
複製代碼
在語言類鏡像的基礎上, CircleCI 還提供了這類鏡像的變體, 即在提供了某種語言依賴的基礎上增長了更多的依賴, 預裝了其餘的語言和工具json
經過添加如下後綴, 就可使用在某種 Convenience Image 的基礎上預置了更多依賴的鏡像瀏覽器
-noderuby
-browsersbash
-browsers-legacy工具
-node-browserspost
-node-browsers-legacy
- image: circleci/node:10-jessie-browsers
複製代碼
服務類鏡像主要是爲項目提供服務 (例如數據庫服務) 時使用的.
它們必需要在語言類鏡像後面定義, 做爲次要鏡像.
CircleCI 爲如下服務提供了服務類鏡像
- image: circleci/mongo:4.1.7-xenial
複製代碼
CircleCI 僅僅爲服務類鏡像提供了一種變體, -ram
- image: circleci/postgres:9.5-postgis-ram
複製代碼
這是由於 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
# 使用固定系統的鏡像
- image: circleci/ruby:2.4.2-jessie-node
# 示例 2
# 使用固定版本鏡像
- image:circleci/ruby@sha256:df1808e61a9c32d0ec110960fed213ab2339451ca88941e9be01a03adc98396e
複製代碼
請查詢該文件: 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"
複製代碼