您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

利用Docker打造容器化構(gòu)建環(huán)境

大?。?/span>0.6 MB 人氣: 2017-10-11 需要積分:1
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上。
  利用Docker打造容器化構(gòu)建環(huán)境
  我的目標(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%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?