如何将Jenkins的特定工件部署到Nexus?

时间:2014-06-05 20:09:56

标签: maven jenkins jenkins-plugins nexus

我有一个在Jenkins运行的多模块maven项目。我想将最终工件(来自程序集构建的RPM)部署到Nexus服务器。我认为没有理由部署中间工件(因此没有" mvn clean deploy")因为这会在我不需要的服务器上产生额外的垃圾。我们正在尝试建立一个持续的交付渠道,因此我们不会部署SNAPSHOT版本。 Jenkins的各种插件似乎专注于部署所有工件。我怎样才能部署我选择的那个?

编辑:

经过深思熟虑后,如果部署在所有构建完成后发生,我愿意将所有工件部署到nexus。如果我要走这条路,我想要使用"部署工件到maven存储库"建立后的行动。这个工具似乎破了,因为它缺少指定用户名/密码的功能。我知道这可以在settings.xml中指定,但显然只有" .m2"中的那个。它似乎没有看到我为此构建指定的settings.xml。

对于重新部署工件,这似乎也被打破了。有一些verbage在" Jenkins the Definitive Guide"为此,但它谈到了一个"本地" settings.xml中。我的所有构建都发生在Jenkins的奴隶身上,所以这不是一个选项,对Jenkins架构来说甚至没有意义。

4 个答案:

答案 0 :(得分:1)

如果你还需要通用方式。

使用Execute shell选项并手动使用mvn deploy命令,您可以将您的版本和其他内容(例如groupID等)作为参数传递给作业,如果您维护单独的作业来构建和上传,这将有效。

例如:

导出M2_HOME = / PATH / TO / softwares / apache-maven-3.0.4 PATH = $ M2_HOME / bin中:$ JAVA_HOME / bin中:$ PATH 出口道路

mvn -v

mvn deploy:deploy-file -Durl = http://someorg:8081/nexus/content/repositories/t1.snapshot/ -DrepositoryId = t1.snapshot -DartifactId = artifactID -DgroupId = groupID -Dpackaging = zip -Dfile = $ {WORKSPACE} /filename.zip -Dversion = 1.0 -TEST-SNAPSHOT -s" /path/to/.m2/settings.xml"

答案 1 :(得分:0)

您可以使用' Deploy artifacts to Maven Repository'在'后建立行动'。看看这个answer

答案 2 :(得分:0)

这是我提出的丑陋黑客。我很乐意给别人“#14;正确的"如果有人有更好的想法,请回答这个问题:

我意识到我需要部署父pom.xml和程序集。我是在两个单独的后期构建步骤中完成的。

首先,我选择"调用顶级Maven目标"使用Maven版本的" Maven" (我认为这使用了詹金斯版本的maven。我不想在系统上放置不同的版本)。我使用了目标:

-s svn-admin/settings.xml -N deploy

使用我指定的settings.xml将父pom部署到nexus。

当我想部署rpm时,真的发生了很大的攻击。我尝试了一个" deploy-file"目标,但没有变量我可以扩展到版本号,我无法指定确切的文件和通配符不扩展。相反,我做了一个"执行shell"选项和使用的卷曲我找到了here

env
UPLOAD_FILE=assembly/target/ips-${POM_VERSION}-x.x86_64.rpm
DESTINATION=http://mvnrepo01/nexus/content/repositories/releases/com/bla/ips/assembly/${POM_VERSION}/assembly-${POM_VERSION}.rpm
sha1sum ${UPLOAD_FILE} | awk -F" " '{print $1}' | curl -v -u admin:password --upload-file - ${DESTINATION}.sha1
md5sum ${UPLOAD_FILE} | awk -F" " '{print $1}' | curl -v -u admin:password --upload-file - ${DESTINATION}.md5
curl -v -u admin:password --upload-file ${UPLOAD_FILE} ${DESTINATION}

UPLOAD_FILE=assembly/pom.xml
DESTINATION=http://mvnrepo01/nexus/content/repositories/releases/com/bla/ips/assembly/${POM_VERSION}/assembly-${POM_VERSION}.pom
sha1sum ${UPLOAD_FILE} | awk -F" " '{print $1}' | curl -v -u admin:password --upload-file - ${DESTINATION}.sha1
md5sum ${UPLOAD_FILE} | awk -F" " '{print $1}' | curl -v -u admin:password --upload-file - ${DESTINATION}.md5
curl -v -u admin:password --upload-file ${UPLOAD_FILE} ${DESTINATION}

就像我说的,这是一个丑陋的黑客。我非常确定有些元数据文件没有得到更新,但rpm,它的pom以及它们的校验和正在上传。

答案 3 :(得分:0)

您可以使用 Nexus Jenkins插件将Jenkins中的特定工件部署到Nexus中: https://support.sonatype.com/hc/en-us/articles/227256688-How-do-I-configure-the-Nexus-Jenkins-Plugin

Jenkins管道示例:

stage('Publish') {
    def pom = readMavenPom file: 'pom.xml'
    nexusPublisher nexusInstanceId: 'your-nexus-instance-id', \
        nexusRepositoryId: 'your-nexus-repository-id', \
        packages: [[$class: 'MavenPackage', \
        mavenAssetList: [[classifier: '', extension: '', filePath: "target/${pom.artifactId}-${pom.version}.${pom.packaging}"]], \
        mavenCoordinate: [artifactId: "${pom.artifactId}", \
        groupId: "${pom.groupId}", \
        packaging: "${pom.packaging}", \
        version: "${pom.version}"]]]
}

在这种情况下,Nexus Jenkins插件将仅将您的target/${pom.artifactId}-${pom.version}.${pom.packaging}pom.xml文件部署到Nexus存储库中。