我有一个jenkins管道,该管道可以构建Java工件,将其复制到目录中,然后尝试执行外部脚本。
我在管道脚本中使用此语法来执行外部脚本
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'
一切正常,脚本在其他作业中执行,并且管道按预期继续。
这是执行工作空间外部脚本的唯一方法吗?
从管道脚本中执行脚本的尝试有什么错?
问题是jenkins用户(或运行Jenkins从属进程的任何用户)都没有写权限,/opt并且该sh步骤要在此创建script- directory@tmp/durable-ae56483c子目录。
/opt
sh
script- directory@tmp/durable-ae56483c
要么删除该dir块,然后使用脚本的绝对路径:
dir
sh '/opt/script-directory/run.sh'
或向jenkins用户授予对文件夹的写许可权/opt(出于安全考虑,不建议使用)