windows - Jenkinsfile windows cmd 输出变量引用

标签 windows cmd jenkins-pipeline jenkins-groovy

我是 groovy 的新手。在我的 Jenkinsfile 中,我试图将 windows cmd 输出存储在一个变量中,在下一个命令中使用它,但似乎没有任何效果。这是我得到的最接近的:

    pipeline {
    agent any    
    stages {        
        stage('package-windows') {
            when {
                expression { isUnix() == false}
            }
            steps {             
                script {
                FILENAME = bat(label: 'Get file name', returnStdout: true, script:"dir \".\\archive\\%MY_FOLDER%\\www\\main.*.js\" /s /b")              
                }
                bat label: 'replace content', script: "powershell -Command \"(gc \"$FILENAME\") -replace \"https://my-qa.domain.com/api/\", \"https://my-prod.domain.com/api/\" | Out-File \"$FILENAME\"\""
            }
        }
    }
}

当我执行 ECHO "$FILENAME" 时,这是我得到的输出:

C:\Program Files (x86)\Jenkins\workspace\my-ui>dir ".\archive\55131c0d3c28dc69ce39572eaf2f8585996d9108\main.*.js" /s /b 
C:\Program Files (x86)\Jenkins\workspace\my-ui\archive\55131c0d3c28dc69ce39572eaf2f8585996d9108\www\main.16aedaf4c6be4e47266d.js

我只需要文件名 main.16aedaf4c6be4e47266d.js 将在下一个命令中使用以修改内容。但是在下一个命令中 "$FILENAME" 是空的。如何将命令输出正确存储在变量中并在下一个命令中访问?

最佳答案

问题是您捕获了命令的完整输出,其中包括 2 行。第一行是 dir 命令的当前路径,第二行是所需的输出。 第一次回显命令时,您会看到命令 + 输出。随后的使用将导致结果看起来是空的,但实际上是一个困惑的行,因为 FILENAME 变量包含 2 行,每行末尾都有一个新行。

在批处理命令前添加 @ 将防止它被回显,这就是您想要的。现在 FILENAME 变量将只有一行包含您的文件名。 不过,您仍需要从结果中删除 CRLF,否则它会弄乱您的下一个 powershell 命令。

我认为下面的脚本应该工作得更好。

pipeline {
    agent any
    stages {        
        stage('package-windows') {
            when {
                expression { isUnix() == false}
            }
            steps {             
                script {
                  FILENAME = bat(label: 'Get file name', returnStdout: true, script:"@dir \".\\archive\\%MY_FOLDER%\\www\\main.*.js\" /s /b").trim()
                }
                echo FILENAME
                bat label: 'replace content', script: "powershell -Command (gc \"$FILENAME\") -replace \"https://my-qa.domain.com/api/\", \"https://my-prod.domain.com/api/\""
            }
        }
    }
}

关于windows - Jenkinsfile windows cmd 输出变量引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55329493/

相关文章:

batch-file - `for`或 `for/R`在什么时候枚举目录(树)?

通过 cmd 打开时 python.exe 已停止工作

jenkins-pipeline - 如何使用 jenkins 管道共享库定义全局变量或常量?

jenkins - 将数组和 ArrayList 追加到 ArrayList

java - 更改 MySQL 时区 Windows

windows - 在 Dev-C++ 中编译 Windows 程序会出错

python - 我正在使用 PyInstaller 将 .py 文件转换为 .exe 文件,但我遇到了困难?

windows - 如何在cmd for循环中迭代字符串?

windows - 即使我更改文档根目录的路径,Apache也会显示它的工作页面

jenkins - 如何从jenkins "username with password"参数中提取用户名和密码?