亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 Maven Surefire 3 無法使用 Docker 在 Jenkins 中運行我的

為什么 Maven Surefire 3 無法使用 Docker 在 Jenkins 中運行我的

MM們 2022-11-10 10:18:00
我有一個由 Maven 管理的帶有一些 Cucumber 測試和一些常規 JUnit 測試的 Java 項目。我想使用 Docker 在 Jenkins 中運行測試,所以我寫了這個Jenkinsfile:pipeline {    agent {        docker {            image 'maven:3.6.1'        }    }    stages {        stage('build') {            steps {                sh 'mvn clean verify -Dmaven.test.failure.ignore=true'            }            post {                success {                    junit 'target/surefire-reports/**/*.xml'                }            }        }    }}當我運行構建時,常規測試通過但 Cucumber 測試失敗:錯誤信息URI 有一個查詢組件堆棧跟蹤java.lang.IllegalArgumentException:URI 有一個查詢組件直到我禁用它trimStackTrace,maven-surefire-plugin我才得到詳細信息:<plugin>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-surefire-plugin</artifactId>    <configuration>        <trimStackTrace>false</trimStackTrace>    </configuration></plugin>這很令人費解,因為:mvn verify在本地運行時,它可以工作在 中使用agent any時Dockerfile,而不是 maven Docker 映像,它可以工作當使用maven-surefire-pluginversion2.22.2而不是 時3.0.0-M3,它可以工作我以 Jenkins 身份登錄并查看了工作區:$ sudo su - jenkins$ ls /var/lib/jenkins/workspace/question-mark-dir_master'?'   Jenkinsfile   LICENSE   pom.xml   README.md   src   target那里有一個問號 ( ?) 目錄,它包含該.m2目錄以及項目所需的所有工件。我懷疑這可能是異常的原因,因為類路徑中有問號,而問號是引入 URI 查詢組件的。目前我可以降級到maven-surefire-plugin版本2.22.2作為一種解決方法。但這里的實際問題是什么?會不會是新的bug maven-surefire-plugin?從堆棧跟蹤來看,我不會打賭。是 Jenkins 還是 Maven docker 映像(哪個?)中的問題,導致目錄具有如此不幸的名稱?難道我做錯了什么?如果你想試試這個,我有一個 MVCE。在我的本地 Jenkins 安裝中,我創建了一個類型為“Multibranch Pipeline”的新項目,并在“Branch Sources”中添加了我的本地 git 項目作為 git 項目存儲庫。沒有其他變化。
查看完整描述

1 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

通過將 TYY對問題的評論maven docker image 的文檔結合起來,我能夠以Jenkinsfile一種避免創建問號目錄的方式進行配置。

我們需要通知 Maven 用戶的主目錄,并將其映射到容器外的目錄。

pipeline {

    agent {

        docker {

            image 'maven:3.6.1'

            args '-v /var/lib/jenkins:/usr/src/mymaven -w /usr/src/mymaven'

        }

    }

    stages {

        stage('build') {

            steps {

                sh 'MAVEN_OPTS="-Duser.home=/usr/src/mymaven" mvn clean verify -Dmaven.test.failure.ignore=true'

            }

            // ...

        }

    }

}

  • -v /var/lib/jenkins:/usr/src/mymaven/var/lib/jenkins將主機上的目錄映射到/usr/src/mymaven容器內的目錄

  • -w /usr/src/mymaven設置容器內的工作目錄

  • MAVEN_OPTS="-Duser.home=/usr/src/mymaven"為 Maven設置user.homeJava 屬性

在 MCVE的一個分支上證明它有效。


查看完整回答
反對 回復 2022-11-10
  • 1 回答
  • 0 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號