jpy*_*ams 9 jenkins jenkins-pipeline
是否有一个Jenkins管道步骤将在目录中创建并运行一系列步骤?
我知道dir该步骤在特定目录中运行块中的步骤:
// not in /tmp/jobDir
dir ('/tmp/jobDir') {
// these steps get run in /tmp/jobDir
}
// once again not in /tmp/jobDir
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果在Pipeline或插件中有一个步骤让我运行此代码块,但是/tmp/jobDir在块的开头创建,并在块结束时删除.
就像是:
// /tmp/jobDir does not exist
dir ('/tmp/jobDir') {
// /tmp/jobDir now exists
// these steps get run in /tmp/jobDir
}
// /tmp/jobDir has been removed
Run Code Online (Sandbox Code Playgroud)
这样的步骤或插件是否存在?
到目前为止我最喜欢的解决方案:
withTempDir {
// Do something in the dir,e.g. print the path
echo pwd()
}
void withTempDir(Closure body) {
// dir( pwd(tmp: true) ) { // Error: process apparently never started i
dir( "${System.currentTimeMillis()}" ) {
try {
body()
} finally {
deleteDir()
}
}
}
Run Code Online (Sandbox Code Playgroud)
不完全是。有deleteDir步骤,它会删除当前目录,因此您可以执行以下操作:
dir('/tmp/jobDir') {
// your steps here
deleteDir()
}
Run Code Online (Sandbox Code Playgroud)
如果经常出现这种情况,您也可以自己创建函数:
def tempDir(path, closure) {
dir(path) {
closure()
deleteDir()
}
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
tempDir('/tmp/jobDir') {
// your steps here
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果只想删除目录(如果它是新创建的),则可以使用fileExists:
def tempDir(path, closure) {
def dirExisted = fileExists(path)
dir(path) {
closure()
if(!dirExisted) {
deleteDir()
}
}
}
Run Code Online (Sandbox Code Playgroud)
创建一个临时路径然后通过 dir 子句使用它怎么样?这似乎对我有用。
dir (pwd(tmp: true)) {...}
Run Code Online (Sandbox Code Playgroud)
我不确定这是否会创建临时目录或使用工作区的唯一临时目录。文档说“a” ,但眼见为实。
| 归档时间: |
|
| 查看次数: |
5766 次 |
| 最近记录: |