Docker在持續集成方面邁出了一大步。須要在CI主機中設置一百個工具或啓動整個虛擬機的日子已經一去不復返了。如今,您只需安裝Docker,就能夠開始使用了大部分程序。node
針對不一樣的node.js版本測試項目。如何在Jenkins實現這一目標的。docker
假設您有一個能夠運行docker的Jenkins。相似於這樣:npm
docker run --name jenkins -itd \ -p 8081:8080 \ -p 50000:50000 \ -v ~/jenkins:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/local/bin/docker:/usr/bin/docker \ jenkins/jenkins:lts
項目的結構是這樣的json
├── package-lock.json ├── package.json └── src ├── file.js └── file.test.js
該項目使用npm來管理其依賴項,並具備一個lock文件以確保每次咱們運行時npm install
都安裝徹底相同的版本。咱們的代碼位於包含測試文件的src
文件夾下。package.json
的test
任務是檢查項目。緩存
若是要針對一個特定的node版本檢查該項目,則可使用如下命令構建映像Dockerfile
:bash
FROM node:12.14 ENV NODE_VERSION=12.14 RUN mkdir -p /app/src WORKDIR /app ENV HOME=/app COPY package.json package-lock.json ./ RUN npm install --ci COPY src src CMD npm test
並設置咱們的Jenkins做業以運行如下腳本:app
docker build -t node-ci:12.14 . docker run -it --rm node-ci:12.14
Dockerfile的詳細信息或運行方式並不重要。能夠根據須要調整圖像。您能夠掛載卷覺得其設置緩存node_modules
或避免複製代碼。請注意,官方node鏡像已經設置了NODE_VERSION
環境變量,所以咱們實際上並不須要第3行。ide
每一個項目都應定義須要檢查的節點版本。咱們須要調整,Dockerfile
以接受可修改將要使用的基本映像的構建ARG。該ARG
指令定義了一個變量,用戶能夠在構建時docker build
使用帶有--build-arg <varname>=<value>
標誌的命令將其傳遞給構建器。工具
ARG NODE_VERSION FROM node:$NODE_VERSION ARG NODE_VERSION ENV NODE_VERSION=$NODE_VERSION RUN mkdir -p /app/src WORKDIR /app ENV HOME=/app COPY package.json package-lock.json ./ RUN npm install --ci COPY src src CMD npm test
最後,咱們修改腳本以迭代定義的節點版本,傳遞NODE_VERSION ARG
來構建映像並運行它。測試
#!/bin/bash -e versions="10.16 12.14" for version in $versions; do echo "========== node $version ===========" docker build -t node-ci:$version --build-arg NODE_VERSION=$version . docker run -it --rm node-ci:$version done
就是這樣:在CI中針對一個單一的多個節點版本運行做業Dockerfile
。
設置Jenkins使用Docker容器運行CI做業很是容易。這爲配置做業和運行做業的環境提供了極大的靈活性。利用和一些腳本中的ARG
+ FROM
語法Dockerfile
,您能夠減輕在Jenkins中針對不一樣節點版本運行相同做業的痛苦。一樣,該方法能夠應用於您選擇的任何其餘語言或技術。