Jenkins管道创建目录

bla*_*ird 19 jenkins jenkins-pipeline

我想知道是否有一个函数或管道插件允许在工作区下创建目录而不是使用sh "mkdir directory"

我试图使用groovy指令,new File("directory").mkdirs()但它总是返回异常.

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:脚本不允许使用新的java.lang.RuntimeException java.lang.String

Jon*_*n S 56

您可以做的是使用该dir步骤,如果该目录不存在,则该dir步骤将在您编写文件或类似文件时创建所需的文件夹:

node {
    sh 'ls -l'
    dir ('foo') {
        writeFile file:'dummy', text:''
    }
    sh 'ls -l'
}
Run Code Online (Sandbox Code Playgroud)

sh步骤是只是为了表明该文件夹中创建.缺点是你将在文件夹中有一个虚拟文件(如果你要编写其他文件,则不需要虚拟写入).如果我运行这个,我得到以下输出:

Started by user jon
[Pipeline] node
Running on master in /var/lib/jenkins/workspace/pl
[Pipeline] {
[Pipeline] sh
[pl] Running shell script
+ ls -l
total 0
[Pipeline] dir
Running in /var/lib/jenkins/workspace/pl/foo
[Pipeline] {
[Pipeline] writeFile
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
[pl] Running shell script
+ ls -l
total 4
drwxr-xr-x 2 jenkins jenkins 4096 Mar  7 22:06 foo
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Run Code Online (Sandbox Code Playgroud)

  • 做了一些测试,不是没有.似乎在使用需要文件上下文的步骤时创建了目录,例如sh,writeFile等...因此,如果您只使用echo和其他非节点需要的步骤,那么将不会创建该目录. (7认同)
  • 另一个问题:“dir”块内的步骤将在当前目录设置为指定目录的情况下执行。因此,如果逻辑必须在当前目录设置为工作区的情况下运行,则不能只是将逻辑放入块内。 (3认同)

gek*_*gek 7

只需使用文件操作插件

fileOperations([folderCreateOperation('directoryname')])
Run Code Online (Sandbox Code Playgroud)