Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 建筑管道项目詹金斯_Java_Maven_Jenkins_Jenkins Pipeline - Fatal编程技术网

Java 建筑管道项目詹金斯

Java 建筑管道项目詹金斯,java,maven,jenkins,jenkins-pipeline,Java,Maven,Jenkins,Jenkins Pipeline,我有一个要求, 创建生成作业 部署到Artifactory 从artifactory下载工件并部署到测试服务器 我在构建管道中配置了所有3个作业。 此外,所有人都拥有共享的构建路径 这基本上是一个Java作业,我已经创建了构建作业,它工作得很好。我使用了下游作业来触发部署到工件作业。它使用Maven构建 在第二个作业中,需要手动触发(我已经这样配置),它运行良好,并且正在部署到我配置的相应存储库中。我使用了通用的artifactory集成插件,并使用发布的工件推送到artifactory存储库

我有一个要求,

  • 创建生成作业
  • 部署到Artifactory
  • 从artifactory下载工件并部署到测试服务器
  • 我在构建管道中配置了所有3个作业。 此外,所有人都拥有共享的构建路径

    这基本上是一个Java作业,我已经创建了构建作业,它工作得很好。我使用了下游作业来触发部署到工件作业。它使用Maven构建

    在第二个作业中,需要手动触发(我已经这样配置),它运行良好,并且正在部署到我配置的相应存储库中。我使用了通用的artifactory集成插件,并使用发布的工件推送到artifactory存储库

    现在是第三项工作,如何从artifactory下载工件? 如果从第二个作业开始,我们可以将artifactoryurl存储到一个文件中,并将其作为参数化构建读取,我认为它会起作用

    但是我没有得到任何线索来获取人工URL


    请帮忙

    我想你错过了管道的要点。最初的自由式作业开始变得过于复杂,并且在将它们链接在一起时具有困难的依赖关系(例如如何将此url从该作业获取到该作业)。解决方案是创建一个带有阶段的管道

    stages{
        stage('build') {
            steps {
                //build some stuff
            }
        }
        stage('publish') {
            steps {
                      //publish the stuff
            }
        }
        stage('deploy) {
            steps {
                // download and deploy the stuff
            }
        }
    

    在我看来,在您的情况下,只部署您已经拥有的东西而不重新下载这些东西可能更有用。查看
    隐藏/取消隐藏
    步骤。这些将在不同阶段之间发挥作用

    我通过下面的方法实现了这一点。


    1.创建了生成作业-->这将从存储库下载代码并执行maven生成。对Pom.xml进行了调整,使我得到一个tar.gz文件作为输出。构建编号和分支名称的信息保存在同一工作区的文件中


    2.创建了Artifactory上载作业-->我使用mvn deploy:deploy file命令将工件部署到Artifactory中的特定远程存储库。这有一个版本参数,我在其中传递构建号,它有groupID&artifactID。因此,一旦maven deploy文件上传该文件,它将在artifactory中上传确定的路径。既然我已经掌握了所有的细节, 我构建了artifactoryurl的框架,它保存在我获取构建编号和分支名称的同一个文件中

    3.创建了到特定服务器的部署作业-->我创建了一个部署脚本,并将该脚本保存在服务器中,该服务器将URL作为参数。从工作区上的文件中,我能够检索URL,并对服务器进行了ssh。加载bash配置文件并将URL传递给部署脚本。之后,它下载工件并部署到服务器

    创建这些作业后,我将构建作业配置为获取构建后手动项目,并将Artifactory upload作为作业名称。对于Artifactory作业,我将部署作为构建后的手动项目作业


    通过这种方式,我创建了一个Build Pipeline视图,其中所有这些项目都是上游/下游项目。

    谢谢Rob。但我们需要这些作为单独的工作。我们当前的设置在单个作业中完成了所有步骤。想法是我们将经常运行构建作业,一旦测试步骤通过,就应该上传工件。有没有办法访问已部署的工件url存储区中的一些变量?若这是不可能的,那个么我需要使用复制工件插件n deploy作为单独的任务来测试服务器。我们正在使用build pipeline视图来可视化构建。我错过了你在文章中提到的最后一点,即你无法获取artifactory URL。因为如果你能得到它,那么用一个参数传递应该很容易。但是如果你不能得到它。。。有点难。我不知道如何从artifactory插件获取这些信息。如果你能找到buildInfo对象中的某个地方,那么它必须在buildInfo对象中的某个地方。你仍然可以将stages设置为有条件的。如果“构建”阶段没有执行您希望它执行的操作,则不要运行“发布”阶段。查看管道的“何时”条款。但我知道有时有其他原因需要单独的作业。看起来您可能可以使用buildInfo.getDeployableArtifacts()或buildInfo.deployableArtifacts,或者尝试使用getDeployedArtifacts(取决于插件的版本)。第一个将返回一个列表,第二个将返回一个映射。但是,我无法让它在沙盒脚本中运行,以查看它是否能满足您的需求。您可能必须从全局库或其他非沙盒脚本运行它。