如何使用 Jenkins社搅、GitHub 和 Docker 在 Azure 中的 Linux VM 上創(chuàng)建開發(fā)基礎結構

若要將應用程序開發(fā)的生成和測試階段自動化,可以使用持續(xù)集成和部署 (CI/CD) 管道乳规。 本教程介紹如何在 Azure VM 上創(chuàng)建 CI/CD 管道形葬,包括如何:

創(chuàng)建 Jenkins VM

安裝并配置 Jenkins

創(chuàng)建 GitHub 與 Jenkins 之間的 Webhook 集成

通過 GitHub 提交創(chuàng)建并觸發(fā) Jenkins 生成作業(yè)

創(chuàng)建應用的 Docker 映像

驗證 GitHub 提交是否生成新的 Docker 映像并更新正在運行的應用

Note

在 Azure 中國區(qū)使用 Azure CLI 2.0 之前,請先運行az cloud set -n AzureChinaCloud來改變云環(huán)境暮的。如果想切回國際版 Azure笙以,請再次運行az cloud set -n AzureCloud。

如果選擇在本地安裝并使用 CLI冻辩,本教程要求運行 Azure CLI 2.0.4 或更高版本猖腕。 運行az --version即可查找版本拆祈。 如果需要進行安裝或升級,請參閱安裝 Azure CLI 2.0倘感。

創(chuàng)建 Jenkins 實例

在有關如何在首次啟動時自定義 Linux 虛擬機的上一個教程中放坏,你已了解如何使用 cloud-init 自動執(zhí)行 VM 自定義。 本教程使用 cloud-init 文件在 VM 上安裝 Jenkins 和 Docker老玛。

在當前 shell 中淤年,創(chuàng)建名為“cloud-init.txt”的文件并粘貼下面的配置。 請確保已正確復制整個 cloud-init 文件逻炊,尤其是第一行:

yaml復制

#cloud-configpackage_upgrade:truewrite_files:- path:/etc/systemd/system/docker.service.d/docker.confcontent:|

[Service]

ExecStart=

ExecStart=/usr/bin/dockerd- path:/etc/docker/daemon.jsoncontent:|

{

"hosts": ["fd://","tcp://127.0.0.1:2375"]

}runcmd:-wget-q-O-https://jenkins-ci.org/debian/jenkins-ci.org.key| apt-key add -

- sh -c 'echo deb http://pkg.jenkins-ci.org/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

- apt-get update && apt-get install jenkins -y

- curl -sSL https://get.docker.com/ | sh

- usermod -aG docker azureuser

- usermod -aG docker jenkins

- service jenkins restart

Note

在 Azure 中國區(qū)使用 Azure CLI 2.0 之前,請先運行az cloud set -n AzureChinaCloud來改變云環(huán)境犁享。如果想切回國際版 Azure余素,請再次運行az cloud set -n AzureCloud。

使用az group create創(chuàng)建資源組炊昆,然后才能創(chuàng)建 VM桨吊。 以下示例在chinaeast位置創(chuàng)建名為myResourceGroupJenkins的資源組:

Azure CLI復制

azgroupcreate--namemyResourceGroupJenkins--locationchinaeast

現(xiàn)在,請使用az vm create創(chuàng)建 VM凤巨。 使用--custom-data參數(shù)傳入 cloud-init 配置文件视乐。 如果已將cloud-init-jenkins.txt文件保存在現(xiàn)有工作目錄的外部,請?zhí)峁┰撐募耐暾窂健?/p>

Azure CLI復制

azvmcreate--resource-groupmyResourceGroupJenkins \--namemyVM \--imageUbuntuLTS \--admin-usernameazureuser \--generate-ssh-keys\--custom-datacloud-init-jenkins.txt

創(chuàng)建并配置 VM 需要幾分鐘的時間敢茁。

若要允許 Web 流量抵達 VM佑淀,請使用az vm open-port為 Jenkins 流量打開端口8080,并為用于運行示例應用的 Node.js 應用打開端口1337

Azure CLI復制

azvmopen-port--resource-groupmyResourceGroupJenkins--namemyVM--port8080--priority1001azvmopen-port--resource-groupmyResourceGroupJenkins--namemyVM--port1337--priority1002

配置 Jenkins

若要訪問 Jenkins 實例彰檬,請獲取 VM 的公共 IP 地址:

Azure CLI復制

azvmshow--resource-groupmyResourceGroupJenkins--namemyVM-d--query[publicIps]--otsv

出于安全考慮伸刃,需要輸入 VM 上某個文本文件中存儲的初始管理員密碼來啟動 Jenkins 安裝。 使用上一步驟中獲取的公共 IP 地址通過 SSH 連接到 VM:

bash復制

ssh azureuser@

查看并復制 Jenkins 安裝程序的initialAdminPassword:

bash復制

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

如果文件尚不可用逢倍,請再等待幾分鐘捧颅,以便 cloud-init 完成 Jenkins 和 Docker 安裝。

現(xiàn)在较雕,請打開 Web 瀏覽器并轉到http://:8080碉哑。 按如下所示完成初始 Jenkins 安裝:

輸入在上一步驟從 VM 獲取的initialAdminPassword

選擇“選擇要安裝的插件”

在頂部文本框中搜索 GitHub亮蒋,選擇“GitHub 插件”扣典,然后選擇“安裝”

若要創(chuàng)建 Jenkins 用戶帳戶,請根據(jù)需要填寫表單慎玖。 從安全角度講激捏,應該創(chuàng)建這第一個 Jenkins 用戶,而不要繼續(xù)使用默認管理員帳戶凄吏。

完成后远舅,選擇“開始使用 Jenkins”

創(chuàng)建 GitHub Webhook

若要配置與 GitHub 的集成闰蛔,請從 Azure 示例存儲庫中打開Node.js Hello World 示例應用。 若要將存儲庫分叉到自己的 GitHub 帳戶图柏,請選擇右上角的“分叉”按鈕序六。

在創(chuàng)建的分叉中創(chuàng)建 Webhook:

選擇“設置”,然后在左側選擇“集成和服務”蚤吹。

選擇“添加服務”例诀,并在篩選框中輸入 Jenkins。

選擇“Jenkins (GitHub 插件)”

對于“Jenkins 掛鉤 URL”裁着,請輸入http://:8080/github-webhook/繁涂。 請確保包含尾部的 /

選擇“添加服務”

創(chuàng)建 Jenkins 作業(yè)

若要讓 Jenkins 對 GitHub 中的事件(例如提交代碼)做出響應,請創(chuàng)建 Jenkins 作業(yè)二驰。

在 Jenkins 網(wǎng)站中的主頁上扔罪,選擇“創(chuàng)建新作業(yè)”:

輸入HelloWorld作為作業(yè)名稱。 選擇“自由風格項目”桶雀,然后選擇“確定”矿酵。

在“常規(guī)”部分下面,選擇“GitHub”項目并輸入分叉的存儲庫的 URL矗积,例如https://github.com/iainfoulds/nodejs-docs-hello-world

在“源代碼管理”部分下面全肮,選擇“Git”并輸入分叉的存儲庫.git的 URL,例如https://github.com/iainfoulds/nodejs-docs-hello-world.git

在“生成觸發(fā)器”部分下面棘捣,選擇“用于 GITscm 輪詢的 GitHub 掛鉤觸發(fā)器”辜腺。

在“生成”部分下面,選擇“添加生成步驟”乍恐。 選擇“執(zhí)行 shell”哪自,然后在命令窗口中輸入echo "Testing"。

選擇作業(yè)窗口底部的“保存”禁熏。

測試 GitHub 集成

若要測試 GitHub 與 Jenkins 的集成壤巷,請?zhí)峤环植嬷械母摹?/p>

返回到 GitHub Web UI,選擇分叉的存儲庫瞧毙,然后選擇“index.js”文件胧华。 選擇鉛筆圖標編輯該文件,使第 6 行的內容如下:

NodeJS復制

response.end("Hello World!");

若要提交更改宙彪,請選擇底部的“提交更改”按鈕矩动。

在 Jenkins 中,作業(yè)頁左下角的“生成歷史記錄”部分下面啟動了一個新的生成释漆。 選擇生成號鏈接悲没,并選擇左側的“控制臺輸出”。 從 GitHub 提取代碼以及生成操作將消息Testing輸出到控制臺時男图,可以查看 Jenkins 執(zhí)行的步驟示姿。 每次在 GitHub 中提交內容時甜橱,Webhook 將以此方式訪問 Jenkins 并觸發(fā)新的生成。

定義 Docker 生成映像

為了查看基于 GitHub 提交內容運行的 Node.js 應用栈戳,讓我們生成一個 Docker 映像用于運行該應用岂傲。 該映像是從定義如何配置運行應用的容器的 Dockerfile 生成的。

通過 SSH 連接到 VM 后子檀,請切換到根據(jù)上一步驟創(chuàng)建的作業(yè)命名的 Jenkins 工作區(qū)目錄镊掖。 在本示例中,該目錄名為HelloWorld褂痰。

bash復制

cd/var/lib/jenkins/workspace/HelloWorld

使用sudo sensible-editor Dockerfile在此工作區(qū)目錄中創(chuàng)建一個文件并粘貼以下內容亩进。 請確保已正確復制整個 Dockerfile,尤其是第一行:

yaml復制

FROMnode:alpineEXPOSE1337WORKDIR/var/wwwCOPYpackage.json/var/www/RUNnpminstallCOPYindex.js/var/www/

此 Dockerfile 使用基本 Node.js 映像(該映像使用 Alpine Linux)缩歪,公開運行 Hello World 應用的端口 1337归薛,然后復制應用文件并初始化應用。

創(chuàng)建 Jenkins 生成規(guī)則

在上一步驟中驶冒,已創(chuàng)建一個可將消息輸出到控制臺的基本 Jenkins 生成規(guī)則苟翻。 讓我們創(chuàng)建生成步驟以使用 Dockerfile 并運行應用韵卤。

返回到 Jenkins 實例骗污,選擇上一步驟創(chuàng)建的作業(yè)。 選擇左側的“配置”沈条,并向下滾動到“生成”部分:

刪除現(xiàn)有的echo "Test"生成步驟需忿。 選擇現(xiàn)有生成步驟框右上角的紅叉。

選擇“添加生成步驟”蜡歹,然后選擇“執(zhí)行 shell”

在“命令”框中輸入以下 Docker 命令屋厘,然后選擇“保存”:

bash復制

docker build --tag helloworld:$BUILD_NUMBER.docker stop helloworld && docker rm helloworlddocker run --name helloworld -p 1337:1337 helloworld:$BUILD_NUMBERnode /var/www/index.js &

Docker 生成步驟將創(chuàng)建一個映像,并使用 Jenkins 生成編號對其進行標記月而,以便可以維護映像的歷史記錄汗洒。 運行應用的任何現(xiàn)有容器將會停止,隨后被刪除父款。 然后溢谤,將使用該映像啟動新的容器,并基于 GitHub 中的最新提交內容運行 Node.js 應用憨攒。

測試管道

若要查看整個管道的工作狀況世杀,請再次在分叉的 GitHub 存儲庫中編輯 index.js 文件,并選擇“提交更改”肝集。 將會基于 GitHub 的 Webhook 在 Jenkins 中啟動新作業(yè)瞻坝。 創(chuàng)建 Docker 映像并在新容器中啟動應用需要幾秒鐘時間。

如果需要杏瞻,請再次獲取 VM 的公共 IP 地址:

Azure CLI復制

azvmshow--resource-groupmyResourceGroupJenkins--namemyVM-d--query[publicIps]--otsv

打開 Web 瀏覽器并輸入http://:1337所刀。 將顯示你的 Node.js 應用衙荐,其中反映了 GitHub 分叉中的最新提交內容,如下所示:

現(xiàn)在勉痴,請再次在 GitHub 中編輯index.js赫模,然后提交更改。 等待幾秒鐘讓作業(yè)在 Jenkins 中完成蒸矛,然后刷新 Web 瀏覽器查看新容器中運行的應用的更新版本瀑罗,如下所示:

后續(xù)步驟

在本教程中,你已將 GitHub 配置為每次提交代碼后運行 Jenkins 生成作業(yè)雏掠,然后部署了一個 Docker 容器用于測試應用斩祭。 你已了解如何:

創(chuàng)建 Jenkins VM

安裝并配置 Jenkins

創(chuàng)建 GitHub 與 Jenkins 之間的 Webhook 集成

通過 GitHub 提交創(chuàng)建并觸發(fā) Jenkins 生成作業(yè)

創(chuàng)建應用的 Docker 映像

驗證 GitHub 提交是否生成新的 Docker 映像并更新正在運行的應用

轉到下一教程,詳細了解如何將 Jenkins 與 Visual Studio Team Services 集成乡话。

使用 Jenkin

立即訪問http://market.azure.cn

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末摧玫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绑青,更是在濱河造成了極大的恐慌诬像,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闸婴,死亡現(xiàn)場離奇詭異坏挠,居然都是意外死亡,警方通過查閱死者的電腦和手機邪乍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門降狠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人庇楞,你說我怎么就攤上這事榜配。” “怎么了吕晌?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵蛋褥,是天一觀的道長。 經(jīng)常有香客問我睛驳,道長烙心,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任柏靶,我火速辦了婚禮弃理,結果婚禮上,老公的妹妹穿的比我還像新娘屎蜓。我一直安慰自己痘昌,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辆苔,像睡著了一般算灸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音悬荣,去河邊找鬼。 笑死赊瞬,一個胖子當著我的面吹牛,可吹牛的內容都是我干的贼涩。 我是一名探鬼主播巧涧,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼遥倦!你這毒婦竟也來了谤绳?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤袒哥,失蹤者是張志新(化名)和其女友劉穎缩筛,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堡称,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡瞎抛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了粮呢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婿失。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡钞艇,死狀恐怖啄寡,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情哩照,我是刑警寧澤挺物,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站飘弧,受9級特大地震影響识藤,放射性物質發(fā)生泄漏。R本人自食惡果不足惜次伶,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一痴昧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冠王,春花似錦赶撰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽餐胀。三九已至,卻和暖如春瘤载,著一層夾襖步出監(jiān)牢的瞬間否灾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工鸣奔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留墨技,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓挎狸,卻偏偏與公主長得像健提,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子伟叛,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容