Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在不重新运行整个构建的情况下运行maven deploy_Maven_Jenkins_Jenkins Pipeline - Fatal编程技术网

在不重新运行整个构建的情况下运行maven deploy

在不重新运行整个构建的情况下运行maven deploy,maven,jenkins,jenkins-pipeline,Maven,Jenkins,Jenkins Pipeline,我正在为一个maven项目开发一个多分支管道。我试图遵循Jenkins文档一直提到的标准CI步骤,即构建、测试和部署。但maven似乎不太擅长将这些作为谨慎的步骤 到目前为止,我有: stages { stage('Test') { steps { sh "mvn -B clean verify" } } stage('Deploy') { when { branch 'mas

我正在为一个maven项目开发一个多分支管道。我试图遵循Jenkins文档一直提到的标准CI步骤,即构建、测试和部署。但maven似乎不太擅长将这些作为谨慎的步骤

到目前为止,我有:

stages {
    stage('Test') {
        steps {
            sh "mvn -B clean verify"
        }
    }
    stage('Deploy') {
        when {
            branch 'master'
        }
        steps {
            sh "mvn -B deploy"
        }
    }
}
这样,完整构建将运行两次,一次在
Test
阶段,另一次在
Deploy
阶段。这并不好,因为这是一个非常耗时的构建,这要感谢GoogleWebToolkit,但这是另一个问题

是否有一种方法可以优雅地跳过
Deploy
阶段中较早的maven生命周期步骤并跳到部署目标

我能想到的唯一其他选择是

stages {
    stage('Test') {
        when {
            // Some expression that states "not master"
        }
        steps {
            sh "mvn -B clean verify"
        }
    }
    stage('Test-and-Deploy') {
        when {
            branch 'master'
        }
        steps {
            sh "mvn -B deploy"
        }
    }
}

我对此也不满意,因为这在Jenkins UI中是如何呈现的,而且将Jenkins文档所暗示的应该是3个阶段压缩为一个阶段感觉很奇怪。我认为这是一个较小的缺点,所以除非我能找到更好的方法,否则我可能会这样做。

如果你真的喜欢遵循文档,那么你的步骤
测试
也是错误的,因为在Maven中你编译、打包(jar/等等)然后你做单元测试,
verify
还包括集成测试,如果在Maven build中定义了什么……我建议你通过
mvn-B clean Deploy
进行
Test Deploy
,在其他你只想运行测试的地方。另一方面,通过
mvn-B clean verify
,你可以尝试在单独的
deploy
步骤中仅使用
mvn deploy:deploy
,但我建议不要仅为了遵循文档而单独使用这些步骤……做最适合的事情。这取决于“deploy”之前的生命周期阶段所做的事情。如果工件是在一个阶段创建的,并动态地添加到反应器中,那么你就不走运了。您可以尝试的是只执行部署目标,而不是执行“mvn部署:部署”阶段,这可能会得到您需要的结果。您最终得到了解决方案吗?我现在也遇到了同样的问题,这是一个典型的“正确的方法”案例,我觉得这是错误的,因为我知道这应该是一个阶段,但是我失去了以前UI的所有粒度。这只是maven是一个非常弱的工具的另一个例子。没有插件,依赖性解析是一种疯狂,依赖性:树与实际的LIB不匹配,如果您通过父级拥有DEP,则将其放入战争中,缺少增量构建,无法在不同命令中执行步骤,等等。。。。不过,中央回购非常棒。你也在寻找这个功能吗?这是maven感到恼火的另一个原因