成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

多人多團(tuán)隊(duì)?wèi)?yīng)該如何實(shí)施微服務(wù)?版本如何管理?

開發(fā) 架構(gòu)
Release版本是正式版,有bug不能再繼續(xù)使用這個版本號,需要配合開發(fā)方修改版本號;Snapshot版本是快照版,有bug可以繼續(xù)使用同一版本號,可以自動升級。

大家好,我是飄渺。今天繼續(xù)更新DDD&微服務(wù)專欄,本篇主要與大家分享一下在多人團(tuán)隊(duì)中如何更好地組織代碼和版本控制。

代碼倉庫分離

首先,看看在多模塊多團(tuán)隊(duì)的情境下,應(yīng)該如何合理組織代碼。

以Dailymart項(xiàng)目為例,目前的代碼組織方式是將所有的業(yè)務(wù)模塊和基礎(chǔ)組件都存放在一個代碼倉庫中,這種做法在小團(tuán)隊(duì)中較為常見,而且許多開源微服務(wù)腳手架也采用了這種組織結(jié)構(gòu)。

然而,遺憾的是,這種代碼組織方式只適合小團(tuán)隊(duì)的使用。在涉及多個團(tuán)隊(duì)的大型項(xiàng)目中,每個團(tuán)隊(duì)負(fù)責(zé)獨(dú)立的開發(fā)模塊時,這樣的代碼組織結(jié)構(gòu)很可能會引發(fā)問題。

在多模塊多團(tuán)隊(duì)的開發(fā)中,每個模塊的發(fā)布日期和上線范圍可能各不相同。為了解決這個問題,通常需要在開發(fā)過程中創(chuàng)建多個分支,這導(dǎo)致多個分支版本并存的情況。

這樣的情況下,每次上線都需要協(xié)調(diào)各團(tuán)隊(duì)進(jìn)行分支代碼合并。例如,從各自的特性Feature分支合并到一個統(tǒng)一的測試分支,然后從測試分支構(gòu)建部署鏡像進(jìn)行發(fā)布。然而,合并過程中一旦出現(xiàn)代碼沖突,就需要找相關(guān)人員進(jìn)行代碼合并,這不僅耗時耗力,而且容易出錯。(我曾參與過一個多團(tuán)隊(duì)項(xiàng)目開發(fā),每次上線都是雞飛狗跳)

因此,在多團(tuán)隊(duì)開發(fā)時,我們建議按照業(yè)務(wù)模塊進(jìn)行代碼拆分,將每個業(yè)務(wù)模塊的代碼存放在獨(dú)立的代碼倉庫中。

這樣,盡管各自團(tuán)隊(duì)可能仍然存在多分支開發(fā)的情況,但不再需要進(jìn)行統(tǒng)一的合并,從而極大地提高了開發(fā)部署的效率。

同時,需要將所有公共組件也放置于一個單獨(dú)的代碼倉庫中,業(yè)務(wù)模塊按需引入即可。

接下來以Dailymart為例,介紹一下代碼如何拆分:

1、DailyMart項(xiàng)目中包含了用戶、訂單、購物車、庫存、商品等多個模塊,這些模塊按照普通SpringBoot項(xiàng)目的形式組織代碼,并存放在不同的代碼倉庫中。

2、將基礎(chǔ)組件模塊dailymart-starter和dailymart-dependencies模塊共同放置到另外一個單獨(dú)的倉庫中,業(yè)務(wù)模塊根據(jù)需要引入各自需要的組件。

組件版本的統(tǒng)一管理

在大型項(xiàng)目中,需要統(tǒng)一規(guī)劃依賴組件的版本,在Maven項(xiàng)目中通常通過BOM(Bill Of Materials)來實(shí)現(xiàn)。

BOM全稱是Bill Of Materials,譯作材料清單。BOM本身并不是一種特殊的文件格式,而是一個普通的POM文件,只是在這個POM中,我們羅列的是一個工程的所有依賴和其對應(yīng)的版本。該文件一般被其它工程使用,當(dāng)其它工程引用BOM中羅列的jar包時,不用顯示指定具體的版本,會自動使用BOM對應(yīng)的jar版本。

在Dailymart項(xiàng)目中,dailymart-dependencies就是一個BOM,在該文件中定義了項(xiàng)目所需組件的版本。其他模塊只需在pom文件的dependencyManagement中引入bom依賴,后面引入定義好的組件時就不再需要指定版本了。

<dependencyManagement>  
    <dependencies>    
        <dependency>  
            <groupId>com.jianzh5</groupId>  
            <artifactId>dailymart-dependencies</artifactId>  
            <version>${revision}</version>  
            <type>pom</type>  
            <scope>import</scope>  
        </dependency>  
    </dependencies> 
</dependencyManagement>

<dependencies>
 <dependency>  
      <groupId>com.google.guava</groupId>  
      <artifactId>guava</artifactId>  
    </dependency>
</dependencies>

公共組件升級

當(dāng)項(xiàng)目中有多個公共組件時會出現(xiàn)這樣一個問題,每個公共組件定義的版本可能不一樣。比如dailymart-common-spring-boot-starter的版本是1.0.0,dailymart-cache-spring-boot-starter的版本是1.0.1,這樣就導(dǎo)致項(xiàng)目的依賴管理變得比較混亂。

推薦的解決辦法是使用 revision 占位符統(tǒng)一管理基礎(chǔ)組件版本。

1、在pom文件中定義屬性

<properties>  
    <revision>2024.0.0-SNAPSHOT</revision>
</properties>

2、定義組件時直接使用revision變量作為版本號

<parent>  
    <groupId>com.jianzh5</groupId>  
    <artifactId>dailymart-boot</artifactId>  
    <version>${revision}</version>  
</parent>  
  
<artifactId>dailymart-starter</artifactId>

3、在bom文件中通過revision占位符引入公共組件

<dependencyManagement>  
  <dependencies>  
 <!-- Internal dependencies Start-->  
 <dependency>  
  <groupId>com.jianzh5</groupId>  
  <artifactId>dailymart-common-spring-boot-starter</artifactId>  
  <version>${revision}</version>  
 </dependency>
 
 <dependency>  
     <groupId>com.jianzh5</groupId>  
     <artifactId>dailymart-ddd-spring-boot-starter</artifactId>  
     <version>${revision}</version>  
 </dependency>
  </dependencies>
  
</dependencyManagement>

這樣,若公共組件需要修改版本,只需修改 revision 變量的值,各組件版本就會統(tǒng)一變更,非常方便。

不過使用這種方式在公共組件模塊執(zhí)行 maven install 或 maven deploy 時會出現(xiàn)問題,推送到maven倉庫中的pom文件仍然使用 revision 變量,業(yè)務(wù)模塊無法直接引用。

此時我們需要借助Maven插件 flatten-maven-plugin,使其在 install 或 deploy 時自動將 revision 替換成具體的版本號。

<build>  
    <plugins>  
        <plugin>  
            <groupId>org.codehaus.mojo</groupId>  
            <artifactId>flatten-maven-plugin</artifactId>  
            <version>${maven-flatten.version}</version>  
            <configuration>  
                <updatePomFile>true</updatePomFile>  
                <flattenMode>resolveCiFriendliesOnly</flattenMode>  
            </configuration>  
            <executions>  
                <execution>  
                    <id>flatten</id>  
                    <goals>  
                        <goal>flatten</goal>  
                    </goals>  
                    <phase>process-resources</phase>  
                </execution>  
                <execution>  
                    <id>flatten.clean</id>  
                    <goals>  
                        <goal>clean</goal>  
                    </goals>  
                    <phase>clean</phase>  
                </execution>  
            </executions>  
        </plugin>  
    </plugins>  
</build>

在pom文件添加此插件后,執(zhí)行 install 時會生成一個名為 .flattened-pom.xml 的文件,打開文件后可以看到 revision 變量已經(jīng)全部替換成了具體的版本號。

圖片圖片

Maven版本的選擇

在將自定義組件推送到maven倉庫時,可以選擇兩種不同版本:Release版本和Snapshot版本。這兩者應(yīng)該如何選擇呢?

兩者區(qū)別的區(qū)別如下:

  • 如果是Snapshot版本,在mvn deploy時會自動發(fā)布到快照版本庫中。引入使用快照版本的模塊,在不更改版本號的情況下,直接編譯打包時,Maven會自動從倉庫下載最新的快照版本。
  • 如果是Release版本,那么在mvn deploy時會自動發(fā)布到正式版本庫中。引入正式版本的模塊,在不更改版本號的情況下,編譯打包時,如果本地已經(jīng)存在該版本的模塊則不會主動去鏡像服務(wù)器上下載。

簡而言之:Release版本是正式版,有bug不能再繼續(xù)使用這個版本號,需要配合開發(fā)方修改版本號;Snapshot版本是快照版,有bug可以繼續(xù)使用同一版本號,可以自動升級。

如果是內(nèi)部開發(fā)項(xiàng)目,推薦使用Snapshot版本,即定義組件時在版本號后面加上 -SNAPSHOP 標(biāo)識符,這樣搭配上DevOps會非常方便;如果是需要對外發(fā)布的組件,還是需要使用Release版本發(fā)布。

小結(jié)

本文介紹了在多人團(tuán)隊(duì)協(xié)作中更有效地組織代碼和進(jìn)行版本控制的方法,希望對你有所幫助!

  1. 代碼倉庫優(yōu)化: 建議按業(yè)務(wù)模塊分離代碼至獨(dú)立倉庫,提高開發(fā)效率。
  2. 組件版本統(tǒng)一管理: 引入BOM,通過 revision 占位符簡化組件版本管理。
  3. 公共組件版本升級: 推薦使用 revision 占位符集中管理基礎(chǔ)組件版本,借助 flatten-maven-plugin 解決版本問題。
  4. Maven版本選擇: 內(nèi)部項(xiàng)目使用Snapshot版本,外部發(fā)布使用Release版本,確保靈活性和穩(wěn)定性。
責(zé)任編輯:武曉燕 來源: JAVA日知錄
相關(guān)推薦

2024-11-05 13:23:51

2021-04-25 08:43:30

管理前端后端

2019-02-25 09:30:00

微服務(wù)代碼小團(tuán)隊(duì)

2021-03-28 17:21:15

Git分支策略

2022-03-31 08:15:38

微服務(wù)服務(wù)拆分架構(gòu)

2021-12-29 08:30:48

微服務(wù)架構(gòu)開發(fā)

2024-11-06 16:27:12

2019-07-29 13:55:57

2015-10-09 16:38:24

2022-05-16 08:07:15

微服務(wù)容器通信

2019-07-18 12:41:52

數(shù)字化服務(wù)網(wǎng)格微服務(wù)

2022-05-16 08:00:00

服務(wù)網(wǎng)格架構(gòu)Kuma

2023-04-10 07:23:24

軟件微服務(wù)網(wǎng)絡(luò)

2020-07-22 07:00:00

微服務(wù)架構(gòu)

2011-11-18 09:16:20

團(tuán)隊(duì)管理

2013-07-02 10:24:52

團(tuán)隊(duì)管理團(tuán)隊(duì)遠(yuǎn)程團(tuán)隊(duì)

2009-06-19 15:48:26

信息安全管理體系谷安天下

2009-09-16 13:25:11

IT綜合管理平臺

2021-03-30 11:33:45

云計算微服務(wù)云應(yīng)用

2023-03-24 16:18:08

微服務(wù)架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美99久久精品乱码影视 | 97色伦网| 男人天堂社区 | 欧美精品综合在线 | 精品国产一区二区在线 | 中文字幕视频免费 | 久草热线| 欧美video | 国产成人免费视频网站视频社区 | 欧美一二精品 | 日本超碰 | 免费网站国产 | 综合亚洲视频 | 国产成人在线播放 | 国产在线播放一区二区三区 | 中文字幕视频在线 | 欧美在线一区二区三区 | 欧美一区二区三区在线视频 | 国产欧美视频一区 | 亚洲视频中文字幕 | 99精品一区二区三区 | 福利av在线 | 国产一区二区三区www | 久久精品国产免费 | 亚洲精品久久久久久一区二区 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 污污免费网站 | 综合视频在线 | 一区二区成人 | 黄色三级毛片 | 国产在线视频一区 | 久久男人天堂 | 欧美亚洲另类丝袜综合网动图 | 色站综合 | 精品网 | 日韩成人免费av | 一道本在线 | 妞干网视频 | 日本激情一区二区 | 99视频免费在线 | 欧美一级全黄 |