groovy 在Jenkins slave上使用CURL下载zip文件时无法创建文件

vwkv1x7d  于 6个月前  发布在  Jenkins
关注(0)|答案(1)|浏览(85)

我正在使用Jenkins Pipline和Groovy脚本在Jenkins的从机上下载一个zip。
下面是我的代码:

pipeline {

    agent { label '<my slave label>' }
    stage('Download') {
            steps {
                script {                
                    def url = "<server url>"
                    def processDownload = ['bash', '-c', "curl -g -k --noproxy \"*\" -o <output-dir> \"${url}\""].execute()
                    processDownload.waitFor()
                    def processUnzip = ['bash', '-c', "7z e lwbs.zip"].execute()
                    processUnzip.waitFor()     
                }      
            }
    }
}

字符串

我得到以下错误:

警告:无法创建文件警告:
output-dir/newFile.zip:没有这样的文件或目录

我检查了以下内容:

1.当我在命令提示符下使用相同的curl命令时,它成功运行。
1.我还确保了适当的用户权限被授予允许jenkins写入这个目录。
1.目录存在且目录url中没有空格
1.从服务器上有足够的可用磁盘空间
1.服务器URL和证书正确
1.许多SO,但没有提到jenkins slave的问题
有什么我遗漏的吗?
任何帮助都很感激。谢谢。

zed5wv10

zed5wv101#

经过长时间的研究,我发现bash命令使用以下命令触发

def processDownload = ['bash', '-c', "curl -g -k --noproxy \"*\" -o <output-dir> \"${url}\""].execute()

字符串
Jenkins总是会在Master身上执行它。
当我将其更改为普通shell命令时,Jenkins在从机上正确执行它。此外,为了解压缩,我使用了Pipeline Utility Steps插件,它提供了在从机上执行的解压缩功能。以下是我的工作代码:

stage('Download') {
    steps {
        script {
            url = "<server url>"
            sh "curl -k --noproxy \"*\" -o \"<output-dir>\" \"${url}\""
            unzip(dir: '', glob: '', zipFile: 'fileName.zip')
        }
    }
}

相关问题