如何在两个nexus存储库(jenkins)之间移动工件?

时间:2016-03-10 14:41:54

标签: maven jenkins gradle nexus

我们使用Jenkins + Gradle Script构建。 要将工件上传到nexus,我们使用:

uploadArchives {
        repositories {
            mavenDeployer {
                def auth = { authentication(userName: nexusUsername, password: nexusPassword) }
                repository(url: rpmReleasesRepoUrl, auth)
                pom.groupId = project.group
                pom.version = project.version
                pom.artifactId = project.product
            }
        }
    }

我们需要一份工作,从一个连接中获取工件并将其上传到另一个连接。

你能建议一下更好的方法吗?如果有任何有用的文章/例子(第一次看到gradle / maven / nexus)?

1 个答案:

答案 0 :(得分:2)

1。 Jenkins神器推广插件

这是一个非gradle解决方案,但您可以在jenkins工作流程中使用this jenkins plugin将构建二进制文件从一个nexus repo升级到另一个。

2。使用命令行参数提供发布的repo URL

uploadArchives {
    ...
            repository(url: project.getProperty('repoURL'), auth)
    ...
}

然后根据需要使用不同的nexus网址运行gradle uploadArchives -PrepoURL=http://nexusurl

3。使用其他任务发布到每个仓库

ext.repoURL=''

task publishToRepo1()<<{
    repoURL = 'http://nexus1.url'
    configureRepo(repoURL)
}
publishToRepo1.finalizedBy('uploadArchives')

task publishToRepo2()<<{
    repoURL = 'http://nexus2.url'
    configureRepo(repoURL)
}
publishToRepo2.finalizedBy('uploadArchives')

def configureRepo(url){
    uploadArchives.repositories {
        mavenDeployer {
            def auth = { authentication(userName: nexusUsername, password: nexusPassword) }
            repository(url: url, auth)
            pom.groupId = project.group
            pom.version = project.version
            pom.artifactId = project.name
        }
    }
}

uploadArchives {
    doFirst{
        if (!repoURL){
            println "Please use publishToRepo1 or publishToRepo1 to publish"
            throw new GradleException('use of uploadArchives is restricted!')
        }
    }
}

如果直接使用publishToRepo1或publishToRepo2消息调用uploadArchives,这将导致gradle构建失败。直接调用这些任务将调用uploadArchives并配置相应的repo url。