1. 程式人生 > >讓開發部署提速 8 倍,我參與貢獻這款 IDE 外掛的全過程

讓開發部署提速 8 倍,我參與貢獻這款 IDE 外掛的全過程

如何像參與開源那樣,去參與一款 IDE 外掛的設計?

作為一款 IDE 外掛的使用者,我是否能決定下一個版本的功能?

自從產品經理銀時小夥和他的開發小哥們在去年12月釋出 Cloud Toolkit(一款 IDE 外掛)以來,已幫助數以萬計的開發者們提高了業務的部署效率。期間,開發者們不僅是 Cloud Toolkit 的使用者,同時也作為設計者參與了外掛的更新迭代。

本文來自開發者徐靖峰,分享了他和 Cloud Toolkit 的故事

遇見 Cloud Toolkit

在與中介軟體小姐姐的一次聊天中,偶然間瞭解到這款外掛,小姐姐跟我提到自己正在運營一款 IDE 開發者工具,能夠使開發部署效率提高 8 倍,出於好奇心,我就上手體驗了一下,看看究竟是一個什麼樣的產品。使用了一段時間之後,便迫不及待地向小姐姐分享了我作為開發者對外掛的一些看法。

我對這款產品最直觀的感受:這是一款釋出工具,幫助使用者在 IDE 中直接打包應用並部署到各種終端。一開始看到這款產品位於阿里雲的頁面中,原本以為是一款和阿里雲服務強繫結的產品,但試用過後才發現,即使對於普通的雲主機,也非常適用,還可以解決很多開發運維的痛點,非阿里雲使用者可以放心使用。

在 Cloud Toolkit 出現之前

作為一個 Java 程式設計師,我們大多數會在 Intellij IDEA 中基於 SpringBoot 來開發 WEB 應用,所以本文中的測評將會基於以下幾個架構來構建:

  • 開發環境:IDEA
  • 專案組織方式:Maven
  • 開發框架:SpringBoot

在接觸 Cloud Toolkit 之前,用什麼方法來部署一個 SpringBoot 應用呢?作為一個偏正經的測評人員,我不會為了凸顯出 Cloud Toolkit 的強大而去翻出一些上古的部署工具來做對比,而是直接使用 Intellij IDEA 的內建功能與之對比。

第一步:配置伺服器資訊

在 Tools -> Deployment 中找到 IDEA 對專案部署支援的內建外掛,我們可以在其中進行伺服器資訊的配置,包括伺服器地址和許可權認證,並且在 Mapping 選項卡中完成本地工程與伺服器路徑的對映。

第二步:配置 Maven 打包外掛

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

由於是 SpringBoot 應用,配置專用的打包外掛後,可以將整個工程打成一個 fatjar,示例工程非常簡單:

@SpringBootApplication
@RestController
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @RequestMapping("/hello")
    public String hello() {
        return "hello world~~~~~~~~~~~~~~~~";
    }
}

之後,只要執行 install,即可得到一個可執行的 jar 包:

第三步:部署 jar 包

由於我們在第一步已經配置過專案路徑與伺服器路徑的對映,可以選擇直接對 fatjar 右鍵,upload 到遠端伺服器上。

第四步:啟動應用

上圖中展示的是 IDEA 中兩個非常棒的內建功能,可以在 Tools -> Start SSH session 中開啟遠端伺服器的終端,在 IDEA 下方可以執行遠端指令;也可以在 Tools -> Deployment ->Browse Remote Host  中展開如圖右側的結構,視覺化地瀏覽伺服器上的檔案列表,檢查應用是否部署成功。

在遠端終端中,找到對應的 fatjar,執行 java -jar spring-demo-1.0-SNAPSHOT.jar 便完成了整個部署流程。

IDEA 內建外掛總結

IDEA 內建外掛已經提供了相當強大的能力,整個部署過程我們完全沒有離開 IDEA!避免了頻繁切換視窗,裝各種部署工具,可以說已經很方便了,Cloud Toolkit 必須要比這個部署過程做的更加強大才行,那下面就讓我們來體驗下 Cloud Toolkit 是怎麼優化的吧。

Cloud Toolkit 初體驗

我們不急著用 Cloud Toolkit 來部署應用。雖然筆者是一位開發者,但還是從產品的角度來研究下它的選單項,看看它的產品定位。IDEA 安裝外掛的過程省略,詳情可以參考《IDE 外掛新版釋出 | 支援更多場景,開發效率更“biu”了》

其他選單項暫且拋到一邊,這 5 個核心能力應該就是 Cloud Toolkit 的核心了。

即使作為一個外掛小白,應該也能夠望名知意,猜到這幾個選單對應的功能:

  • Deploy to Host:部署到任意伺服器。這一個功能決定了 Cloud Toolkit 強大的之處就是可以使得每個開發者受益,它其實並不是和阿里雲廠商強繫結的。我會在下文重點測評下這個功能。
  • Deploy to ECS:這裡的 ECS 指的阿里雲的 ECS,如果你的服務部署在阿里雲 ECS 上,可以選擇使用這個功能,獲得比 Deploy to Host 更加豐富的功能。在下文我也會簡單測評下這個功能。
  • Deploy to EDAS & EDAS Serverless:EDAS & EDAS Serverless 是阿里雲提供的分散式服務治理服務,可以理解為商業版的 Dubbo,具有強大的服務治理、服務排程能力,Cloud Toolkit 對 EDAS 做了個性化的部署支援,讓使用者無需登入控制檯,在 IDEA 中即可完成 EDAS 的部署。
  • Deploy to CS K8S:在雲原生時代,很多應用使用容器化的方式進行部署,Cloud Toolkit 這一點做的還是不錯的,已經具備了容器化部署的能力,具有一定的前瞻性。

其實從簡單的功能介紹就可以看出,Cloud Toolkit 相比 IDEA 內建的部署能力的確是高出一大截了,甚至可以說,Deploy to Host 這一能力完全就可以覆蓋 IDEA 外掛的所有能力,並且對流程還進行了一些簡化。下面我重點測評下 Deploy to Host 這一能力,與之前的部署流程進行一個對比。

使用 Cloud Toolkit 把應用部署到任意伺服器

上圖展示的 Deploy to Host 功能的配置項,實際上涵蓋了以下幾點:

  • 遠端伺服器配置
  • 部署方式:Maven 構建,直接上傳檔案(目前還不支援 Gradle 構建,可能在後續的版本會支援)
  • 本地檔案與伺服器路徑的對映配置
  • 啟動指令碼的整合

賬號管理

SSH 登入賬戶可以在 Preferences -> Alibaba Cloud Toolkit -> SSH Profile  中管理,找不到也沒關係,需要設定的時候一般都會有超連結跳轉,這點做得很人性化。

主機管理

服務資訊可以在 Tools -> Alibaba Cloud ->Alibaba Cloud View  中展開,如下圖所示:

Deploy to Host

配置完賬號資訊和主機資訊,接下來只需要右鍵專案選擇 Alibaba Cloud -> Deploy to Host-> Run,一切就搞定了。這個過程相比之前變得非常簡易:

  • 不需要自己打包,Cloud Toolkit 集成了 Maven 外掛。
  • 不需要登入遠端終端去執行指令碼啟動服務,Cloud Toolkit 提供了應用部署生命週期必要的鉤子,只需要設定好啟動指令碼即可。
  • 修改完原生代碼,點選下 Deploy to Host,即可完成改動程式碼的部署。

經過如上的測評過程,相信即使沒有使用過 Cloud Toolkit 的使用者,也可以直觀體會到這是一款怎麼樣的外掛了,並且它的功能是多麼的實用。

使用 Cloud Toolkit 把應用部署到 ECS

從產品設計的角度來分析,Cloud Toolkit 提供如此多的部署能力,可以想到是其直接預設了使用人群。例如一個阿里雲的 ECS 使用者,在選擇部署方式時,既可以使用 Deploy to Host 也可以使用 Deploy to ECS;再者,例如一個 EDAS 使用者,在選擇部署方式時,既可以使用 Deploy to Host、Deploy to ECS,也可以使用 Deploy to EDAS(EDAS 可以理解為一個定製化的 ECS)。從產品的角度,越定製化的功能,其服務的人群越少,同時功能更強大;從使用者體驗的角度,其實也透露了雲服務的一個特點,雲廠商正在為其所提供的雲服務創造更好的使用者體驗,藉助於此類外掛,來降低使用者的開發運維門檻。

可以預見的一件事是,對於非阿里雲使用者來說,Deploy to Host 是他們使用 Cloud Toolkit 最大的誘惑了。作為一個測評文章,除了介紹 Deploy to Host 之外,我還選擇了 Deploy to ECS 這一功能來進行測評。為此我購買了一臺阿里雲的 ECS 來部署與上文相同的應用。

在阿里雲控制檯可以獲取到賬號的 Access Key/Access Key Secret,在 IDEA 中的 Preferences -> Alibaba Cloud Toolkit -> Accounts 中可以設定賬號。

在賬號設定完畢後,Cloud Toolkit 看起來是通過內建的 API 直接關聯到了我的 ECS 例項,在選擇部署時,可以直接根據 region 選擇例項列表中的機器進行部署。

其餘的部署流程和 Deploy to Host 相差無幾。也就是說,其實 Deploy to ECS 更多的完成了許可權管理和主機管理,ECS 使用者使用這個功能就顯得非常高效了。

Cloud Toolkit 的亮點功能

Cloud Toolkit 除了主打的部署能力,還提供了不少亮點功能,我選擇了其中的 3 個功能來分享:上傳檔案、遠端 Terminal、內建應用診斷功能來進行評測。

上傳檔案

有些指令碼我們希望在本地編輯之後上傳到伺服器上,Cloud Toolkit 對每一個主機都提供了一個 Upload 操作,可以將本地的檔案上傳到遠端主機上,並且還可以觸發一個 commond,這個功能也是很人性化的,因為上傳指令碼後,往往需要執行一次,避免了我們再登入到遠端主機上執行一次執行操作。

遠端 Terminal

特別是在 Mac 系統中,我一直苦惱的一件事便是如何管理眾多的遠端機器,我偶爾需要去搭建了部落格的主機上檢視個人部落格為什麼掛了,偶爾又要去看看我的 VPN 主機排查下為什麼無法轉發流量了,在開發測試階段,又要經常去測試主機上執行一些簡單的命令。所有這一切通過 ssh 工具去完成都不麻煩,但所有的麻煩事集合到一起時往往會讓我變得焦頭爛額,針對這一點,Cloud Toolkit 簡直是一個 Life Saver。

事實上,在前面的測評中我們已經瞭解到 IDEA 內建了遠端 Terminal 這個功能,Cloud Toolkit 是進一步優化了它的體驗,使用者可以直接在視覺化的頁面選擇想要遠端登入的主機,在對主機加了 Tag 之後,這個過程會更加直觀。

內建應用診斷功能

在測評體驗過程中,意外地發現了 Cloud Toolkit 的一個功能支援,就是前面的截圖有顯示,但我未提到的 Diagnostic (診斷)功能。Cloud Toolkit 集成了阿里巴巴開源的一款應用診斷框架 -- Arthas

  • 對於本地主機,可以直接通過 Tools -> Alibaba Cloud -> Diagnostic Tools 開啟診斷。
  • 對於遠端主機,可以通過主機管理中的 Diagnostic 選項卡,開啟遠端診斷。

在過去,我們想要進行診斷,必須要手動在伺服器上安裝 Arthas,然而Cloud Toolkit 藉助 Remote Terminal 和 Arthas 的整合,讓這一切都可以在 IDEA 中完成,似乎是想要貫徹這個原則:徹底杜絕第三方工具,一切都用外掛完成。

當你遇到以下類似問題而束手無策時,Arthas 可以幫助你解決:

  1. 這個類從哪個 jar 包載入的?為什麼會報各種類相關的 Exception?
  2. 我改的程式碼為什麼沒有執行到?難道是我沒 commit?分支搞錯了?
  3. 遇到問題無法在線上 debug,難道只能通過加日誌再重新發布嗎?
  4. 線上遇到某個使用者的資料處理有問題,但線上同樣無法 debug,線下無法重現!
  5. 是否有一個全域性視角來檢視系統的執行狀況?
  6. 有什麼辦法可以監控到 JVM 的實時執行狀態?

作為一個偏正經的評測,我們試用一下遠端診斷的功能,選取比較直觀的 trace 命令來進行評測。

如上圖所示,我們構造了一個慢請求,其中 invokeServiceA_B() 相對於其他方法十分耗時,我們希望通過 Cloud Toolkit 定位到慢呼叫的源頭,找出 invokeServiceA_B 這個罪魁禍首。

點選 IDEA 中對應部署伺服器的 Diagnostic 選單項,就會出現如上圖所示的一個 Arthas 診斷頁面,它會自動關聯到使用者的 Java 程序,使用者只需要選擇相應診斷的程序即可。

在關聯到相應的程序之後,我們執行 trace 指令 trace moe.cnkirito.demo.Application * -j

這個指令的含義是當 moe.cnkirito.demo.Application 中的任意方法被觸發呼叫後,會打印出相應的呼叫棧,並計算耗時,-j 的含義是過濾掉 JDK 內建的類,簡化堆疊。正如上圖所示,我們定位到是 invokeServiceA 的 invokeServiceA_B 最為耗時。使用者可以自行監控對應的方法,把 * 替換為想要監控的方式即可。(更多的監控指令可以參考 Arthas 文件連結:https://alibaba.github.io/arthas/

測評中發現的不足

是軟體就必然有 bug,或者是存在使用者體驗不佳的地方,接下來簡單地羅列下我認為這款外掛不足的幾個方面。

遠端連線容易出現異常

這個問題不是特別容易復現,表現是長時間執行專案後,再部署,會提示遠端連線失敗,在重啟 IDEA 之後可以解決這個問題,原因未知。在後面想要復現時一直無法復現,但的確耗費了我很長的時間,不知道有沒有其他的使用者遇到同樣的問題。

檔案瀏覽器過於簡陋

當嘗試配置 SSH 公私鑰以實現免密登入時,發現 Browse 開啟的檔案瀏覽器無法正常顯示 Mac 中的 .ssh 隱藏資料夾,大多數情況下使用者會將 SSH 公私鑰存放在 ~/.ssh 中,這個使用者體驗不是很好,或許有辦法在這個檔案瀏覽器中訪問到隱藏資料夾,但至少我還沒找到方法。

缺少遠端主機的視覺化功能

IDEA 的預設外掛支援 Remote Host 功能,該功能可以讓使用者視覺化地管理遠端主機並對其中的檔案進行增刪,提升使用者體驗。而 Cloud Toolkit 提供了遠端主機的管理,卻沒有視覺化管理其中檔案的能力。如果 Cloud Toolkit 實現了 Remote Host 功能,會更方便使用者檢視自己的部署結果。從連線協議的選擇上也可以發現,Cloud Toolkit 目前只支援 sftp 協議,而 IDEA 內建的 Deployment 外掛還支援 ftp、ftps 等方式。

競品 & 產品定位 & 評價

其實本文基本是圍繞 IDEA 的內建 Deployment 順帶著 Cloud Toolkit 的測評一起進行的。實際上我並不覺得 Cloud Toolkit 存在什麼競品。

競品可能是 xftp 或者 xshell 嗎?它們只是一款 ssh 工具罷了,人家壓根沒想著跟你競爭。

可能是 jenkins 嗎?jenkins 有自己的 devops 流程,側重在持續整合,而 Cloud Toolkit 定位是在日常開發中完成部署驗證等行為。

在我的測評過程中,能夠感受到這款產品的匠心,幾乎為所有使用者可能遇到的問題都配備了文件,比如:不知道啟動指令碼怎麼寫?連結了常用的 Java 應用啟動指令碼;不清楚該使用哪種部署方式?每種方式都有完整的部署文件;多語言?同時提供了 Go、NodeJS 的部署案例…...同時還支援了一些贈品功能:檢視實時日誌,檔案上傳,SQL 執行等。

以個人愚見,聊聊這款產品的定位,一方面是雲廠商無關的特性,Cloud Toolkit 提供了 Deploy to Host、內建 Arthas 診斷等功能,造福了廣大的開發者,另一方面是阿里雲服務繫結的一些功能,Cloud Toolkit 為 ECS、EDAS 使用者帶來了福音,可以享受比普通應用部署更加便捷的操作。前者為 Cloud Toolkit 積累了業界口碑,後者為阿里雲付費使用者增加了信心,同時也為潛在的阿里雲使用者埋下了種子。

我想對 Cloud Toolkit 團隊說的話

我在日常開發中,也偶爾需要在遠端 Linux 服務上測試一些功能,在熟悉了 Cloud Toolkit 之後,它可以幫助我節省不少時間和精力。Cloud Toolkit 是一款非常棒的部署工具,當然也希望它能在商業化和開源之間做到一個平衡,宣傳時可以額外強調下 Deploy to Host 這個功能。

原文作者:

徐靖峰,阿里雲智慧高階開發工程師,專注於分散式服務框架、微服務等領域,喜歡寫作,喜歡倒騰各種有意思的事,維護有個人技術公眾號“Kirito的技術分享”,「技術分享」某種程度上,是讓作者和讀者,不那麼孤獨的東西。

「創造 Cloud Toolkit」

為了感謝所有為 Cloud Toolkit 發展做出貢獻的開發者,我們團隊重磅推出 「創造 Cloud Toolkit」獎勵機制,跟隨外掛的更新迭代,長期有效。我們將記錄您對外掛付出的每一份貢獻,在此,我們盛情邀請您一起來參與創造 Cloud Toolkit,共同定義一款真正好用的 IDE 外掛。

您的貢獻類別包括但不限於以下形式:

  • 在釘釘或微信交流群裡,熱心幫助別答疑解惑
  • 提出新特性需求,並被採納
  • 提出優化和改進建議,並被採納
  • 上報 Bug,並被採納
  • 推廣外掛,包括髮朋友圈、發表文章、推薦給朋友等
  • 參與測評等活動

請主動將您的貢獻公佈在釘釘群/微信群,我們會有專門的人員來記錄統計,您的任何形式的貢獻都會以貢獻值的形式進行累計,最終將以歷史累計總榜、年榜、季榜、雙週榜的形式,在阿里雲官網進行定期公佈。對於答疑解惑的難度,需求、改進建議和 Bug 等的價值大小,分為 1-5 分不等。答疑根據對同一個問題的回答內容,酌情積1~2分,2分封頂/每次。

創始人計劃

累計貢獻總值達到 100 的開發者,將成為我們 Cloud Toolkit 的創始人,將會被永久列入在外掛的 Release Note 中,跟隨產品的更新迭代,您將被永久記錄,並且享有更大參與權益和重磅禮品!而且在每一期的歷史排行榜中,累計總貢獻值排行靠前的幾位開發者的頭像和姓名,將會被榮譽地展示在阿里雲官網的產品頁上。

雙週排行榜 & 測評排行榜

不僅如此,對於每兩週貢獻值排名前三的開發者和參與測評等活動獲獎的開發者,也進行同樣的公佈,還有限量精美小禮品喔~不管您在任何階段參與貢獻,都有機會榮登阿里雲官網排行榜,我們誠邀您參與創造。

外掛 Release Note(內含不同版本貢獻者)

第一期「創造 Cloud Toolkit」

歷史排行榜詳細資料

作者:中介軟體小哥

原文連結

本文為雲棲社群原創內容,未經