当前位置: 首页 > 知识库问答 >
问题:

Jenkins管道-从bat命令到标签的变量,输出显示完整的命令提示符

马清野
2023-03-14

詹金斯·弗。2.176.1声明式管道,试图从一个阶段获得蝙蝠命令输出,以设置另一个阶段的代理标签

当通过bat命令(“echo%computername%”设置变量时,我可以很好地从步骤中读取变量(我得到:V-COMP-S6-CI3,这正是我所需要的。)

我不能设法把它设置在代理标签中。当我尝试在另一个阶段设置代理{标签${winCompName}}时,我得到:没有标签为c:\jenkins\build\workspace\nashpaz@2的节点

我似乎得到了一个完整的命令提示符输出,而不仅仅是标准输出,("c:\jenkins\build\workspace\nashpaz@2

我如何才能得到只是输出到代理标签?

我的管道和输出:

    #!/usr/bin/env groovy


import org.apache.commons.lang.StringUtils
currentBuild.description = "${params.EMAIL}"
currentBuild.displayName = "${params.BRANCH_NAME}"

def call(String filter_string, int occurrence) {
    def logs = currentBuild.rawBuild.getLog(10000).join('\n')
    int count = StringUtils.countMatches(logs, filter_string);
    if (count > occurrence -1) {
        currentBuild.result='UNSTABLE'
    }
}


pipeline {
    agent {
        label "winServerGroup"
    }
    options { 
       timestamps()
       timeout(time: 2, unit: 'HOURS')   // timeout on whole pipeline job
  
    }

    stages {
        stage ('Print Environment') {            
            steps {
                echo "Print Environment" 
                bat '''
                echo userprofile=%USERPROFILE%
                SET
                '''
            }
        }   
        stage ('1. set comutername to var') {
            agent { label 'winServerGroup' }
            steps {
                script {
                    winCompName = bat(script: "echo %COMPUTERNAME%", returnStdout: true).trim()
                }
                echo "${winCompName}"
            }       
        }
        stage ('1.5.print var') {
            agent { label 'winServerGroup' }
            steps {
                echo "${winCompName}"
            }
        }
        stage ('2. run on comutername') {
            agent { label "${winCompName}" }
            steps {
                bat """echo %COMPUTERNAME%"""
                echo "${winCompName}"
            }
        }

    } // end of stages
} // end of pipeline

输出(耳轴):

    [Pipeline] { (1. set comutername to var)
[Pipeline] node (hide)
...
[Pipeline] echo
12:34:12  c:\jenkins\build\workspace\nashpaz@2>echo V-COMP-S6-CI3 
12:34:12  V-COMP-S6-CI3
[Pipeline] }
...
[Pipeline] stage
[Pipeline] { (1.5.print var)
[Pipeline] node
12:34:12  Running on v-comp-s6-ci3 in c:\jenkins\build\workspace\nashpaz@2
[Pipeline] {
...
[Pipeline] withEnv
[Pipeline] {
[Pipeline] echo
12:34:13  c:\jenkins\build\workspace\nashpaz@2>echo V-COMP-S6-CI3 
12:34:13  V-COMP-S6-CI3
[Pipeline] }
....
[Pipeline] stage
[Pipeline] { (2. run on comutername)
[Pipeline] node
12:34:29  Still waiting to schedule task
12:34:29  There are no nodes with the label ‘c:\jenkins\build\workspace\nashpaz@2>echo V-COMP-S6-CI3 
12:34:29  V-COMP-S6-CI3’

共有1个答案

邵浩大
2023-03-14

添加。readLines()。下降(1)。连接(“”)(从https://issues.jenkins-ci.org/browse/JENKINS-44569)有效,但我仍然想知道是否有更简单的方法:

stage ('1. set comutername to var') {
        agent { label 'winServerGroup' }
        steps {
            script {
                winCompName = bat(script: "echo %COMPUTERNAME%", returnStdout: true).trim().readLines().drop(1).join(" ")
            }
            echo "${winCompName}"
        }       
    }

    stage ('2. run on comutername') {
        agent { label "${winCompName}" }
        steps {
            bat """echo %COMPUTERNAME%"""
            echo "${winCompName}"
        }
    }
 类似资料:
  • Computer says no. — Little Britain 一个问题的详细反馈会对解决问题有帮助。当你使用 exec 资源在节点上执行命令时, 并不总能轻易地找出其为何没有正确执行。如果命令返回一个非零的退出状态,Puppet 就会返回类似如下的错误消息: err: /Stage[main]//Node[cookbook]/Exec[this-will-fail]/returns: ch

  • 问题内容: 我的jenkinsfile中有一个执行bat命令的阶段: 我的批处理命令需要一个参数,该参数是svn中的当前分支。 当我使用这个: 回声“ SVN_BRANCH_NAME是$ {env.BRANCH_NAME}” 它会给出BRANCH_NAME的值,但是如果我将其作为参数传递给我的批处理文件,它将按字面意义传递$ {env.BRANCH_NAME}而不是该值。 他们有办法吗? 问题答案

  • 我们如何在docker history命令输出的第三列(由创建)中看到完整命令? 第三列(CREATED BY)是命令的缩写,这使得重建原始Dockerfile变得困难。是否可以在第三列中获得完整的命令? 感谢阅读。

  • 我试图用命令提示符用java编译一个程序。我的程序在eclipse中运行良好,但是,当我试图在命令提示符中编译它时,我收到了一条错误消息。任何帮助和指导都将不胜感激。 triton.java:20:错误:不能dind符号循环Loop=new Loop(); 符号:类循环位置:类Triton trion.java:20:错误:找不到符号循环循环=新循环();sybmol:类循环位置:类Triton

  • 使用Jenkins 2管道插件,有一个有用的功能,允许快速概述管道阶段和步骤状态,包括日志输出。 但是,如果您使用“Shell脚本”(sh)步骤,似乎没有办法用有用的名称来标记该脚本,因此显示屏仅显示一长串“Shell脚本”(如下图所示)。 如何指定一个有用的名称,或者如何使用其他步骤来实现相同的效果?

  • 问题内容: 我必须找到具有选定权限的文件,并列出它们及其编号。因此,我想将命令的结果传递给shell和下一个命令,该输出我想存储在变量中,以便以后可以很好地显示。我想吃点东西 但部分无效。请帮忙。 编辑 我知道我可以将命令的整个输出放到像这样的变量中 但是然后我只需要的结果。我如何从该变量中获得该数字?是否可以按相反的顺序显示它,先显示编号,然后显示列表? 问题答案: 复制到TTY(不是标准输出!