运行Maven部署而无需重新运行整个构建

gri*_*gon 6 maven jenkins jenkins-pipeline

我正在为Maven项目开发多分支管道。我正在尝试遵循Jenkins文档所引用的标准CI步骤,即构建,测试和部署。但是,maven在将这些步骤视为谨慎的步骤时似乎并不很好。

到目前为止,我有:

stages {
    stage('Test') {
        steps {
            sh "mvn -B clean verify"
        }
    }
    stage('Deploy') {
        when {
            branch 'master'
        }
        steps {
            sh "mvn -B deploy"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,完整版本将运行两次,一次在Test阶段中,一次在Deploy阶段中。不好意思,这要感谢Google Web Toolkit,因为它很耗时,但是这是一个单独的问题。

有没有一种方法可以优雅地跳过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"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

由于Jenkins UI中的呈现方式,我对此都不满意,并且将Jenkins文档中暗示的将三个阶段压缩为一个阶段是一件很奇怪的事情。我认为这是次要的邪恶,所以除非我能找到更好的东西,否则我可能会坚持下去。

rol*_*lve 0

这是部分答案。

通常,构建中最耗时的部分是运行测试。对于许多项目来说,跳过该部分已经足以将构建时间缩短到可接受的程度。

在 Maven 中,您可以跳过单元测试的执行(由Surefire 插件完成),如下所示:

mvn deploy -B -DskipTests
Run Code Online (Sandbox Code Playgroud)

如果您的项目有交互测试(由Failsafe Plugin执行),您也可以跳过这些测试:

mvn deploy -B -DskipTests -DskipITs
Run Code Online (Sandbox Code Playgroud)