Maven自動化部署

hkk666123發表於2020-12-28

Maven自動化部署

概述

在專案開發中,部署過程通常包含以下步驟:

  1. 檢查在建專案程式碼全部進入SVN或Git庫中,並標記它。
  2. 從SVN/Git下載完整的原始碼。
  3. 構建應用程式。
  4. 將生成的WAR或JAR檔案儲存到指定的網路位置。
  5. 從該網路位置獲取檔案並部署到生產現場。
  6. 更新應用程式的日期和版本號。

問題描述及使用場景

  • 場景: 通常有多人蔘與了上述部署過程,一個團隊手動簽入程式碼,其他人處理構建等。 由於涉及多團隊手動操作,任何一個步驟出錯都會導致整個部署過程出問題。例如,網路裝置中較舊的版本可能不會被替換,從而導致部署團隊部署舊版本。
  • 問題: 那麼是否能實現自動化部署呢?
  • 解決: 使用自動化部署後的部署過程如下:
    1. Maven構建和釋放專案;
    2. SVN原始碼庫管理原始碼;
    3. 遠端儲存庫管理器(Jfrog/Nexus)管理專案的二進位制檔案。

使用maven-plugin實現自動化部署

pom.xml

使用Maven的釋出外掛來建立一個自動釋放過程,
例如:bus-core-api專案pom.xml

<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>
  <groupId>bus-core-api</groupId>
  <artifactId>bus-core-api</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging> 
  <scm>
    <url>http://www.svn.com</url>
    <connection>scm:svn:http://localhost:8080/svn/jrepo/trunk/Framework</connection>
    <developerConnection>scm:svn:${username}/${password}@localhost:8080:common_core_api:1101:code</developerConnection>
  </scm>
  <distributionManagement>
    <repository>
      <id>Core-API-Java-Release</id>
      <name>Release repository</name>
      <url>http://localhost:8081/nexus/content/repositories/Core-Api-Release</url>
    </repository>
  </distributionManagement>
  <build>
    <plugins>
      <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-release-plugin</artifactId>
       <version>2.0-beta-9</version>
       <configuration>
         <useReleaseProfile>false</useReleaseProfile>
         <goals>deploy</goals>
         <scmCommentPrefix>[bus-core-api-release-checkin]-</scmCommentPrefix>
       </configuration>
      </plugin>
    </plugins>
  </build>
</project>

在pom.xml中,使用的重要元素如下:

元素描述
scmConfigures the SVN location from where Maven will check out the source code.
repositoriesLocation where built WAR/EAR/JAR or any other artifact will be stored after code build is successful.
pluginmaven-release-plugin is configured to automate the deployment process.

Maven外掛釋出命令

Mavenmaven-release-plugin常用的任務如下:

  1. mvn release:clean

    清潔,防止工作區最近一次的釋放過程並不順利。

  2. mvn release:rollback

    回滾,防止工作空間程式碼和配置更改的最近一次的釋放過程並不順利。

  3. mvn release:prepare

    執行多個操作:

    • 檢查是否有未提交的本地更改
    • 確保沒有最新的快照依賴
    • 更改應用程式的版本並刪除舊快照版本
    • 更新檔案到SVN
    • 執行測試用例
    • 提交修改後POM檔案
    • 在subversion中標籤程式碼
    • 增加版本號和附加快照為後續發版做準備
    • 提交修改後的POM檔案到SVN
  4. mvn release:perform

    檢出使用前面定義的標籤程式碼, 並執行Maven的把目標WAR部署到Nexus。

示例:

開啟控制檯, 進入C: > MVN > bus-core-api目錄執行以下mvn命令:

C:MVN\bus-core-api>mvn release:prepare

Maven將開始建設該專案, 構建成功後執行下面的mvn命令:

C:MVN\bus-core-api>mvn release:perform

構建成功後,可以在Nexus驗證最新的JAR檔案是否上傳。

疑問

Maven私服學習(Nexus)

該技術目前已經有些過時了, 已被當下以Kubernetes (K8s)為核心的DevOps雲技術所替代, 後者的自動部署/日誌分析/效能檢測等功能更加有優勢.

相關文章