我有一个构建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'
一切正常,脚本在其他作业和管道中执行 按预期继续。
这是执行工作区外部脚本的唯一方法吗?
我从内部执行脚本的尝试出了什么问题 管道脚本?
答案 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'