一千萬個為什麽

搜索

Jenkins Artifactory Integration - 自定義Maven插件,用於創建動態版本/構建



我目前正在開發一個自定義Maven插件,它以zip文件的形式生成一個帶有動態版本或內部版本號的構建工件。文件的格式是這樣的

target/[artifactId]_[version or build].zip

其中[version或build]參數是基於時間快照動態生成的(例如[changeset24] - [changeset57])在參數化的Jenkins構建中,構建的用戶不一定知道最新的變更集。該插件使用API​​來確定最新的變更集,例如changset57,然後使用起始變更集參數來形成zip工件的唯一版本/構建。

這是一個解決方案,用於簡化我們在企業中圍繞基於delta的SQL腳本在極其復雜的模式上面臨的混亂和手動過程。單個版本化數據庫工件的環境沒有明確的升級路徑。這是一個很長的故事,有一個非常不成熟的devops組織和許多框架和技能集不能很好地融合,所以我將在這裏省略其余的細節。

Ultimately we need to specify not the JAR artifact for this build to upload to Artifactory, but the ZIP file that is being created here, however Maven does not seem to allow for us to change the hard coded in the POM file, and even if we could, we need the ability to:

  1. 使用自定義插件執行目標運行Maven構建
  2. 解析輸出文件以獲取生成的唯一版本號
  3. 覆蓋Jenkins中的 $ {VERSION}$ {BUILD_NUMBER} 環境變量
  4. 使用構建信息中包含的版本號或內部版本號的新環境變量將工件上載到Artifactory。

我遇到的問題是,我似乎無法弄清楚如何使用現有的Maven3-Artifactory Jenkins插件配置這4個步驟,也無法使用FileSpec JSON配置Generic Artifactory插件。我不知道如何在此過程之間註入自定義shell腳本以覆蓋環境變量。

有沒有人對如何配置這份工作有什麽好的建議?

註意:請不要建議我的一般方法從根本上是壞的或有缺陷的或其他什麽。這沒有用,因為我面臨著許多阻礙更合適的解決方案的技術和政治限制。

轉載註明原文: Jenkins Artifactory Integration - 自定義Maven插件,用於創建動態版本/構建

一共有 1 個回答:

我想出了如何讓這個工作運行,這需要采取一些非常具體的步驟:

1)Maven3-Artifactory插件根本不能做我需要它做的事情。我仍然需要在我的工作中,但實際上從項目POM執行我的自定義maven插件。我為此插件配置了構建環境,以便不將任何構建工件上傳到Artifactory。

2)我添加了Generic Artifactory插件,該插件負責從Maven插件中獲取zip工件並將其上傳到我們的Artifactory倉庫。我努力來定義正常運行的上傳文件規範。我最終使用了Legacy Patterns選項,我可以根據之前為我定義的一些環境變量定義上傳工件和repo位置(在以後的步驟中有關於此的更多信息)。下載詳細信息實際上是空的。

3)第一個構建步驟是執行Maven構建。

4)第二個構建步驟是執行自定義shell,該shell將解析maven構建工件zip文件,以獲取導出版本號所需的信息。然後,它將此版本號註入作業工作區根目錄中的臨時屬性文件中。

5)第三個構建步驟使用Inject Environment Variables插件將臨時屬性文件放入Generic Artifactory Plugin Legacy Pattern使用的環境變量中。

這似乎可以很好地解決我的情況。