小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

從零開始搭建Jenkins+Docker自動(dòng)化集成環(huán)境

 bananarlily 2017-02-13

本文只簡單標(biāo)記下大概的步驟,具體搭建各個(gè)部分的細(xì)節(jié),還請(qǐng)自行搜索。第一、二部分只是對(duì)Jenkins和Docker的簡單介紹,熟悉的同學(xué)請(qǐng)直接跳到第三部分。


一、關(guān)于Jenkins


>>>>

Jenkins簡介


Jenkins可以幫你構(gòu)建一個(gè)自動(dòng)化的持續(xù)集成環(huán)境,你可以使用它來“自動(dòng)化”編譯、打包、分發(fā)部署你的應(yīng)用,它兼容ant、maven、gradle等多種第三方構(gòu)建工具,同時(shí)跟svn、git能無縫集成,也支持直接與知名源代碼托管網(wǎng)站,比如github、bitbucket直接集成。


>>>>

Jenkins安裝


Jenkins的安裝十分簡單,你可以從官網(wǎng)http://mirrors./war/latest/ 直接下載war包,使用java -jar jenkins.war,或者放到Tomcat類似的容器里運(yùn)行都可以(JDK版本建議使用1.6以上來運(yùn)行)。Jenkins默認(rèn)啟動(dòng)端口是8080,請(qǐng)注意端口占用。另外,Jenkins文件其實(shí)都在~/.jenkins目錄下,運(yùn)行過程中你可以在這里找到你運(yùn)行過的job和相應(yīng)的日志文件。


首次安裝,可以把插件都安裝上,自己都試試看。如果因?yàn)榫W(wǎng)絡(luò)原因,插件下載失敗的,可以從失敗詳情中把地址拷出來,下載后,以上傳hpi文件的方式安裝。


>>>>

系統(tǒng)設(shè)置


安裝完成的第一步,先到Blobal Tool Configuration中配置相關(guān)的環(huán)境,如JDK、MAVEN、GIT等,相應(yīng)的路徑設(shè)置都是設(shè)置Jenkins這臺(tái)機(jī)子本地的目錄。建議把所有的配置都完善下,否則日后的運(yùn)行中可能會(huì)出現(xiàn)一些小問題,可以試下點(diǎn)擊?查看幫助,還是很有用的。


>>>>

Jenkins集群配置


集群配置也十分簡單,就是添加slave節(jié)點(diǎn)的過程。點(diǎn)擊系統(tǒng)管理->管理節(jié)點(diǎn)->新建節(jié)點(diǎn),各個(gè)配置后面都有詳細(xì)的幫助說明的。在啟動(dòng)方法這里推薦使用 Launch slave agents on UNIX machines via SSH,這樣master節(jié)點(diǎn)會(huì)主動(dòng)使用SSH登陸到slave節(jié)點(diǎn)上,并運(yùn)行java -jar slave.jar,這樣一個(gè)slave節(jié)點(diǎn)就添加完成了。


>>>>

構(gòu)建Job


其實(shí)到這一步,就是jenkins的常規(guī)流程了,你可以參照創(chuàng)建Job選項(xiàng)的界面的各個(gè)配置,制定你構(gòu)建計(jì)劃,或者我們直接使用腳本來完成我們的構(gòu)建操作(建議)選擇構(gòu)建Execute shell,文章末尾會(huì)附上一個(gè)完整項(xiàng)目的shell構(gòu)建流程。


>>>>

Pipeline


Pipeline字面意思就是流水線,很好用的Jenkins的一個(gè)插件,將很多步驟按順序排列好,做完一個(gè)執(zhí)行下一個(gè)。真實(shí)的工作環(huán)境有很多job,比如先編譯,然后執(zhí)行靜態(tài)代碼檢查、單元測試、然后部署服務(wù)器、服務(wù)器重啟、進(jìn)行ui測試等。我們需要對(duì)這些job進(jìn)行一些設(shè)置將它們的上下游關(guān)系配置好。


這時(shí)候Pipeline就派上用場了。在Jenkins主頁點(diǎn)擊新建視圖,然后選擇Build Pipeline View,然后填寫Select Initial Job,構(gòu)建后的操作可以選擇其他的Job,以此類推,這樣一個(gè)流水線就完成了。Pipeline提供視圖界面,你可以在視圖上形象地看到整個(gè)構(gòu)建計(jì)劃的執(zhí)行流程和完成度。


二、關(guān)于Docker


>>>>

Docker 簡介


Docker現(xiàn)在是Github社區(qū)最火的項(xiàng)目之一,Docker是個(gè)容器,或許你聽過lxc,你可能知道Tomcat這個(gè)Web容器,容器是什么概念,意會(huì)就好。問個(gè)問題,你想在一臺(tái)機(jī)子上運(yùn)行一個(gè)java6的應(yīng)用,又想運(yùn)行一個(gè)java8應(yīng)用怎么辦;或者說你開發(fā)出一個(gè)軟件,mac版、windows版本,我都想運(yùn)行,怎么辦?裝虛擬機(jī)?不不不,虛擬機(jī)太浪費(fèi)資源了,Docker這時(shí)候就派上用場了,在電腦上,你可以同時(shí)裝一個(gè)mac的容器和windows的容器哦。一個(gè)虛擬機(jī)可能會(huì)消耗2到3G的內(nèi)存,一個(gè)容器僅僅只消耗幾百M(fèi)的資源哦。


>>>>

Docker 安裝


具體安裝細(xì)節(jié),可以參照https://docs.,文檔說得很清楚了。 Docker原本是開發(fā)在Linux上的,Windows下是采用Docker machine的方式,起一個(gè)虛擬機(jī)在虛擬機(jī)里面跑Docker。本來呢Mac也是采用虛擬機(jī)的方式,后來有了Docker for mac,采用HyperKit,一種更輕量級(jí)的虛擬化方式。當(dāng)然,你還是可以用Docker machine的方式運(yùn)行。


>>>>

Docker 基礎(chǔ)


搞清楚兩個(gè)概念,容器與鏡像。打個(gè)比方吧。裝機(jī),容器就是裝完成后的系統(tǒng),鏡像就是ISO安裝盤,系統(tǒng)鏡像。


作為一個(gè)合格的程序員,你一定用過Git的吧,pull,commit,push……寫代碼過程就是這樣,先拉取代碼pull,然后是在一個(gè)基礎(chǔ)的文本上不斷地增加commit,加積木一樣,一層層疊加,累積上去,最后再push上去。沒錯(cuò)Docker就是采用這種形式。


簡單介紹下Docker命令:


  • Docker version / Docker info 查看基本信息,遇到使用問題或者BUG,可以到社區(qū)里報(bào)告,記得帶著這些信息哈。

  • Docker pull 拉取鏡像。

  • Docker run 從鏡像創(chuàng)建一個(gè)容器并運(yùn)行指定的命令常用參數(shù)-i -d,建議用—-name命名這個(gè)容器,命名后可以使用容器名訪問這個(gè)容器。

  • Docker attach(不推薦使用)。

  • Docker exec -ti CONTAINER /bin/bash 連接到容器上運(yùn)行bash

  • Docker logs CONTAINER 查看日志,如run命令后的運(yùn)行結(jié)果,Docker logs -f 查看實(shí)時(shí)的日志。

  • Docker kill 殺死Docker容器進(jìn)程,你可以使用Docker kill $(Docker ps -aq)殺死所有的Docker進(jìn)程,后者打印出所有的容器的容器id(包括正在運(yùn)行的,和沒有運(yùn)行的)。

  • Docker rm CONTAINER 刪除一個(gè)容器,記得要先停止正在運(yùn)行的容器,再去刪除它。

  • Docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/容器外向容器內(nèi)復(fù)制文件(也可以用掛載的形式哦)。

  • Docker commit -a “mike” -m “鏡像的一些改動(dòng)” CONTAINER 當(dāng)你在容器內(nèi)做了某種操作后,如增加了一個(gè)文件,你可以用這個(gè)命令把修改提交,重新打包為鏡像。

  • Docker push **鏡像。。到這里是不是覺得跟Git的模式已經(jīng)有點(diǎn)像了呢。

  • Docker history IMAGES 查看鏡像的修改歷史。

  • Docker ps -a | grep "Exited" | awk '{print $1 }'| xargs Docker rm 刪除exited的容器。

  • Docker rmi $(Docker images | awk '/^<none>/ {print $3}') 刪除tag為NONE的容器。


>>>>

Dockerfile基礎(chǔ)


Dokcerfile,是的,你還是要稍微掌握下Dockerfile的寫法。


  • From 每個(gè)Dockerfile鏡像的構(gòu)建都會(huì)基于一個(gè)基礎(chǔ)鏡像,這是你一來的基礎(chǔ)鏡像name:tag,git。

  • MAINTAINER (不用記,作者簽名)。

  • ENV 配置環(huán)境變量。

  • COPY 復(fù)制本地。

  • EXPOSE 暴露容器的端口。

  • WORKDIR 后續(xù)命令的執(zhí)行路徑。

  • RUN important!,執(zhí)行相應(yīng)的命令,這一步是在容器構(gòu)建這一步中執(zhí)行的命令,一般用作安裝軟件,操作的結(jié)果是持久化在容器里面保存下來的。

    Tips:每次執(zhí)行RUN的時(shí)候都是再默認(rèn)路徑執(zhí)行的,如果要到固定路徑下執(zhí)行命令請(qǐng)?jiān)谥凹覹ORKDIR,或者使用RUN (cd workpath && echo "mike")這樣把cd命令跟相應(yīng)的執(zhí)行命令用括號(hào)括起來。

  • ENTRYPOINT 容器啟動(dòng)后執(zhí)行的命令。


三、Jenkins+Docker自動(dòng)化集成環(huán)境搭建


這一步,我們把Jenkins和Docker結(jié)合起來。Jenkins本身版本比較老,雖然插件多,但許多插件沒有人在維護(hù)更新,環(huán)境本身還是比較舊的,且各式各樣的工程如果都用插件來安裝,這樣的插件不一定滿足要求,所以建議配合Docker來搭建測試環(huán)境。


如果說好處的話,還有比較激進(jìn)的一段話(建議略過哈):


我們把一個(gè)工程代碼開發(fā)后的測試流程簡單分為編譯、部署(事實(shí)上可能更多,如項(xiàng)目代碼有多個(gè)工程,工程間有相互依賴)。如果我們想在一個(gè)slave節(jié)點(diǎn)上既運(yùn)行Java7應(yīng)用,又運(yùn)行Java8應(yīng)用,哦,Jenkins有相應(yīng)的插件解決?那如果是NodeJs4應(yīng)用和NodeJs5應(yīng)用呢?JAVA升級(jí)到9了,插件沒更新?像一些復(fù)雜的工程,如JDK自身的編譯、如Docker項(xiàng)目的編譯,我需要安裝各種依賴,就可能會(huì)污染全局空間,這時(shí)候就建議把編譯過程放到容器里,或者說我要在Linux上編譯部署一個(gè)Windows應(yīng)用,在一個(gè)Windows容器里部署就可以了。


再比如,如果我們用omad部署web應(yīng)用可能要考慮端口沖突,部在Docker容器里,工程代碼的端口,都不用變。還有,容器作測試環(huán)境的話,如果要保證線上,線下環(huán)境一致,甚至可以復(fù)制一個(gè)線下容器,直接在線上跑容器的。還有......


大致的想法是,我們用Jenkins來做節(jié)點(diǎn)控制、版本管理、流程設(shè)置、觸發(fā)Job,用Docker來搭建編譯部署環(huán)境。把這一切連接起來的就是流程腳本和Dockerfile的編寫。


實(shí)現(xiàn)細(xì)節(jié)可以參照下面的示例。


觸發(fā)條件:由Jenkins控制,如設(shè)置定時(shí)執(zhí)行,或者github中的每一個(gè)commit,或者每一個(gè)PR執(zhí)行一次。


構(gòu)建流程:各個(gè)環(huán)節(jié),Job,之間用Pipeline來實(shí)現(xiàn)整個(gè)構(gòu)建流程的控制。


構(gòu)建Job:這里,我覺得可以分為兩種情況,一種是把拉取代碼的過程和構(gòu)建編譯環(huán)境的過程都放到Dockfile里面,這適用于比較復(fù)雜的編譯環(huán)境,如Docker本身的編譯需要安裝許多的依賴,對(duì)依賴的版本都有不同的要求,還是建議把編譯環(huán)境放在容器的里面。另一種情況,為求省事方便,如java工程,編譯一般用maven等構(gòu)建工具來完成的話,大可以放在外面,只是把運(yùn)行環(huán)境搬到Docker容器里。


Execute shell:



Dockerfile:


配置基礎(chǔ)運(yùn)行環(huán)境。


如果需要編譯,配置編譯環(huán)境,可以在容器內(nèi)拉取代碼,執(zhí)行編譯。


web應(yīng)用暴露端口。


配置應(yīng)用啟動(dòng)命令。



另外,容器里你都可以配置成8080端口,暴露8080端口,只要再Docker run -p *:8080,運(yùn)行時(shí)改下相應(yīng)的端口映射就可以了。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多