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

Jenkins管道-在阶段之间传递工件URL,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,我的用例是构建一个Java作业,将tar.gz.zip部署到nexus,并将这个工件URL传递到下一个阶段 我正在执行其他验证的脚本中使用以下命令: mvn -B clean deploy -U package deploy:deploy -DskipNexusStagingDeployMojo=true -DaltDeploymentRepository=dev-snapshots::default::https://<myrepo.com> 我不想使用“archiveartif

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

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

mvn -B clean deploy -U package deploy:deploy -DskipNexusStagingDeployMojo=true -DaltDeploymentRepository=dev-snapshots::default::https://<myrepo.com>
我不想使用“archiveartifacts”,因为我已经在存储工件了,我不想将其归档。我只需要网址

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

sh "deploy.sh > deploy.txt"
然而,新文件(deploy.txt)不适用于管道,因为groovy在主设备上执行,而文件是在从设备上创建的。readfile('deploy.txt')不接受任何正则表达式。因此,我无法解析文件以获取工件url


有没有更好的方法在管道中从发布到处理阶段获取工件url?

发布
阶段将值存储在变量中,并在
处理
阶段读取此变量如何?考虑以下詹金斯管道实例:

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还有一个悬而未决的问题,但如果您只能从发布命令获取,那么在各个阶段之间传递它应该不会有问题。

基于@Szymon Stepniak comment,它以以下方式实现:

 def out = sh(script: "/myscript.sh" , returnStdout: true )
 Pattern p = Pattern.compile("INFO] Uploaded: .*bin.tar.gz")
 Matcher m = p.matcher(out);

挑战是我从控制台中的mvn部署获取工件url。您是否建议访问正在进行的作业的控制台以获取url?@user5290853我不知道获取工件url的最佳方式是什么。如果在文本文件中解析输出对您有用,那么您可以尝试在脚本中解析输出。如果运行
sh(脚本:“mvn…”,returnStdout:true)
您将获得sh命令返回的输出。如果您很容易解析它,那么它应该可以工作。
 def out = sh(script: "/myscript.sh" , returnStdout: true )
 Pattern p = Pattern.compile("INFO] Uploaded: .*bin.tar.gz")
 Matcher m = p.matcher(out);