本文做者:CODING 用戶 - 高文java
持續集成 (Continuous integration) 是一種軟件開發實踐,即團隊開發成員常常集成他們的工做,經過每一個成員天天至少集成一次,也就意味着天天可能會發生屢次集成。成員之間的代碼相互影響,可能會出現各類編譯、運行的錯誤,爲了不提交代碼影響到其餘開發者,每次集成都經過自動化的構建(包括編譯,發佈,自動化測試)來驗證,從而儘早地發現錯誤,使得開發過程更加簡單方便。git
通用的持續集成流程大致是像上圖所示同樣,藉助 Jenkins 連通 Git 與 Docker 鏡像倉庫,爲後續的持續部署作準備。spring
而在「CODING 持續集成」中,能夠省去其中不少環境部署的麻煩事,下面說一下我在 CODING 平臺作的持續集成工做。docker
CODING 是國內首個一站式雲端軟件服務平臺,致力於經過技術創新推進軟件開發升級轉型,讓開發更簡單。將代碼託管、項目管理、Cloud Studio、一鍵部署等開發工具集成到瀏覽器中,免除繁雜的開發環境部署,下降軟件開發部署成本。shell
最初瞭解 「CODING」 ,是我在開發微信小程序時,騰訊雲推薦託管代碼到 CODING 上,因而註冊了一個 CODING 帳號。apache
開始使用時,主要以Web版開發工具爲主,以爲只是一個 Eclipse 的 Che 版本,當時也本身部署一個 Eclipse 的 Che 版本。但部署 Che 版本時,才發現, CODING 其實比 Che 好用得不是一點半點。流暢性、易用性已經高出 Che 一個等級了,功能上也比 Che 更豐富。後來逐漸用起來了,發現 「CODING」 不僅是 WebIDE ,仍是 Git 、 Jenkins 、 Wiki 、敏捷開發工具、項目管理工具……如今持續集成功能出來了,能夠免費試用15天,因而註冊一個玩一玩。json
wencst 的我的主頁小程序
本文所使用的源代碼爲本人開源的自動開發框架。微信小程序
下面爲 Git 的操做了,相信看文章的大部分人能夠略過這一步。瀏覽器
詳細的 Git 步驟能夠參考:《 CODING 中的 Git 操做》
Git 操做主要爲後續持續集成操做的觸發器。
持續集成操做的設置相對比較簡單,按照提示一步步下來便可。有一塊須要注意的,就是構建所用的分支,在配置持續集成時,須要選擇構建觸發方式,觸發時間(代碼上傳時觸發/手動觸發),以及完成時郵件發送提醒(提醒觸發者/不作任何事/只有失敗時提醒)。對於多分支代碼工程必定要注意,選擇本身所需的配置。我這裏所用的爲系統默認配置,即當有人提交代碼至 master 時觸發構建,完成時老是發郵件提示開發者。
「CODING 持續集成」提供了三套不一樣的 Jenkinsfile 模板供開發者使用:簡易模板、並行模板、自定義模板。我這裏選用簡易模板,並稍做修改。
pipeline { agent { label "default" } stages { stage("檢出") { steps { sh 'ci-init' checkout( [$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]], userRemoteConfigs: [[url: env.GIT_REPO_URL]]] ) } } stage("構建") { steps { echo "構建中..." sh 'mvn clean install' echo "構建完成." archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true // 收集構建產物 } } stage("Docker") { steps { echo "Docker鏡像生成中..." sh 'cd wencst-generatorJPA/target && cp classes/Dockerfile . && docker build -t wencst/wencst-generatorJPA .' echo "鏡像生成完成." sh 'docker push wencst/wencst-generatorJPA' echo "鏡像上傳完畢" } } } }
更新 Jenkinsfile 後,代碼 push 到對應的分支上,會自動執行構建,發現構建失敗。
點開後,查看構建失敗的具體緣由,輸出與 maven 編譯時輸出的沒有什麼差異。
緣由提示: there is no POM in this directory。
原來我中間還有一層目錄,須要進入目錄後才能編譯。
pipeline { agent { label "default" } stages { stage("檢出") { steps { sh 'ci-init' checkout( [$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]], userRemoteConfigs: [[url: env.GIT_REPO_URL]]] ) } } stage("構建") { steps { echo "構建中..." sh 'cd wencst-generatorJPA && mvn clean install' echo "構建完成." archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true // 收集構建產物 } } stage("Docker") { steps { echo "Docker鏡像生成中..." sh 'cd wencst-generatorJPA/target && cp classes/Dockerfile . && docker build -t wencst/wencst-generatorJPA .' echo "鏡像生成完成." sh 'docker push wencst/wencst-generatorJPA' echo "鏡像上傳完畢" } } } }
提交代碼後,會自動執行構建。
能夠顯示程序編譯過程,能夠顯示每一步詳細輸出,能夠增長狀態徽標到相應的文檔或網頁中。能夠說「CODING 持續集成」 想的是比較周到的,基本集成了絕大部分開源系統中相應的職能。
構建使用默認的 https://repo.maven.apache.org 源,構建速度也還能夠。
至此持續集成完成,界面清晰整潔,而且能夠對測試報告和構建結果進行下載,構建過程也會發郵件給相關人員。確實讓開發更簡單了。之前在作這一系列工做時,架構師起碼要作幾件事情:
1.搭建 git 倉庫
2.搭建 jenkins
3.在 git 倉庫中增長 CI 配置
4.郵箱配置
「CODING 持續集成」爲開發者省去了不少工做,除了構建過程當中必要的工做之外,其餘的基本一鍵搞定,不用關心各個組件的安裝配置,環境狀況,網絡狀況,存儲備份等內容。
重點解釋一下 stages 部分,總體分爲三個 stages:
stage("檢出") { steps { sh 'ci-init' checkout( [$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]], userRemoteConfigs: [[url: env.GIT_REPO_URL]]] ) } }
這一步檢出項目中的代碼到 jenkins 的 workspace 目錄下,這一步是 「CODING 持續集成」 默認的配置,無需過多解釋。
stage("構建") { steps { echo "構建中..." sh 'cd wencst-generatorJPA && mvn clean install' echo "構建完成." archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true } }
這一步是執行代碼編譯,我所用的是 maven 編譯 spring boot 工程, 「CODING 持續集成」 集成了 mvn 命令,能夠直接執行 maven 操做。
注意: jenkins 執行 sh 命令的根路徑都是在當前 workspace 下,因此切換路徑與 maven 編譯命令要在同一個 sh 命令下。
編譯執行後,收集編譯的產物,archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true
這一步的意思是,將全部工程的 target 路徑下的 jar 包都算做工程產物。
stage("Docker") { steps { echo "Docker鏡像生成中..." sh 'cd wencst-generatorJPA/target && cp classes/Dockerfile . && docker build -t wencst/wencst-generatorJPA .' echo "鏡像生成完成." sh 'docker push wencst/wencst-generatorJPA' echo "鏡像上傳完畢" } }
對於熟悉 docker 的人並非很陌生,依舊使用 shell 命令來執行 docker build 操做。
cd wencst-generatorJPA/target
首先切換路徑到 jar 包所在目錄。
cp classes/Dockerfile .
拷貝 Dockerfile 到當前路徑下。
docker build -t wencst/wencst-generatorJPA .
執行 docker build 操做,用以建立 docker 鏡像。
docker push wencst/wencst-generatorJPA
將建立出來的 docker 鏡像上傳到 dockerhub 中去。
總體來講 「CODING 持續集成」 想的很周全了,不管從易用性、美觀度以及人性化角度上來講,作得都很是不錯。下面着重說說我使用 「CODING 企業版」 的持續集成後的感覺:
但願 CODING 會愈來愈完善,愈來愈好!