使用 CODING 進行 Spring Boot 項目的集成

本文做者:CODING 用戶 - 高文java

持續集成 (Continuous integration) 是一種軟件開發實踐,即團隊開發成員常常集成他們的工做,經過每一個成員天天至少集成一次,也就意味着天天可能會發生屢次集成。成員之間的代碼相互影響,可能會出現各類編譯、運行的錯誤,爲了不提交代碼影響到其餘開發者,每次集成都經過自動化的構建(包括編譯,發佈,自動化測試)來驗證,從而儘早地發現錯誤,使得開發過程更加簡單方便。git

Fz64HS.png

通用的持續集成流程大致是像上圖所示同樣,藉助 Jenkins 連通 Git 與 Docker 鏡像倉庫,爲後續的持續部署作準備。spring

而在「CODING 持續集成」中,能夠省去其中不少環境部署的麻煩事,下面說一下我在 CODING 平臺作的持續集成工做。docker

我與 CODING 之緣

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 的我的主頁小程序

「CODING 持續集成」

基礎操做

  • 首先須要建立企業帳號;
  • 而後建立本身的項目;
  • 進入項目維護項目代碼。

本文所使用的源代碼爲本人開源的自動開發框架。微信小程序

Git 操做

下面爲 Git 的操做了,相信看文章的大部分人能夠略過這一步。瀏覽器

詳細的 Git 步驟能夠參考:《 CODING 中的 Git 操做》

Git 操做主要爲後續持續集成操做的觸發器。

持續集成

持續集成操做的設置相對比較簡單,按照提示一步步下來便可。有一塊須要注意的,就是構建所用的分支,在配置持續集成時,須要選擇構建觸發方式,觸發時間(代碼上傳時觸發/手動觸發),以及完成時郵件發送提醒(提醒觸發者/不作任何事/只有失敗時提醒)。對於多分支代碼工程必定要注意,選擇本身所需的配置。我這裏所用的爲系統默認配置,即當有人提交代碼至 master 時觸發構建,完成時老是發郵件提示開發者。

Fz6hB8.png

「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 到對應的分支上,會自動執行構建,發現構建失敗。

Fz6g1I.png

點開後,查看構建失敗的具體緣由,輸出與 maven 編譯時輸出的沒有什麼差異。

Fz62ct.png

緣由提示: 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 "鏡像上傳完畢"
            }
        } 
    } 
}

提交代碼後,會自動執行構建。

Fz6c9A.png

Fz6RjP.png

能夠顯示程序編譯過程,能夠顯示每一步詳細輸出,能夠增長狀態徽標到相應的文檔或網頁中。能夠說「CODING 持續集成」 想的是比較周到的,基本集成了絕大部分開源系統中相應的職能。

構建使用默認的 https://repo.maven.apache.org 源,構建速度也還能夠。

Fz6fnf.png

至此持續集成完成,界面清晰整潔,而且能夠對測試報告和構建結果進行下載,構建過程也會發郵件給相關人員。確實讓開發更簡單了。之前在作這一系列工做時,架構師起碼要作幾件事情:

1.搭建 git 倉庫

2.搭建 jenkins

3.在 git 倉庫中增長 CI 配置

4.郵箱配置

「CODING 持續集成」爲開發者省去了不少工做,除了構建過程當中必要的工做之外,其餘的基本一鍵搞定,不用關心各個組件的安裝配置,環境狀況,網絡狀況,存儲備份等內容。

Jenkinsfile 拆解

重點解釋一下 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 包都算做工程產物。

  • 第三步爲 docker 鏡像生成
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 企業版」 的持續集成後的感覺:

  1. 知足了從開發到代碼管理,到代碼集成,到單元測試,甚至到後續部署,一站式管理;
  2. 配置相對簡單,只需配置 Jenkinsfile 便可完成,無需花費大量的人力物力來作各系統間的整合操做;
  3. 系統集成後,會給開發人員發送郵件,報告集成成功或失敗,這一點仍是比較人性化的;
  4. 「CODING 持續集成」平臺集成了不少種命令,起碼我用到的 mvn/java/docker/git 這一類的命令基本都集成在服務中了。

但願 CODING 會愈來愈完善,愈來愈好!

相關文章
相關標籤/搜索