Function Jenkins后期构建步骤作为一个函数
在詹金斯,我知道我能做到Function Jenkins后期构建步骤作为一个函数,function,jenkins,jenkins-pipeline,jenkins-groovy,Function,Jenkins,Jenkins Pipeline,Jenkins Groovy,在詹金斯,我知道我能做到 pipeline { agent any stages { stage('Demo') { steps { MyFunction() } } } } void MyFunction() { sh 'ls /' } 在这种情况下,函数在管道中,但我可以始终将MyFunction提取到共享库中,以便跨管道重用 但有可能通过后期构
pipeline {
agent any
stages {
stage('Demo') {
steps {
MyFunction()
}
}
}
}
void MyFunction() {
sh 'ls /'
}
在这种情况下,函数在管道中,但我可以始终将MyFunction
提取到共享库中,以便跨管道重用
但有可能通过后期构建步骤来实现这一点吗
在本例中,我希望将其转换为函数并将其提取到库中
post {
always {
/* clean up our workspace */
deleteDir()
/* clean up tmp directory */
dir("${workspace}@tmp") {
deleteDir()
}
/* clean up script directory */
dir("${workspace}@script") {
deleteDir()
}
dir("${workspace}@2") {
deleteDir()
}
dir("${workspace}@2@tmp") {
deleteDir()
}
}
}
我试过这个
post {
always{
test()
}
}
}
有功能
void test() {
{
/* clean up our workspace */
deleteDir()
/* clean up tmp directory */
dir("${workspace}@tmp") {
deleteDir()
}
/* clean up script directory */
dir("${workspace}@script") {
deleteDir()
}
dir("${workspace}@2") {
deleteDir()
}
dir("${workspace}@2@tmp") {
deleteDir()
}
}
}
但它似乎不起作用
这到底是可能的还是我遗漏了一些非常明显的东西?在函数中传递工作区的名称作为参数将解决您的问题。下面的脚本有效
pipeline {
agent any
stages {
stage('Hello') {
steps {
echo 'Hello World'
}
}
}
post{
always{
echo "In : ${env.WORKSPACE}"
test(env.WORKSPACE)
}
}
}
void test(workspace){
echo "In test : " + workspace
deleteDir()
dir("${workspace}@tmp") {
deleteDir()
}
}
另外,如果只调用一次
deleteDir()
,而不是为多个tmp目录调用deleteDir()
,然后,它将删除工作区以及tmp目录,我们在特定阶段后清理工作区的工作方式是,在不尝试猜测文件夹名称的情况下,让您的帖子在阶段中发挥作用:
pipeline {
agent any
stages {
stage('1') {
steps {
echo 'Hello World'
}
post {
cleanup {
script {
// Workspace Cleanup plugin
cleanWs deleteDirs: true,
notFailBuild: true,
cleanWhenAborted: true,
cleanWhenFailure: true,
cleanWhenSuccess: true
}
}
}
}
}
}
我们使用。将${workspace}@tmp等变量作为参数传递给函数。这样的VAR是由Jenkins填充的,不在您上面所写的范围内。您完全正确。我必须多次调用
deleteDir()
的唯一原因是因为正在创建许多其他目录<代码>demo@tmp,demo@2
,demo@script
同意。尝试将工作区名称作为参数传递给函数,如解决方案中所示。这是否有效?我可能做了错误的事情,也许这不起作用。你能更新答案吗?嘿@Hammed,更新答案是什么意思?你能试试上面的答案吗?这对我有用。这也会清理tmp目录吗?出于某种原因,它不适合我,我总是留下demo@tmp, demo@2, demo@script及demo@2@tmp
目录未清除。@script
文件夹通常在主节点上创建。我们有一个定期的工作,如果这些文件夹在过去的几个小时内没有被修改,就会清除它们。