Jenkins管道插件 - 获取和构建依赖项

时间:2017-11-20 15:08:29

标签: maven jenkins jenkins-pipeline

我是詹金斯的新手,而且我的搜索量很少,我认为我还没有获得术语。

我有一个项目,我想用Jenkins Pipelines构建。它是GIT存储库中的Java / maven项目。这取决于我的另外两个Java / maven项目,也取决于GIT存储库。

如何向Jenkins解释这种关系?

让我们简化一下。假设我拥有依赖于ProjectB的ProjectA。我可以让Jenkins构建ProjectB没问题。如果需要,我甚至可以存档jar,因此ProjectB的编译副本存储在我的Jenkins服务器中。

但无论我做什么,ProjectA都无法使用

进行构建
  

[错误]无法在项目ProjectA上执行目标:无法解析项目ProjectA的依赖项:无法解析以下工件:ProjectB:jar:0.9:无法在https://repo.maven.apache.org/maven2中找到ProjectB:jar:0.9缓存在本地存储库中,在中心的更新间隔过去或强制更新之前,不会重新尝试解析 - > [帮助1]

这很简单,我只是无法弄清楚我甚至需要搜索的内容。

ProjectA中的My Jenkins文件现在看起来像这样:

pipeline {
agent {
    docker {
        image 'maven:3-alpine'
        args '-v /root/.m2:/root/.m2'
    }
}
stages {
    stage('Build') {
        steps {
            build 'ProjectB'
            sh 'mvn -B -DskipTests clean package'
        }
    }
}

}

1 个答案:

答案 0 :(得分:1)

项目A独立于项目B.在Jenkins中存档它们并不会将它们放在Maven可以识别的任何地方并将它们用作依赖项。你必须确保你的maven工作知道如何找到它们。有几种选择。

您可以发布到像神器一样的存储库。然后需要配置Maven以查看该回购。

如果是新版本,您可以使用Jenkins REST API,甚至只使用uri来查找工件并将其下载到工作区中。

您可以使用Copy Artifact插件将工件从另一个构建中拉入工作区,以便您可以使用它。

或者,由于它是一个管道,您可以在同一管道的不同阶段构建两个部分。

如果您在作业B中构建的图书馆仅专门用于作业A,我会考虑在同一管道中构建它们。但有时使用某种外部存储库来发布库仍然更有意义,然后只需配置maven来查看该repo以查找依赖项。我通常会使用该选项,但它需要更多软件和更多设置。