当前位置: 首页 > 面试题库 >

Jenkins Pipeline-在阶段之间传递工件URL

秦光启
2023-03-14
问题内容

我的用例是构建一个Java作业,将tar.gz.zip部署到nexus,并将该工件URL传递到进一步的阶段。

我在执行其他验证的脚本中使用以下命令:

mvn -B clean deploy -U package deploy:deploy -DskipNexusStagingDeployMojo=true -DaltDeploymentRepository=dev-snapshots::default::https://<myrepo.com>

以下是我的阶段:

stage('publish'){    
  //push to Nexus  
 }
stage('processing'){    
 // get the artifact url from above step
}

我不想使用“ archiveartifacts”,因为我已经存储了工件,所以我不想对其进行存档。我只需要URL。

到目前为止,我所能做的就是将部署的全部输出输出到一个文本文件中。

sh "deploy.sh > deploy.txt"

但是,新文件(deploy.txt)不适用于管道,因为在主服务器上执行了Groovy,在从属服务器上创建了文件。而且readfile(’deploy.txt’)不需要任何正则表达式。因此,我无法解析文件以获取工件URL。

有什么更好的方法来使工件URL从发布进入管道的处理阶段?


问题答案:

publish阶段将值存储在变量中并在阶段读取该变量processing呢?考虑下面的詹金斯管道示例:

def artifactUrl = ''

pipeline {
    agent any

    stages {
        stage('Build') { 
            steps {
                script {
                   artifactUrl = 'test'
                }
            }
        }

        stage('Publish') {
            steps {
                echo "Current artifactUrl is '${artifactUrl}'"
            }
        }
    }
}

当我运行它时,我得到以下输出:

[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/test-pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] script
[Pipeline] {
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Publish)
[Pipeline] echo
Current artifactUrl is 'test'
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

当然,如何获得工件URL还有一个悬而未决的问题,但是如果您只能从publish命令中获取工件URL,那么在阶段之间传递它就不成问题。



 类似资料:
  • 问题内容: 我想以某种方式将在阶段A中读取的变量传递给阶段B。在某些示例中,我看到人们将其写入文件中,但是我认为这并不是一个很好的解决方案。我尝试将其写入环境变量,但是在此方面我并没有真正成功。如何正确设置? 为了使它正常工作,我尝试了很多事情,并读到我应该使用“””而不是“’‘来启动外壳程序并将这些变量转义为例如。 以下是我拥有的管道: 如您所见,我从阶段 Package中 读取的内容也需要在阶

  • 我想将GitLab CI与.gitlab-ci.yml文件一起使用以使用单独的脚本运行不同的阶段。第一阶段生成一个工具,该工具必须在稍后阶段用于执行测试。我已将生成的工具声明为工件。 现在我如何在后期工作中执行该工具?正确的路径是什么,它周围会有哪些文件? 例如,第一阶段构建工件/bin/TestTool/TestTool。exe,该目录包含其他必需的文件(DLL和其他文件)。我的gitlab c

  • 问题内容: 我有一个调用会弹出一个的,以便用户可以选择目录。这些都是单独的类。从中传递值的正确方法是什么,以便我可以在中显示目录的路径? 编辑:更新了问题。 问题答案: 这是一个不完整的示例,但我想可以使您了解如何实现所需的目标。重要的一点是引用要在其中进行选择的属性,例如 参见下面如何将其放置在代码中: 希望对您有所帮助,对不起您没有提供完整的示例。 编辑 本质上,我们没有将任何参数传递给Abs

  • 问题内容: 以及Android文档: http://developer.android.com/training/basics/fragments/communicating.html 以及本文: http://manishkpr.webheavens.com/android-passing-data-between- fragments/ 尽管上述所有情况都与我的情况相似,但并不完全相同。我在这

  • 如何从secondactivity.java中的包到fragment_2.java文件中获取值?

  • 问题内容: 我在jenkins有两个工作,这两个工作都需要相同的参数。 如何使用参数运行第一个作业,以便在触发第二个作业时使用相同的参数? 问题答案: 您可以使用参数化触发器插件,该插件可让您将参数从一个任务传递到另一任务。 您还需要在上游添加从上游传递的此参数。