日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

持续集成之 Spring Boot 实战篇

發(fā)布時間:2025/3/8 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 持续集成之 Spring Boot 实战篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文作者: CODING 用戶 - 何健

這次實戰(zhàn)篇,我們借助「CODING 持續(xù)集成」,實現一個簡單的 Spring Boot 項目從編碼到最后部署的完整過程。本教程還有 B 站視頻版,幫助讀者更好地學習理解。

思路

在線上環(huán)境構建、測試、部署

這種情況,通常會將 jenkins 安裝在服務器上,確保構建測試等操作環(huán)境和線上環(huán)境一致。

此時通常會在 jenkins 中配置好需要持續(xù)集成的倉庫,以及具體流程。

這種方式非常簡單粗暴,也非常有效,但是缺點也很明顯。可能 jenkins 會成為線上環(huán)境的旁站漏洞,這是非常不安全的。

那么,我們就需要更高級的方式,可以線上環(huán)境之外的構建測試,最終部署到線上環(huán)境。「CODING 持續(xù)集成」正是提供這類持續(xù)集成模式的平臺。

不在實際部署服務器上構建、測試

為了避免占用線上服務器的資源,也為了避免安全問題,我們可以使用單獨的 jenkins (或者其它此類軟件)完成構建、測試、分發(fā),實際部署通過單獨的 webhook 實現。這樣就可以避免在線上環(huán)境安裝 Jenkins,還可以避免更復雜的系統(tǒng)安全維護。

這樣做的優(yōu)點:不會影響在線服務; 缺點:部署地機器最好是可以公網訪問的,否則會無法完成后續(xù)分發(fā)步驟。

終極解決方案:使用 SaaS 化的 Jenkins

Software as a Service,軟件即服務。「CODING 持續(xù)集成」集成了 SaaS 化的?Jenkins 等主流企業(yè)開發(fā)流程工具,實現了 DevOps 流程全自動化。開箱即用,直接用它就好!

捋一下思路

我們這次實戰(zhàn)針對后一種思路

  • 檢出代碼

  • 構建

  • 測試

  • 分發(fā)

  • 觸發(fā)部署

  • 實戰(zhàn)

    實際體驗,還是很不錯的。

    視頻地址:CODING 持續(xù)集成 - Spring Boot 項目

    第一步:初始化一個持續(xù)集成

  • 首先,我們需要進入準備持續(xù)集成的項目。

    這里我用 start.spring.io 初始化一個 demo 示例項目,并推送到倉庫。 為了方便大家,親自體驗,我準備了一個現成的倉庫,可以直接 git clone 下來再 git push 到自己賬戶下使用。倉庫地址:demoForCI

  • 解壓 demo 項目,進入 demo 目錄,初始化倉庫。

  • cd g:\demo\git initgit set remote giturlgit add ./git commit -m 'init repo'git push -u origin master 復制代碼

    別忘了 git config user.name yourname 和 git config user.email youremail

  • 開始體驗 倉庫準備好后,就可以開始體驗「CODING 持續(xù)集成」。

    第一次的使用,需要先創(chuàng)建一個 Jenkinsfile,很多小伙伴會說,第一次用,不知道是啥。

    沒關系,「CODING 持續(xù)集成」已經給我們準備好了模板,非常容易理解,可以認為是特定格式語法寫一套 task 流程。

    點擊一下 “簡易模板”,更具實際情況修改一下就可以。

  • 第二步:編寫 Jenkinsfile

    為了方便理解,我們從簡易模板開始,分別修改對應階段的任務。

  • 配置構建環(huán)境,「CODING 持續(xù)集成」目前支持 java-8、python-3.5、ruby-2.3、go-1.11 等等。 在 Jenkinsfile 的 pipeline 里添加:
  • agent {// 此處設定構建環(huán)境,目前可選有// default, java-8, python-3.5, ruby-2.3, go-1.11 等// 詳情請閱 https://dev.tencent.com/help/knowledge-base/how-to-use-ci#agentslabel "java-8"} 復制代碼
  • 檢出 這里不得不說,「CODING 持續(xù)集成」這里做的還是很方便的,提供了適用于好幾種不同場景的模板。默認簡易模板是帶有檢出部分的,我們可以根據實際情況進行修改。默認情況下,env.GIT_BUILD_REF 的值就是 master 主分支,實際上我們可以定制為其它專門用于構建發(fā)的分支。

    這里,大家可以自己修改具體要檢出的分支。

  • stage("檢出") {steps {sh 'ci-init'checkout([$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]], userRemoteConfigs: [[url: env.GIT_REPO_URL]]])}} 復制代碼
  • 構建
  • stage("構建") {steps {echo "構建中..."sh 'java -version'sh 'mvn package'echo "構建完成."archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true // 收集構建產物}} 復制代碼

    這里需要注意,Spring Boot 的 pom 中需要添加一個插件。 修改后:

    <plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!-- 下面是添加的插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.6</version><configuration><skipTests>true</skipTests></configuration></plugin> 復制代碼
  • 測試 這里我偷個懶,只做了單元測試, 沒有提取測試報告,大家可以根據實際項目定制這個流程。
  • stage("測試") {steps {echo "單元測試中..."sh 'mvn test'echo "單元測試完成."//junit 'target/surefire-reports/*.xml' // 收集單元測試報告的調用過程}} 復制代碼
  • 分發(fā) jar 包到目標服務器 這里比較無奈,我沒有單獨針對這次演示寫部署 jar 包和上傳 jar 包的 webhookApi,但是構建好的 jar 包需要要放置到待部署的服務器。

    于是有了這個過程,借助 scp私鑰來上傳構建好的jar包。

    這里千萬記著提前部署好密鑰。并且將密鑰放到倉庫一份,用于分發(fā)jar包。

  • stage("分發(fā)jar包") {steps {echo "分發(fā)中..."echo "chmod 600 pkey"sh 'chmod 600 authorized_keys.pem'echo "upload"sh 'scp -i authorized_keys.pem ./target/*.jar root@yourip:/root/'echo "準備部署"}} 復制代碼
  • 部署

    前面有提到,這里部署仍然需要觸發(fā)一個鉤子,否則只能手動部署了。 這里我寫了一個最簡單的,實際上我們可以寫細致一點,判斷一下接口返回的結果再根據結果輸出部署情況。

  • stage("部署") {steps {sh 'curl http://youapi'echo "部署完畢"}} 復制代碼

    第三步:保存 Jenkinsfile 并運行

    修改好 Jenkinsfile 和 pom.xml。

    我們要保存 Jenkinsfile,編輯框可以直接編輯內容,編輯好可以直接提交到倉庫下的 ./Jenkinsfile

    接下來, 平臺會自動讀取 Jenkinsfile 并開始走持續(xù)集成的流程:

    持續(xù)集成的流程是可以看到的:

    每個階段都對應 Jenkinsfile 一個 stage, 我們可以點擊查看對應階段的構建結果。

    第四步:排查持續(xù)集成的報錯

    如果某個過程出錯,「CODING 持續(xù)集成」的流程會停止,并提示失敗。此時我們可以進入具體節(jié)點查看具體失敗原因。

    比如現在是提示“分發(fā) jar 包失敗”,那么我們可以點擊對應節(jié)點展開看看日志,排查具體分發(fā)失敗的原因。

    現在可以清晰地看到,報錯原因是我沒有填寫正確的主機 ip。

    文中涉及的文件及代碼

    Jenkinsfile

    pipeline {agent {// 此處設定構建環(huán)境,目前可選有// default, java-8, python-3.5, ruby-2.3, go-1.11 等// 詳情請閱 https://dev.tencent.com/help/knowledge-base/how-to-use-ci#agentslabel "java-8"}stages {// 檢出倉庫stage("檢出") {steps {// 這里sh調用ci-init 初始化sh 'ci-init'// 這里檢出倉庫,默認檢出分支為環(huán)境變量中的GIT_BUILD_REFcheckout([$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]], userRemoteConfigs: [[url: env.GIT_REPO_URL]]])}}// 構建jar包stage("構建") {steps {echo "構建中..."// 輸出java版本sh 'java -version'// 調用maven 構建jar包sh 'mvn package'echo "構建完成."//收集構建產物,這一步成功,我們就可以在平臺上看到構建產物archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true // 收集構建產物}}// 測試stage("測試") {steps {echo "單元測試中..."// 做單元測試sh 'mvn test'echo "單元測試完成."}}// 分發(fā)jar包,這里只是簡單的通過scp分發(fā)jar包到目標機器指定目錄stage("分發(fā)jar包") {steps {echo "分發(fā)中..."echo "chmod 600 pkey"sh 'chmod 600 authorized_keys.pem'echo "upload"sh 'scp -i authorized_keys.pem ./target/*.jar root@youip:/root/'echo "準備部署"}}// 部署jar包stage("部署") {// 這里需要觸發(fā)一個部署的webhook,可以是一個很簡單的重啟java進程的操作steps {// 用curl 來觸發(fā)hooksh 'curl http://baidu.com'echo "請登錄服務器手動部署"}}} } 復制代碼

    pom.xml

    文中所用 Spring Boot 示例項目的 pom.xml

    實際上,大家可以直接去 start.spring.io 參考照這份 pom 來創(chuàng)建一個 demo。

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>tech.hejian</groupId><artifactId>codingj8</artifactId><version>0.0.1-SNAPSHOT</version><name>codingj8</name><description>coding project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.6</version><configuration><skipTests>true</skipTests></configuration></plugin></plugins></build></project> 復制代碼

    總結

    CODING?是一個面向開發(fā)者的云端開發(fā)平臺,提供 Git/SVN 代碼托管、任務管理、在線 WebIDE、Cloud Studio、開發(fā)協(xié)作、文件管理、Wiki 管理、提供個人服務及企業(yè)服務,其中「CODING 持續(xù)集成」集成了 SaaS 化的?Jenkins 等主流企業(yè)開發(fā)流程工具,實現了 DevOps 流程全自動化,為企業(yè)提供軟件研發(fā)全流程管理工具,打通了從團隊構建、產品策劃、開發(fā)測試到部署上線的全過程。

    總結

    以上是生活随笔為你收集整理的持续集成之 Spring Boot 实战篇的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。