我創建了一個 Maven Spring boot 專案。在構建作業中,我只想構建沒有測驗的專案。在測驗階段我想運行單元測驗并使用構建階段的構建,所以在測驗階段沒有新的構建。問題是 mvn 在測驗階段再次運行構建。
image: maven:3.8-jdk-11
stages:
- build
- test
build-job:
stage: build
script:
- mvn compile
artifacts:
paths:
- target
test-job:
stage: test
script:
- mvn test
如果它再次在測驗階段運行構建,那么構建階段就不是必需的。但我希望兩個階段都分開,以便更好地分開,看看哪里出了問題。
uj5u.com熱心網友回復:
首先,在我看來,將構建程序拆分為不同階段的想法可能看起來很有吸引力,但實際上并沒有任何實際好處,尤其是在您嘗試將打包拆分為編譯、測驗和可能的打包階段的情況下。考慮以下內容:
- 如果是拉取請求管道,我們實際需要的是:
- 來自拉取請求的更改是否確實有效的答案,即是或否
- 來自其他工具的報告(代碼覆寫率、靜態代碼分析等)
- 構建日志以分析故障
- 在發布管道的情況下,我們還希望將工件部署到 DML
上面提到的一切都已經被 maven 覆寫了 - 沒有實際理由mvn package分成單獨的部分,而且 maven 專案中的所有內容直到verify階段都只與代碼有關 - CI 不應該干預mvn package.
現在,為什么我們需要 CI 中的階段?顯然,當我們的 CI 程序在某種程度上依賴于環境時,我們需要階段,即當我們針對不同平臺執行構建或我們想要運行外部工具時,但是在階段之前沒有外部工具的位置verify。
其次,如果你真的想mvn package分成不同的階段,選項如下:
- 配置 maven 插件以跳過依賴于 maven/system 屬性的執行,大多數 maven 插件都有這樣的能力,例如跳過編譯你可以傳遞
-Dmaven.main.skip=true給命令列或設定類似的東西<skipMain>my.cool.property</skipMain>并傳遞-Dmy.cool.property=true - 和前一個一樣,但在 Maven 組態檔中合并屬性
- 手動重建 Maven 生命周期階段,例如在您的情況下,它可能看起來像:
mvn resources:testResources compiler:testCompile surefire:test
但是,由于以下考慮,從我的角度來看,所有這些選項看起來都很糟糕:
- 它非常復雜和丑陋
- 它需要保持同步 CI 定義和 maven pom
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/498133.html
上一篇:jar沒有從maven下載
