文章插圖

文章插圖
持續集成作為敏捷開發重要的一步,其目的在于讓產品快速迭代的同時,盡可能保持高質量 。每一次代碼更新,都要通過自動化測試來檢測代碼和功能的正確性,只有通過自動測試的代碼才能進行后續的交付和部署 。本文主要介紹如何將時下最流行的持續集成工具之一的Jenkins結合阿里云容器服務,實現自動測試和鏡像構建推送 。
接下來的演示是如何通過阿里云容器服務Jenkins實現自動測試和Docker鏡像構建,實現高質量的持續集成 。
具體場景:每次代碼提交到GitHub上的nodejs的項目中,阿里云容器服務Jenkins都會自動觸發單元測試,測試通過則繼續鏡像構建及推送到目標鏡像倉庫中,最后郵件通知結果 。大致流程如下圖所示:
slave-nodejs-image-build是用來進行build鏡像和推送鏡像的slave節點 。
新建模版,以如下內容為基礎,創建編排 。
jenkins:1.2 創建Jenkins應用
image: ‘registry.aliyuncs.com/acs-sample/jenkins:1.651.2-alpine’
ports:
– ‘8080:8080’
– ‘50000:50000’
volumes:
– /var/lib/docker/jenkins:/var/jenkins_home
privileged: true
restart: always
environment:
– user=1000
labels:
aliyun.scale: ‘1’
aliyun.probe.url: ‘tcp://container:8080’
aliyun.probe.initial_delay_seconds: ’10’
aliyun.routing.port_8080: jenkins
當然也可以直接使用阿里云提供的jenkins示例模版創建Jenkins應用 。
master/slave相當于server和agent的概念 。master提供web接口讓用戶來管理job和slave,job可以運行在master本機或者被分配到slave上運行 。一個master可以關聯多個slave用來為不同的job或相同的job的不同配置來服務 。
可以通過配置多個slave為不同項目準備單獨的測試和構建環境 。
2.2 配置Jenkins插件
如果代碼托管在GitHub中,安裝Git plugin和GitHub plugin來實現代碼變更自動觸發Jenkins job 。
如果直接安裝不成功,可以通過http://updates.jenkins-ci.org/download/plugins/手動下載 .hpi文件安裝 。
Tips: 本文中提到的Jenkins job和項目均指的是Jenkins一個構建單元,執行單元 。
本示例在本地創建slave-nodejs-ut鏡像,然后將鏡像推送到容器服務Hub 。
首先在Dockerfile所在路徑下執行如下命令創建鏡像 。
docker build –t qinyujia-test/slave-nodejs-ut .Dockerfile如下:
# Docker-in-Docker Jenkins Slave在容器服務主頁選擇鏡像,新建鏡像 。
# See: https://github.com/tehranian/dind-jenkins-slave
# See: https://dantehranian.wordpress.com/2014/10/25/building-docker-images-within-docker-containers-via-jenkins/
# Following the best practices outlined in:
# http://jonathan.bergknoff.com/journal/building-good-docker-images
FROM evarga/jenkins-slave
ENV DEBIAN_FRONTEND noninteractive
# Adapted from: https://registry.hub.docker.com/u/jpetazzo/dind/dockerfile/
# Let’s start with some basic stuff.
RUN apt-get update -qq && apt-get install -qqy
apt-transport-https
ca-certificates
curl
lxc
iptables &&
rm -rf /var/lib/apt/lists/*
RUN echo deb https://apt.dockerproject.org/repo ubuntu-trusty main > /etc/apt/sources.list.d/docker.list &&
apt-key adv –keyserver hkp://p80.pool.sks-keyservers.net:80 –recv-keys 58118E89F3A912897C070ADBF76221572C52609D
ENV DOCKER_VERSION 1.11.1-0~trusty
# Install Docker from Docker Inc. repositories.
RUN apt-get update && apt-get install -y docker-engine=$DOCKER_VERSION && rm -rf /var/lib/apt/lists/*
ADD wrapdocker /usr/local/bin/wrapdocker
RUN chmod +x /usr/local/bin/wrapdocker
VOLUME /var/lib/docker
# Make sure that the “jenkins” user from evarga’s image is part of the “docker”
# group. Needed to access the docker daemon’s unix socket.
RUN usermod -a -G docker jenkins
# place the jenkins slave startup script into the container
ADD jenkins-slave-startup.sh /
【阿里云郵箱注冊錯誤碼 阿里云郵箱注冊頁面】CMD [“/jenkins-slave-startup.sh”]
# Install nodejs for demo purpose
RUN curl -sL https://deb.nodesource.com/setup | sudo bash –
RUN apt-get install -y nodejs
slave-nodejs-ut編排模版如下:
slave-nodejs-ut:3.3 將slave-nodejs-ut容器配置成Jenkins的slave節點
image: ‘registry.aliyuncs.com/qinyujia-test/slave-nodejs-ut’
privileged: true
restart: always
labels:
aliyun.scale: ‘1’
打開Jenkins應用,進入系統設置界面,選擇管理節點,新建節點,配置相應參數 。如下圖所示 。
Note2: slave容器和Jenkins容器同時運行在阿里云平臺上,因此填寫外網訪問不到的容器節點IP,隔離測試環境 。
3.4 創建項目實現自動化測試
新建Item,選擇構建一個自由風格的軟件項目 。
填寫項目名稱,并選擇項目運行節點,此示例填寫上述準備的slave-nodejs-ut節點 。默認情況下,Jenkins會使用master節點,也就是Jenkins運行主機作為項目運行節點,很可能因為缺少各種環境配置導致測試失敗 。即使能夠執行成功,我們仍然更推薦使用slave節點來執行項目 。
在GitHub 項目主頁點擊settings tab,左側菜單欄選擇Webhooks & services, Add Service,下拉框中選擇Jenkins(Git plugin) 。
在Jenkins hook url對話框中填寫${Jenkins IP}/github-webhook/, eg:
http://jenkins.cd****************.cn-beijing.alicontainer.com/github-webhook/
pwd
ls
cd chapter2
npm test
4.1 使用阿里云容器服務創建slave-nodejs-image-build容器
使用章節3中的模板和鏡像,創建進行構建鏡像,推送鏡像的slave-nodejs-image-build容器 。
4.2 將slave-nodejs-image-build容器配置成Jenkins的slave節點
打開Jenkins應用,進入系統設置界面,選擇管理節點,新建節點,配置相應參數 。如下圖所示 。
執行job的節點配置為slave-nodejs-image-build 。
cd chapter2
docker build -t registry.aliyuncs.com/qinyujia-test/nodejs-demo .
docker login -u ${yourAccount} -p ${yourPassword} registry.aliyuncs.com
docker push registry.aliyuncs.com/qinyujia-test/nodejs-demo
使用編排模板,將章節4中創建的鏡像部署到容器服務中,創建nodejs-demo應用 。示例如下:
express:5.2 自動重新部署
image: ‘registry.aliyuncs.com/qinyujia-test/nodejs-demo’
expose:
– ’22’
– ‘3000’
restart: always
labels:
aliyun.routing.port_3000: express
選擇剛剛創建的應用nodejs-demo, 創建觸發器 。
curl ‘https://cs.console.aliyun.com/hook/trigger?triggerUrl=***==&secret=***’把4.3中的示例的Command改為:
cd chapter2到此,鏡像推送之后,Jenkins會自動觸發重新部署nodejs-demo應用 。
docker build -t registry.aliyuncs.com/qinyujia-test/nodejs-demo .
docker login -u ${yourAccount} -p ${yourPassword} registry.aliyuncs.com
docker push registry.aliyuncs.com/qinyujia-test/nodejs-demo
curl ‘https://cs.console.aliyun.com/hook/trigger?triggerUrl=***==&secret=***’
首先在Jenkins主頁,選擇系統管理,系統設置,配置Jenkins系統管理員郵箱 。
在Jenkins項目中添加構建后操作步驟,選擇Editable Email Notification類型,填寫郵件接收人列表 。
- ios網易云音樂在哪個文件夾 網易云音樂下載文件在哪里ios
- 阿里郵箱企業版管理員賬號 阿里云郵箱管理員怎么登陸
- 阿里多元化戰略
- 怎樣切換阿里巴巴賬號 手機阿里巴巴怎么切換賬號登陸
- 阿里巴巴的供應商在哪里 阿里巴巴供應商怎么搜
- 阿里備案流程 阿里云網站備案怎么辦理
- 云南魚豆花
- 免費好用的云筆記 免費的云筆記軟件推薦
- 郵箱密碼怎么破解軟件 郵箱密碼破解軟件下載
- 阿里云圖片存儲 免費嗎 阿里云盤照片
