Docker系列之Jenkins自動化部署

Devops的概念已經(jīng)火了很久了,我一直想對這方面進(jìn)行一定的了解掌猛;再加上實(shí)驗(yàn)室項(xiàng)目環(huán)境依賴比較復(fù)雜盏浙,希望使用Docker來解決,所以最近就好好研究了一波Docker的相關(guān)實(shí)踐和原理荔茬。這里整理一下废膘,希望組成一個系列,從實(shí)踐到原理詳細(xì)講解一下Docker的使用慕蔚。
?第一篇就講一下Jenkins+Docker的自動化部署實(shí)踐丐黄。大致的流程如下:目前我有兩個服務(wù)器,分別是阿里云和bandwagon,代碼存儲在github上孔飒,每次push都會觸發(fā)阿里云上的jenkins的構(gòu)建任務(wù)灌闺,jenkins將github上的代碼fetch到本地,編譯打包成war文件坏瞄,生成docker image并上傳到docker registry上桂对,然后通過ssh來登錄bandwagon服務(wù)器pull下來新生成的image并啟動。由于篇幅問題惦积,本篇文章不會介紹有關(guān)docker image的build和docker registry的搭建接校,但是我會在后續(xù)文章中再做詳細(xì)講解。
?學(xué)習(xí)Docker,我推薦先在網(wǎng)絡(luò)上找說明指南蛛勉,一步一步自己嘗試的使用鹿寻,然后如果覺得有必要可以看一下《Docker容器和容器云》這本書。
?本文內(nèi)容都是docker和jenkins的基礎(chǔ)知識诽凌,為了節(jié)約你的時間毡熏,本文的主要內(nèi)容如下:

  • docker 基礎(chǔ)命令
  • jenkins docker版本的搭建,構(gòu)建任務(wù)的配置
  • Pubish Over SSH 安裝和配置
  • 通過github的webhook來觸發(fā)jenkins構(gòu)建任務(wù)

Docker運(yùn)行jenkins

Docker如此火爆的一個原因是因?yàn)樗纬闪艘粋€良好的生態(tài)圈侣诵,基本上主流的軟件應(yīng)用都有相應(yīng)的Docker image痢法。如果大家不清楚Docker image的含義,建議大家看一下Docker中文指南杜顺,我們可以通過docker pull命令來下載響應(yīng)的image,然后運(yùn)行财搁。比如我們希望在阿里云服務(wù)器上部署一個jenkins應(yīng)用,首先可以執(zhí)行下列語句來獲取一個jenkins的image躬络。

docker pull jenkinsci/jenkins:lts

這里我們使用pull從docker registry上拉取image,但是目前業(yè)界上有很多共有或在私有的docker registry,比如說docker hub和daoCloud尖奔。所以image的全稱就由三部分組成:域名或在ip + / + 軟件名稱 + : + 版本號,所以上邊的這條命令就是讓docker去jenkinsci這個Jenkins機(jī)構(gòu)自己部署的registry上下載jenkins的lts版本的image.你也可以直接使用docker pull jenkins來下載image,但docker會默認(rèn)的從docker hub上下載jenkins的laster版本穷当。

下載成功之后提茁,你可以使用docker images命令來查看當(dāng)前下載的image信息

你可以通過docker run命令來運(yùn)行docker容器,請注意我這里的用詞馁菜,在Docker中image和container是不同的概念茴扁,你可以將他們簡單的理解成Java中類和對象的關(guān)系。我們使用下面的命令來啟動這個jenkins容器汪疮。

sudo docker run -d --name jenkins -p 9090:8080 -v /var/jenkins_home:/var/jenkins_home jenkinsci/jenkins:lts

我們來依次講解一下run命令的幾個參數(shù)把:

  • -d 后臺運(yùn)行docker容器并打印容器ID峭火。如果不加-d參數(shù),那么容器運(yùn)行會和終端綁定铲咨,如果終端關(guān)閉躲胳,那么容器也會關(guān)閉,但是容器不會被刪除纤勒。但是如果你只是想試一試某個容器坯苹,運(yùn)行后自動進(jìn)入命令行,那么可以使用-it參數(shù);如果你想容器關(guān)閉之后自動刪除摇天,那么就使用-rm參數(shù)粹湃。

  • --name 給docker container起一個別名,后續(xù)可以通過別名來管理容器泉坐,否在會系統(tǒng)會默認(rèn)分配一個隨機(jī)的別名为鳄。

  • -p docker容器和外側(cè)的端口映射,jenkins服務(wù)是運(yùn)行在docker容器內(nèi)部的腕让,但是docker容器默認(rèn)不對外暴露接口孤钦,所以通過這個參數(shù)將內(nèi)部的8080端口映射到服務(wù)器本身的9090端口上歧斟。

  • -v 數(shù)據(jù)卷的掛載。這里涉及到docker container的一個特性偏形,container如果停止運(yùn)行了静袖,那么再次啟動時,之前所有運(yùn)行相關(guān)的數(shù)據(jù)和文件就都不存在了俊扭,就類似于設(shè)置了自動還原的電腦一般队橙,無論你做了多少的操作,一旦關(guān)機(jī)重啟之后就又恢復(fù)到最初的狀態(tài)萨惑。數(shù)據(jù)卷就是來解決上述問題的捐康,通過Docker container外部的文件夾的掛載,將可持久化的文件存儲到外部掛載的文件夾中庸蔼。

然后你就可以根據(jù)你自己的ip地址來鍵入下列地址http:ip:9090來訪問jenkins的主頁了解总。
?這里有一點(diǎn)需要注意的是,需要注意你阿里云服務(wù)器設(shè)置的網(wǎng)絡(luò)安全協(xié)議朱嘴,是否禁用掉了9090這個端口倾鲫。

Publish over SSH配置

?Jenkins的初始化配置和SSH Over Publish的安裝請大家自行百度粗合,這里我主要講解一下SSH Over Pushlish配置萍嬉。
?首先我們要在jenkins服務(wù)器上生成密鑰對,使用ssh-keygen -t rsa命令來生成秘密對隙疚,這樣的話壤追,在~/.ssh/下就會有私鑰id_rsa和公鑰id_rsa.pub。
?然后你需要上傳公鑰到目標(biāo)服務(wù)器上供屉,也就是我的bandwagon服務(wù)器上行冰,可以使用ssh-copy-id來將文件上傳到服務(wù)器上,類似于scp命令的使用方式伶丐。

ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<host>

?最后我們需要修改目標(biāo)服務(wù)器的ssh配置文件悼做,配置文件為/etc/ssh/sshd_config。設(shè)置ssh-server允許使用私鑰和公鑰對的方式登錄哗魂,然后使用sudo /etc/init.d/ssh restart命令重啟ssh服務(wù)肛走。

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile     %h/.ssh/authorized_keys

?上述步驟成功之后,大家在系統(tǒng)管理中配置Publish over SSH录别。相關(guān)的配置信息如下圖所示朽色。

jenkins1.png

?你還可以點(diǎn)擊下方的高級選項(xiàng),來配置ssh服務(wù)器的端口组题,超時時間等信息葫男,還可以點(diǎn)擊Test Configuration來檢測是否配置成功。

構(gòu)建任務(wù)配置

?我們先創(chuàng)建一個構(gòu)建任務(wù)崔列,該任務(wù)從github repo上將代碼拉取下來梢褐,然后執(zhí)行構(gòu)建任務(wù),然后通過Publish Over SSH在目標(biāo)服務(wù)器上進(jìn)行部署。
?我們首先配置源碼管理模塊盈咳,選擇Git選項(xiàng)趣效,然后配置Repository URL 并添加認(rèn)證信息≈硖埃可以將自己的github帳號和密碼加入其中跷敬。

jenkins2.png

?不同的項(xiàng)目的構(gòu)建命令不同,但是我們可以在構(gòu)建后操作模塊設(shè)置后續(xù)操作热押,通過ssh登錄目標(biāo)服務(wù)器西傀,讓目標(biāo)服務(wù)器執(zhí)行命令行操作來pull最新上傳的image并且執(zhí)行,這樣就完成了部署桶癣。

jenkins3.png

Push觸發(fā)構(gòu)建任務(wù)

?完成上述配置拥褂,你就可以手動在jenkins上啟動構(gòu)架任務(wù)了,但是要做到自動化部署牙寞,還必須設(shè)置Push操作自動觸發(fā)jenkins構(gòu)建任務(wù)的機(jī)制饺鹃。
?我們先到首頁-用戶管理界面打開自己的用戶界面,然后點(diǎn)擊左側(cè)的設(shè)置按鈕间雀,并點(diǎn)擊show API token按鈕來獲取API token.然后在構(gòu)建任務(wù)設(shè)置頁面的構(gòu)建觸發(fā)器模塊勾選觸發(fā)遠(yuǎn)程構(gòu)建選項(xiàng)悔详,并將token填到里邊去。這是jenkins會提示你如何通過URL來觸發(fā)構(gòu)建任務(wù)惹挟。

jenkins5.png

?然后我們打開github上相應(yīng)庫的設(shè)置頁面茄螃。點(diǎn)擊左側(cè)的Webhooks選項(xiàng),然后添加hook.將上述的url填寫到Payload URL欄中连锯,點(diǎn)擊添加归苍。如果添加成功之后,每次你push一個新版本运怖,那么jenkins就會自動進(jìn)行部署了拼弃。


jenkins6.png

?如果你發(fā)現(xiàn)webhooks發(fā)送請求失敗,那可能是因?yàn)槟鉰enkins安全設(shè)置的問題摇展,禁止掉了發(fā)送請求自動化構(gòu)建吻氧。

后記

?本篇講的都是十分基礎(chǔ)性的內(nèi)容,后一篇文章講一下dockerfile的原理和注意事項(xiàng)與docker registry吗购。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末医男,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捻勉,更是在濱河造成了極大的恐慌镀梭,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踱启,死亡現(xiàn)場離奇詭異报账,居然都是意外死亡研底,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門透罢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榜晦,“玉大人,你說我怎么就攤上這事羽圃∏海” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵朽寞,是天一觀的道長识窿。 經(jīng)常有香客問我,道長脑融,這世上最難降的妖魔是什么喻频? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮肘迎,結(jié)果婚禮上甥温,老公的妹妹穿的比我還像新娘。我一直安慰自己妓布,他們只是感情好姻蚓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著秋茫,像睡著了一般史简。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肛著,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機(jī)與錄音跺讯,去河邊找鬼枢贿。 笑死,一個胖子當(dāng)著我的面吹牛刀脏,可吹牛的內(nèi)容都是我干的局荚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼愈污,長吁一口氣:“原來是場噩夢啊……” “哼耀态!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起暂雹,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤首装,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后杭跪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仙逻,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驰吓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了系奉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片檬贰。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缺亮,靈堂內(nèi)的尸體忽然破棺而出翁涤,到底是詐尸還是另有隱情,我是刑警寧澤萌踱,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布迷雪,位于F島的核電站,受9級特大地震影響虫蝶,放射性物質(zhì)發(fā)生泄漏章咧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一能真、第九天 我趴在偏房一處隱蔽的房頂上張望赁严。 院中可真熱鬧,春花似錦粉铐、人聲如沸疼约。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽程剥。三九已至,卻和暖如春汤踏,著一層夾襖步出監(jiān)牢的瞬間织鲸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工溪胶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搂擦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓哗脖,卻偏偏與公主長得像瀑踢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子才避,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容