从詹金斯管道执行脚本
Execute a script from 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'
一切正常,脚本在其他作业和管道中执行
按预期继续。
这是执行工作区外部脚本的唯一方法吗?
我尝试从内部执行脚本时做错了什么
管道脚本?
问题是 jenkins 用户(或任何运行 Jenkins 从属进程的用户)对 /opt
没有写权限,sh
步骤想要创建 script-directory@tmp/durable-ae56483c
子目录在那里。
要么删除 dir
块并使用脚本的绝对路径:
sh '/opt/script-directory/run.sh'
或授予 jenkins 用户对文件夹 /opt
的写入权限(出于安全原因不推荐)
看起来像是 Jenkins 中的错误,durable
目录用于存储恢复信息,例如在使用 sh
执行外部脚本之前。
现在你所能做的就是确保 /opt/script-directory
为 jenkins 用户设置了 +r
+w
和 +x
。
另一种解决方法是不更改当前目录,只需执行 sh
即可:
sh '/opt/script-directory/run.sh'
尝试使用 Jenkinsfile
.
在 Jenkins 管道中执行脚本时,我也有类似的担忧
我正在尝试 运行 脚本 restart_rb.sh
与 sudo
为了运行它我指定了当前工作目录($PWD
):
sh 'sudo sh $PWD/restart_rb.sh'
就这些了
我有一个构建 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'
一切正常,脚本在其他作业和管道中执行 按预期继续。
这是执行工作区外部脚本的唯一方法吗?
我尝试从内部执行脚本时做错了什么 管道脚本?
问题是 jenkins 用户(或任何运行 Jenkins 从属进程的用户)对 /opt
没有写权限,sh
步骤想要创建 script-directory@tmp/durable-ae56483c
子目录在那里。
要么删除 dir
块并使用脚本的绝对路径:
sh '/opt/script-directory/run.sh'
或授予 jenkins 用户对文件夹 /opt
的写入权限(出于安全原因不推荐)
看起来像是 Jenkins 中的错误,durable
目录用于存储恢复信息,例如在使用 sh
执行外部脚本之前。
现在你所能做的就是确保 /opt/script-directory
为 jenkins 用户设置了 +r
+w
和 +x
。
另一种解决方法是不更改当前目录,只需执行 sh
即可:
sh '/opt/script-directory/run.sh'
尝试使用 Jenkinsfile
.
我正在尝试 运行 脚本 restart_rb.sh
与 sudo
为了运行它我指定了当前工作目录($PWD
):
sh 'sudo sh $PWD/restart_rb.sh'
就这些了