利用Docker打造容器化構(gòu)建環(huán)境
大?。?/span>0.6 MB 人氣: 2017-10-11 需要積分:1
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
標(biāo)簽:Docker(11471)
Docker和Jenkins像DevOps界的巧克力和花生醬那樣,它們的組合產(chǎn)生了無(wú)數(shù)的機(jī)會(huì),當(dāng)然也產(chǎn)生了很多難題,筆者將提及這兩個(gè)方面。本文中,我假定讀者已經(jīng)熟悉Jenkins和Docker,我將把焦點(diǎn)放在特定的配置上而不是把筆墨花費(fèi)在許多博文已經(jīng)介紹過(guò)的入門概念上。
設(shè)定目標(biāo)
我所要達(dá)成的目標(biāo)其實(shí)非常簡(jiǎn)單:在一個(gè)容器中搭建Jenkins主節(jié)點(diǎn),并且在多個(gè)主機(jī)上搭建多個(gè)JNLP代理容器。這些代理節(jié)點(diǎn)可以運(yùn)行在不同的AWS VPC或者ECS上。
我的目標(biāo)是得到一個(gè)能在任何主機(jī)上部署的通用配置,而每個(gè)項(xiàng)目分別定義各自的構(gòu)建環(huán)境。這樣各個(gè)開發(fā)團(tuán)隊(duì)就可以掌控這份配置,而不用經(jīng)由Jenkins的構(gòu)建團(tuán)隊(duì)。我會(huì)盡量避免構(gòu)建一個(gè)特定工具集的代理節(jié)點(diǎn)。容器技術(shù)能實(shí)現(xiàn)這樣的構(gòu)建環(huán)境,但是要真正把每個(gè)細(xì)節(jié)都做好絕對(duì)是一個(gè)挑戰(zhàn)。
為了實(shí)現(xiàn)這個(gè)目標(biāo),我還使用了Jenkins Pipeline / Workflow插件。這個(gè)插件讓你能非常優(yōu)雅地使用DSL語(yǔ)言描述構(gòu)建過(guò)程,例如這樣簡(jiǎn)單地定義:
node(‘test-agent’) { stage “Container Prep”// do the thing in the containerdocker.image(‘maven:3.3.3-jdk-8’).inside { // get the codezstage ‘Checkout’git url: ‘https://github.com/damnhandy/Handy-URI-Templates.git’stage ‘Build’// Do the buildsh “。/mvnw clean install”} }
這個(gè)pipeline會(huì)在一個(gè)名為”test-agent”的Jenkins代理上執(zhí)行,它會(huì)基于“maven”3.3.3-jdk-8”鏡像構(gòu)建一個(gè)容器。這個(gè)pipeline在物理節(jié)點(diǎn)上能正常運(yùn)行,但是在容器中運(yùn)行則會(huì)報(bào)錯(cuò)。
運(yùn)行在Docker中的Docker
在容器中運(yùn)行Jenkins的主或從節(jié)點(diǎn),可能有人會(huì)以為我需要特權(quán)模式來(lái)使用”Docker in Docker”,但是我并沒(méi)有,Jér?me Petazzoni發(fā)表了一篇文章《用Docker-in-Docker來(lái)構(gòu)建持續(xù)集成環(huán)境?請(qǐng)三思》,你應(yīng)該參考一下這篇文章。
如果你還在使用wrapdocker的腳本,你應(yīng)該問(wèn)問(wèn)自己為什么,因?yàn)檫@樣用起來(lái)更簡(jiǎn)單:
docker run -v${JENKINS_HOME}:/var/jenkins_home \-v/var/run/docker.sock:/var/run/docker.sock \-p8080:8080-p50000:50000\index.csphere.cn/microimages/jenkins
這個(gè)命令會(huì)啟動(dòng)Jenkins并且可以擁有所有的容器操作功能,所以并不需要特權(quán)模式來(lái)啟動(dòng)容器,也不需要”Docker-in-Docker”模式。
有個(gè)地方需要注意:在這里你不能用官方的Jenkins鏡像,因?yàn)閖enkins用戶需要屬于docker用戶組,這樣才能使用socket,從而能在容器中的Jenkins調(diào)用docker,最終實(shí)現(xiàn)通過(guò)Jenkins構(gòu)建和運(yùn)行其他容器。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
下載地址
利用Docker打造容器化構(gòu)建環(huán)境下載
相關(guān)電子資料下載
- 如何在Windows系統(tǒng)上設(shè)置Docker鏡像源 55
- 機(jī)器學(xué)習(xí)需要掌握的九種工具盤點(diǎn) 16
- Docker鏡像國(guó)內(nèi)加速的幾種方法 55
- VectorCAST|Docker場(chǎng)景下的代碼白盒測(cè)試實(shí)施 402
- 如何用Springboot整合Redis 118
- 如何在macOS系統(tǒng)中用Docker運(yùn)行macOS鏡像呢? 364
- 什么是Docker容器?為什么需要Docker容器? 71
- 為什么需要Docker容器?Docker容器和VM有什么區(qū)別? 323
- 如何使用 Docker容器化技術(shù) 1188
- Dockerfile定義Docker鏡像的構(gòu)建過(guò)程 1088