从jenkins传递MAVEN配置文件参数

时间:2013-09-16 13:16:35

标签: android maven jenkins

在我的Android项目的POM.xml文件中,我创建了六个配置文件。我从命令行运行这些,如mvn clean install -P mdpi。这很好用。现在我正在使用jenkins进行CI。我希望向用户显示所有配置文件的下拉列表,然后使用mvn clean install -P ${selected-profile},以便${selected-profile}变量包含构建的配置文件。我怎么能这样做?

2 个答案:

答案 0 :(得分:14)

我建议您安装parametrized build plugin,这样您就可以向作业用户显示选项列表。要启用它,您必须检查“此构建是否已参数化”#39;选项然后定义选项。

为了能够定义列表选项,您必须安装extended choice parameter plugin,通过添加列表选项(和其他参数类型)来扩展第一个选项。

然后,您就可以定义PROFILE列表选项。选定的选项名称将存储在参数名称中。

maven cmdline:' mvn clean install -P $ {PROFILE}'然后会像你期望的那样工作。

我希望这有帮助!

答案 1 :(得分:0)

我已将以下内容添加到我的Jenkins文件中:

pipeline {
agent {
    label 'common'
}
tools {
    maven 'Maven-3.5.4'
}
stages {
    stage('Build and Publish') {
        when {
            anyOf {
                buildingTag();
                branch 'master';
                branch 'develop';
                branch 'release/**';
            }
        }
        steps {
            script {
                def server = Artifactory.server 'test-artifactory'
                def rtMaven = Artifactory.newMavenBuild()
                def buildInfo
                //Set defualt profile
                def mvnProfile = 'dev'
                //Set the target mvn profile based on the current branch 
                if(env.BRANCH_NAME.equals('master')){
                    mvnProfile = 'prod'
                 }else if(env.BRANCH_NAME.startsWith('release/')){
                    mvnProfile = 'test'
                }

                rtMaven.tool = "Maven-3.5.4"
                // Set Artifactory repositories for dependencies resolution and artifacts deployment.
                rtMaven.deployer releaseRepo:'libs-release-local', snapshotRepo:'libs-snapshot-local', server: server

                buildInfo = rtMaven.run pom: 'pom.xml', goals: 'clean install -Dmaven.test.skip=true -P' + mvnProfile
                server.publishBuildInfo buildInfo
            }
        }
    }

}

}

我在脚本中添加了以下条件来设置目标mvn配置文件:

//Set defualt profile
def mvnProfile = 'dev'
//Set the target mvn profile based on the current branch 
if(env.BRANCH_NAME.equals('master')){
    mvnProfile = 'prod'
}else if(env.BRANCH_NAME.startsWith('release/')){
    mvnProfile = 'test'
}