如何使用 CircleCI 設(shè)置 CI/CD 并將您的 NodeJS 項(xiàng)目部署到遠(yuǎn)程服務(wù)器
在本文中,我將與您分享 CI/CD 的概念并將其應(yīng)用到實(shí)際場景中。
目錄:
什么是 CI/CD,為什么要使用 CI/CD
為什么選擇 CircleCI
Node.js 演示 — Bitbucket — CircleCI
什么是 CI/CD,為什么要使用 CI/CD
CI/CD 代表持續(xù)集成和持續(xù)交付。
持續(xù)集成是將來自多個開發(fā)人員的所有代碼更改自動合并到一個共享存儲庫中的過程。然后每個集成都由一個自動化工具進(jìn)行驗(yàn)證,該工具會檢查代碼風(fēng)格并在每次構(gòu)建之前運(yùn)行測試。
持續(xù)交付通過在構(gòu)建階段之后將所有代碼更改部署到測試環(huán)境和/或生產(chǎn)環(huán)境來擴(kuò)展持續(xù)集成。換句話說,全新的功能、錯誤修復(fù)……將經(jīng)常交付給測試人員/用戶。
→ 這種 CI/CD 的做法大大降低了開發(fā)人員手動操作的成本,從而提高了生產(chǎn)力并縮短了部署時間。
實(shí)際場景:
一群從事NodeJS 項(xiàng)目的開發(fā)人員
開發(fā)人員的所有代碼更改都被推送到 Bitbucket 存儲庫
隨著每次提交被推送到存儲庫,CircleCI 將被觸發(fā)。它將檢查最新代碼、安裝依賴項(xiàng)并運(yùn)行測試
畢竟測試通過,CircleCI通過SSH部署代碼到遠(yuǎn)程服務(wù)器
為什么選擇 CircleCI 而不是 Jenkins(和其他替代品)
除了許多其他 CI/CD 工具外,在本文中,我只將 CircleCI 與 Jenkins 進(jìn)行比較——Jenkins 是有史以來最流行的 CI/CD 工具。
首先,Jenkins 和 CircleCI 之間最明顯的區(qū)別可能是您需要一個服務(wù)器來托管 Jenkins,這需要管理知識和大量時間進(jìn)行配置/定制。同時,CircleCI 是一個云原生平臺,這意味著您不需要設(shè)置任何服務(wù)器,它開箱即用。
其次,Jenkins 的界面比較陳舊和不直觀,而 CircleCI 的設(shè)計(jì)非常友好。在配置方面,使用 CircleCI,yml 語法清晰易懂,便于開發(fā)人員閱讀。
總之,CircleCI 是一個輕量級的 CI/CD 平臺,它支持幾乎所有開箱即用的編程語言。開發(fā)人員還可以部署到 AWS、Azure、Google Cloud、Heroku 和許多其他云托管服務(wù)。
演示
先決條件:
存儲在 Bitbucket 存儲庫中的 Node.js 項(xiàng)目
CircleCI賬戶
可以通過 SSH 連接的遠(yuǎn)程服務(wù)器。在該服務(wù)器上,您必須安裝git、Node.js 和pm2(推薦用于管理Node.js 進(jìn)程的工具)
SSH基礎(chǔ)知識
設(shè)置
1. 配置 CircleCI 以跟蹤 Bitbucket 存儲庫上的提交
在項(xiàng)目的根目錄下創(chuàng)建一個名為 .circleci 的文件夾,將 config.yml 文件添加到該文件夾,內(nèi)容如下:
有關(guān)如何配置 CircleCI 的更詳細(xì)說明,請參閱此文檔。
將您的 Bitbucket 存儲庫添加到 CircleCI 項(xiàng)目
→ 現(xiàn)在,CircleCI 能夠執(zhí)行config.yml 文件中指定的構(gòu)建作業(yè)。
2. 配置遠(yuǎn)程服務(wù)器,使 CircleCI 可以執(zhí)行部署作業(yè)
通過在終端上執(zhí)行以下命令,生成我們將在整個教程中使用的 SSH 密鑰對:
ssh-keygen -t rsa -C “ my_email@gmail.com ”
你會被問幾個問題,記得讓密碼為空(在我寫這篇文章的時候,CircleCI 要求密碼為空)。
→ 結(jié)果是 2 個文件:id_rsa(私鑰)和id_rsa.pub(公鑰)
在 Bitbucket repo 設(shè)置中,檢查是否已自動添加 CircleCI Deploy Key,然后復(fù)制id_rsa.pub并在那里添加另一個密鑰
在 CircleCI 項(xiàng)目設(shè)置中,復(fù)制 id_rsa 并在那里添加您的私鑰
在您的遠(yuǎn)程服務(wù)器中,通過執(zhí)行以下命令將您的公鑰附加到~/.ssh中的authorized_keys:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
在您的遠(yuǎn)程服務(wù)器中,將您的私鑰復(fù)制到 ~/.ssh 文件夾并修改 ~/.ssh/config 文件以包括:
托管 bitbucket.org主機(jī)名 bitbucket.org身份文件 ~/.ssh/id_rsa
通過執(zhí)行以下命令將您的私鑰添加到 ssh-agent:
評估“$(ssh-agent -s)”ssh-add -K ~/.ssh/id_rsa
→ 現(xiàn)在每次將代碼推送到 Bitbucket 時,CircleCI 都會從那里提取代碼并在他們的云上執(zhí)行構(gòu)建作業(yè)。之后,它通過 SSH 連接到遠(yuǎn)程服務(wù)器來執(zhí)行部署作業(yè),然后在遠(yuǎn)程服務(wù)器上自動運(yùn)行 deploy 命令以從 bitbucket 中拉取代碼,然后 pm2 以啟動/重新啟動 config.yml 文件中指定的進(jìn)程。
ssh -p your_port_number your_user@your _host"cd ../path/to/your/project;混帳拉;pm2 啟動 hello_sts";
你完成了!
好工作!您已經(jīng)使用 CircleCI 成功地自動化了開發(fā)和部署過程。現(xiàn)在,無需執(zhí)行手動任務(wù),您的團(tuán)隊(duì)可以毫不費(fèi)力地及時交付產(chǎn)品。
本基礎(chǔ)教程旨在為您提供 CircleCI 的一些基礎(chǔ)知識,以啟動您的 DevOps 之旅。要掌握 CircleCI 的強(qiáng)大功能,請直接進(jìn)入其文檔。功能是無窮無盡的,有許多功能等待您去探索:
一流的 Docker 支持。
作業(yè)編排的工作流。
使用 SSH 調(diào)試。緩存。
使用可視化儀表板深入了解您的存儲庫。
將您的應(yīng)用程序部署到 AWS、Azure、Google Cloud、Heroku ……