从jenkins管道执行脚本

时间:2016-08-14 18:42:14

标签: jenkins jenkins-pipeline

我有一个构建java工件的jenkins管道, 将其复制到目录,然后尝试执行外部脚本。

我在管道脚本中使用此语法来执行外部脚本

dir('/opt/script-directory') {
    sh './run.sh'
}

该脚本只是一个简单的docker构建脚本,但构建将失败 除了这个例外:

java.io.IOException: Failed to mkdirs: /opt/script-directory@tmp/durable-ae56483c

错误令人困惑,因为脚本不会创建任何目录。它只是构建一个docker镜像并将新构建的java工件放在该图像中。

如果我在jenkins中创建一个执行外部脚本的不同作业 它唯一的构建步骤,然后使用以下语法从我的管道脚本调用该作业:

build 'docker test build'

一切正常,脚本在其他作业和管道中执行 按预期继续。

这是执行工作区外部脚本的唯一方法吗?

我从内部执行脚本的尝试出了什么问题 管道脚本?

2 个答案:

答案 0 :(得分:9)

问题是jenkins用户(或运行Jenkins从属进程的用户)对/opt没有写权限,而sh步骤想要创建script-directory@tmp/durable-ae56483c那里的子目录。

删除dir块并使用脚本的绝对路径:

sh '/opt/script-directory/run.sh'

或授予jenkins用户对文件夹/opt的写入权限(出于安全原因不首选)

答案 1 :(得分:0)

看起来像Jenkins中的错误,durable目录用于存储恢复信息,例如在使用sh执行外部脚本之前。 目前,您所能做的就是确保/opt/script-directory为jenkins用户设置了+r +w+x

另一种解决方法是不要更改当前目录,只需用它执行sh

sh '/opt/script-directory/run.sh'