CODING 進行 Hexo 專案
編輯推薦: |
本文來自於segmentfault,,主要介紹了持續整合的相關介紹以及如何使用 CODING 持續整合服務等相關內容。 |
關於持續整合的概念
持續整合指的是,頻繁地(一天多次)將程式碼整合到主幹。
持續整合的過程
如圖所示:
CI 過程:程式碼編寫 -> 原始碼庫(GitHub or gitlab)-> CI 伺服器(程式碼構建、自動化測試、結果反饋【構建結果】)
涉及 CI 工具:Jenkins、Travis CI、TeamCity、Gitlab CI、CircleCI、Codeship 等,相關資料可以查詢對應的官網,其中應用廣泛的 Jenkins 和 Travis CI,Gitlab CI 是開源的 Rails 專案 GitLab 的一個組成部分,GitLab CI 能與 GitLab 完全整合,可以通過使用 GitLab API 輕鬆地作為專案的鉤子。
關於持續整合的優點
快速發現錯誤。每完成一點更新,就整合到主幹,可以快速發現錯誤,定位錯誤也比較容易。
防止分支大幅偏離主幹。如果不是經常整合,主幹又在不斷更新,會導致以後整合的難度變大,甚至難以整合。
持續整合服務的選擇
關於網上整合服務的工具很多,其中尤其以 Jenkins 服務最受歡迎,但是 Jenkins 服務需要在自己伺服器上進行配置安裝,以及安裝各種外掛,對於剛上手的小白來說,可能存在一定的門檻,操作步驟繁多,操作不夠智慧,不是真正的自動化運維,缺少一鍵釋出構建服務。所以我們選擇了「CODING 持續整合」。
CODING 提供的整合服務是什麼
CODING 推出的持續整合服務,「CODING 持續整合」是基於 Jenkins 的,相容 Jenkinsfile 配置檔案,如果您之前有使用過或者寫過 Jenkinsfile 相信您會很快上手。
如何使用 CODING 持續整合服務
「CODING 持續整合」是基於 Jenkins 的,通過 Jenkinsfile 配置檔案完成CI的步驟,接下來將引導您一步步建立一個持續整合示例。
登入 coding,進入專案中心,點選左邊選單整合服務,開通整合服務,配置完成之後會手動觸發第一次構建過程
找到或者建立 Jenkinsfile,如果你對於Jenkins 比較熟悉的話,可以自己編寫 Jenkinsfile 配置檔案,也可以採用CODING 提供的模板檔案,如下我就採用了Jenkinsfile 模板檔案來實行自動化持續整合服務,您可以在修改 Jenkinsfile 的時候修改觸發方式,您可以自行選擇是推送到某個標籤或者某個分支時間觸發構建。jenkins 以及能夠為 agent 預設配置好 timezone 和 localtime(預設中國上海)
配置好 Jenkinsfile 檔案以及配置好環境變數,點選儲存,便可以進行持續整合專案了
如圖所示,整合步驟分為拉取程式碼-》構建-》測試-》部署等步驟,點選每個步驟可以看到相應的命令執行情況,下面來一個一個步驟配合 Jenkinsfile 檔案解釋命令的一些執行情況:
1.檢出專案,如下所示 Jenkinsfile 配置檔案第一步通過 Git 檢出在遠端倉庫分支的程式碼,至於哪個分支可以通過環境變數配置讀取 REF 這個環境變數
stage("檢出") { steps { sh 'ci-init' checkout( [$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]], userRemoteConfigs: [[url: env.GIT_REPO_URL]]] ) } }
如上圖所示,第一步主要是執行從 Git 倉庫遠端拉取程式碼,所以命令都是 Git 裡面的,包括讀取 Git 配置的環境變數包括更新 Jenkinsfile 檔案
2.構建專案,如下命令所示構建這一步主要是初始化程式碼和打包程式碼,因為我們這個工程是以 Node.js 為主要開發語言,所以重點關注 Node.js 版本和 安裝 hexo 腳手架命令即可打包,目前Coding 提供的語言環境包括了 java-1.8.0_181, go-1.7.4, node-10.11.0, php-7.0.30, ruby-2.3, python-2.7.13 等。如有需要可以聯絡客服進行開通其它語言環境。
stage("構建") { steps { echo "構建中..." sh 'go version' sh 'node -v' sh 'java -version' sh 'php -v' sh 'python -V' sh 'gcc -v' sh 'make -v' // 請在這裡放置您專案程式碼的單元測試呼叫過程,例如: // sh 'mvn package' // mvn 示例 // sh 'make' // make 示例 sh 'npm install -g hexo-cli' //安裝hexo 腳手架 echo "構建完成." // archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true // 收集構建產物 } }
因為這個 Hexo 專案是以 Node.js 為主的專案,所以在 Jenkinsfile 檔案命令裡面其實可以把其它語言的檢查版本命令去掉,只需要執行 node - v 命令即可
3.測試專案,如下所示,如果是 maven 專案可以通過 mvn 命令執行測試語句,我們 Hexo 這個工程通過 hexo 腳手架構建測試命令即可,如果單元測試不通過則會顯示不通過,(hexo 對檔案格式存在要求,如果檔案格式不符合正規 MarkDown 語法,則會丟擲錯誤)
stage("測試") { steps { echo "單元測試中..." // 請在這裡放置您專案程式碼的單元測試呼叫過程,例如: sh 'hexo clean' //清除快取 sh 'hexo g ' // 將 md 檔案構建為 html 頁面示例 echo "單元測試完成." // junit 'target/surefire-reports/*.xml' // 收集單元測試報告的呼叫過程 } }
*正確構建測試結果如下圖:
4.部署專案
如下所示,部署專案命令可以執行自己寫的部署指令碼檔案,也可以配置好“_config.yml”檔案之後直接執行 hexo 腳手架自帶的命令。
如下圖整個程式碼結構圖:
配置檔案部分截圖:
部署命令:
stage("部署") { steps { echo "部署中..." // 請在這裡放置收集單元測試報告的呼叫過程,例如: // sh 'mvn tomcat7:deploy' // Maven tomcat7 外掛示例: // sh './deploy.sh' // 自研部署指令碼 sh 'npm install hexo-deployer-git --save' // 安裝 deploy 腳手架 sh 'hexo deploy' // 部署 echo "部署完成" } }
服務啟動展示
系統主頁,可以作為團隊以及小型公司共享檔案的社群論壇,hexo 構建速度快,採用純靜態框架,語法採用純markdown 語言,適合編寫文件。
頁面詳情,可以通過配置是否開啟評論功能以及可以新增讚賞功能,並且可以統計字數,建議時長等功能,分類標籤等適合文件歸集等功能
總結
CODING 是一個面向開發者的雲端開發平臺,提供 Git/SVN 程式碼託管、任務管理、線上 WebIDE、Cloud Studio、開發協作、檔案管理、Wiki 管理、提供個人服務及企業服務,其中「CODING 企業版」實現了 DevOps 流程全自動化,為企業提供軟體研發全流程管理工具,打通了從團隊構建、產品策劃、開發測試到部署上線的全過程。 集成了 Jenkins 等主流企業開發流程工具,如上所示,這個 Hexo 部落格便可以在 CODING 上面實現團隊協作開發,一鍵部署作為團隊以及公司文件共享社群論壇等作用。