小编典典

从詹金斯管道执行脚本

jenkins

我有一个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'

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

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

从管道脚本中执行脚本的尝试有什么错?


阅读 208

收藏
2020-07-25

共1个答案

小编典典

问题是jenkins用户(或运行Jenkins从属进程的任何用户)都没有写权限,/opt并且该sh步骤要在此创建script- directory@tmp/durable-ae56483c子目录。

要么删除该dir块,然后使用脚本的绝对路径:

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

或向jenkins用户授予对文件夹的写许可权/opt(出于安全考虑,不建议使用)

2020-07-25