最新內容已更新至 Blog: 使用 Jenkins/Azure Pipeline 進行持續整合
Eric
: 前面介紹完 Travis CI,雖然容易上手,可惜只支援 GitHub。接下來,我們來聊聊最多人使用的 Jenkins。
吉米
: Jenkins 有聽其他人提起過,不過一直沒有放在心上。但我記得 Jenkins 的設定有點復雜。而且,我是不是要再另外準備一台電腦,提供 Jenkins 使用?
Eric
: 放心,這點我有想到。所以在說 Jenkins 之前,先跟你介紹一下 Azure 端服務平台。
近年來,常常聽到雲端運算這名詞,但到底怎麼才可以稱之為雲端運算呢?
依據美國國家技術標準局( National Institute of Standards and Technology, NIST) 所定義的 雲端運算,它具有 五大特性、三種服務、以及 四種部署模式。
自助式隨需服務(On-demand self-service)
客戶可以依其需求索取計算資源(例如伺服器或儲存空間),且整個過程是單方面自動化的,無須與資源提供者互動。
廣泛網路接取(Broad network access)
服務是經由網路提供,且有標準機制能讓不同的客戶端平台(如智慧型手機及筆電等)都可以使用。
共享資源池(Resource pooling)
服務者所提供的計算資源,例如儲存空間、網路頻寬、計算能力、虛擬機器數量等,可類比為一個大水池,能隨時依需要(重新)分配給不同平台的多個使用者。使用者不需了解資源的實體位置,只要有抽象概念即可(如資源是在哪個國家或哪個資料中心)
快速的彈性(Rapid elasticity)
計算資源不僅可以快速且有彈性地被提供或釋放,且對客戶而言,資源是取之不盡且可以恣意購買的。
可量測的服務(Measured service)
計算資源可依其所提供的服務特性被自動控管及最佳化。提供者與使用者雙方都可透明地監控資源使用情形。
Azure 是 Microsoft 近年來,大力推行的公有雲端服務平台。它提供了多種服務,讓用使用者自行選擇、組合與運用。
( 圖片來源: Azure 官網)
Azure 發展致今,服務內容己經横跨 運算、資料服務、應用程式服務、儲存、網路 等類型。
為了在將 JenKins 掛在 Azure 上,因此,採用 Azure 的 Linux 虛擬機器 。
目前 Azure 為了讓更多人使用與體驗,提供 免費帳戶 讓大家有機會嘗試 Azure 豐富的服務內容。
為了確保帳戶的有效性,在申請免費帳戶時,必需經過信用卡驗證的關卡。
Jenkins 是目前擁有眾多使用者的 CI/CD 軟體。同時,它也是一個 Java 的開源專案,因此,擁有許多套件可搭配使用,以支援不同的需求。
在進入 Azure 的畫面後,直接到 Marketplace 中,找到 Jenkins 進行安裝。
接下來就是進行一連續的設定動作。
筆者特別把建立過程中,遇到的問題,跟大家分享一下。
在 Linux 虛擬機器設定的步驟中,採用 SSH 公開金鑰 保護的機制。
筆者建立金鑰的方式,是使用 Azure 的 Cloud Shell 產生 SSH 金鑰。
ssh-keygen
再從產生出來的金鑰中,取出公鑰。
cat xxxxxxx.pub
接著,在進行網路相關設定時,Domain Name 有進行規則運算式的驗證,要注意一下。
全部都設定完成後,就是等 Azure 完成部署。
我們可以從虛擬機器中的 DNS 名稱,看到 Jenkins 所在的網站。
連到該網址後,因為伺服器是採用 SSH 金鑰的認證,所以無法直接使用網站。
依指示,在本機端輸入 SSH 指令
ssh -L 127.0.0.1:8080:localhost:8080 username@domainname.eastus.cloudapp.azure.com
username: 設定時,所輸入的名稱。
domainname: 虛擬機器網路設定時,所輸入的 domain name。
結果,訊息回傳 Permission denied (publickey) 的錯誤。
因為 Cloud Shell 產生出來的金鑰,儲存在 Azure 空間中,但本機端沒有金鑰資訊。資訊不對等,自然就會發生錯誤。
只要將 Azure 中的金鑰,下載放到本機端的 .ssh 資料夾中,就可以順利動作。
接下來,就可以從 http://localhost:8080 進入 Jenkins。不過第一次登入,一定要進行 Unlock 的動作。
指 Jenkins 指示,輸入指令,就可以取回密碼,完成 Jenkins 的初始設定。
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
看到這個畫面,就大功告成,完成安裝。
Eric
: 是不是比想像中的容易。
吉米
: 對啊,沒有想到 Microsoft 還有專門介紹如何在 Azure 上 架設 Jenkins。
Eric
: 我們己經順利的在 Azure 上架設 Jenkins,接下來,我們要開始將 Jenkins 與 GitHub、BitBucket、Azure DevOps 上的 repository 串接起來。
<< 待續 >>