Docker系列之Jenkins自動化部署

Devops的概念已經火了很久了,我一直想對這方面進行一定的了解;再加上實驗室項目環境依賴比較復雜,希望使用Docker來解決,所以最近就好好研究了一波Docker的相關實踐和原理。這里整理一下,希望組成一個系列,從實踐到原理詳細講解一下Docker的使用。
?第一篇就講一下Jenkins+Docker的自動化部署實踐。大致的流程如下:目前我有兩個服務器,分別是阿里云和bandwagon,代碼存儲在github上,每次push都會觸發阿里云上的jenkins的構建任務,jenkins將github上的代碼fetch到本地,編譯打包成war文件,生成docker image并上傳到docker registry上,然后通過ssh來登錄bandwagon服務器pull下來新生成的image并啟動。由于篇幅問題,本篇文章不會介紹有關docker image的build和docker registry的搭建,但是我會在后續文章中再做詳細講解。
?學習Docker,我推薦先在網絡上找說明指南,一步一步自己嘗試的使用,然后如果覺得有必要可以看一下《Docker容器和容器云》這本書。
?本文內容都是docker和jenkins的基礎知識,為了節約你的時間,本文的主要內容如下:

  • docker 基礎命令
  • jenkins docker版本的搭建,構建任務的配置
  • Pubish Over SSH 安裝和配置
  • 通過github的webhook來觸發jenkins構建任務

Docker運行jenkins

Docker如此火爆的一個原因是因為它形成了一個良好的生態圈,基本上主流的軟件應用都有相應的Docker image。如果大家不清楚Docker image的含義,建議大家看一下Docker中文指南,我們可以通過docker pull命令來下載響應的image,然后運行。比如我們希望在阿里云服務器上部署一個jenkins應用,首先可以執行下列語句來獲取一個jenkins的image。

docker pull jenkinsci/jenkins:lts

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

下載成功之后,你可以使用docker images命令來查看當前下載的image信息

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

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

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

  • -d 后臺運行docker容器并打印容器ID。如果不加-d參數,那么容器運行會和終端綁定,如果終端關閉,那么容器也會關閉,但是容器不會被刪除。但是如果你只是想試一試某個容器,運行后自動進入命令行,那么可以使用-it參數;如果你想容器關閉之后自動刪除,那么就使用-rm參數。

  • --name 給docker container起一個別名,后續可以通過別名來管理容器,否在會系統會默認分配一個隨機的別名。

  • -p docker容器和外側的端口映射,jenkins服務是運行在docker容器內部的,但是docker容器默認不對外暴露接口,所以通過這個參數將內部的8080端口映射到服務器本身的9090端口上。

  • -v 數據卷的掛載。這里涉及到docker container的一個特性,container如果停止運行了,那么再次啟動時,之前所有運行相關的數據和文件就都不存在了,就類似于設置了自動還原的電腦一般,無論你做了多少的操作,一旦關機重啟之后就又恢復到最初的狀態。數據卷就是來解決上述問題的,通過Docker container外部的文件夾的掛載,將可持久化的文件存儲到外部掛載的文件夾中。

然后你就可以根據你自己的ip地址來鍵入下列地址http:ip:9090來訪問jenkins的主頁了。
?這里有一點需要注意的是,需要注意你阿里云服務器設置的網絡安全協議,是否禁用掉了9090這個端口。

Publish over SSH配置

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

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

?最后我們需要修改目標服務器的ssh配置文件,配置文件為/etc/ssh/sshd_config。設置ssh-server允許使用私鑰和公鑰對的方式登錄,然后使用sudo /etc/init.d/ssh restart命令重啟ssh服務。

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

?上述步驟成功之后,大家在系統管理中配置Publish over SSH。相關的配置信息如下圖所示。

jenkins1.png

?你還可以點擊下方的高級選項,來配置ssh服務器的端口,超時時間等信息,還可以點擊Test Configuration來檢測是否配置成功。

構建任務配置

?我們先創建一個構建任務,該任務從github repo上將代碼拉取下來,然后執行構建任務,然后通過Publish Over SSH在目標服務器上進行部署。
?我們首先配置源碼管理模塊,選擇Git選項,然后配置Repository URL 并添加認證信息。可以將自己的github帳號和密碼加入其中。

jenkins2.png

?不同的項目的構建命令不同,但是我們可以在構建后操作模塊設置后續操作,通過ssh登錄目標服務器,讓目標服務器執行命令行操作來pull最新上傳的image并且執行,這樣就完成了部署。

jenkins3.png

Push觸發構建任務

?完成上述配置,你就可以手動在jenkins上啟動構架任務了,但是要做到自動化部署,還必須設置Push操作自動觸發jenkins構建任務的機制。
?我們先到首頁-用戶管理界面打開自己的用戶界面,然后點擊左側的設置按鈕,并點擊show API token按鈕來獲取API token.然后在構建任務設置頁面的構建觸發器模塊勾選觸發遠程構建選項,并將token填到里邊去。這是jenkins會提示你如何通過URL來觸發構建任務。

jenkins5.png

?然后我們打開github上相應庫的設置頁面。點擊左側的Webhooks選項,然后添加hook.將上述的url填寫到Payload URL欄中,點擊添加。如果添加成功之后,每次你push一個新版本,那么jenkins就會自動進行部署了。


jenkins6.png

?如果你發現webhooks發送請求失敗,那可能是因為你jenkins安全設置的問題,禁止掉了發送請求自動化構建。

后記

?本篇講的都是十分基礎性的內容,后一篇文章講一下dockerfile的原理和注意事項與docker registry。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,882評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,208評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,746評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,666評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,477評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,960評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,200評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,726評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,617評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,807評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,049評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,425評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,674評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,432評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,769評論 2 372

推薦閱讀更多精彩內容