有没有办法在声明性Jenkins管道中运行预签出步骤?

时间:2017-07-27 10:49:18

标签: jenkins build jenkins-pipeline

Jenkins declarative pipelines提供 post 指令,以便在阶段完成后执行代码。在阶段运行之前运行代码是否有类似的事情,最重要的是,在SCM结账之前?

例如:

pre {
    always {
        rm -rf ./*
    }
}

然后,在签出源代码之前,这将清理我的构建工作区。

2 个答案:

答案 0 :(得分:17)

pre是一个很酷的功能概念,但尚不存在。 skipDefaultCheckoutcheckout scm(与默认结帐相同)是关键:

pipeline {
  agent { label 'docker' }
  options {
    skipDefaultCheckout true
  }
  stages {
    stage('clean_workspace_and_checkout_source') {
      steps {
        deleteDir()
        checkout scm
      }
    }
    stage('build') {
      steps {
        echo 'i build therefore i am'
      }
    }
  }
}

答案 1 :(得分:0)

目前没有pre-build步骤,但出于您的目的,可以在管道作业配置以及多分支管道作业中完成此操作,当您定义jenkinsfile的位置时,请选择其他行为->清除存储库并强制克隆。

  

在构建之前删除工作区的内容,以确保完全新鲜的工作区。

Additional Behaviours: Wipe out repository & force clone

如果您真的不想删除所有内容并节省一些网络使用量,则可以使用以下其他选项:其他行为->结帐前清除。

  

通过删除所有未跟踪的文件和目录(包括.gitignore中指定的文件和目录),在每次签出之前清理工作区。它还会将所有跟踪的文件重置为其版本状态。这样可以确保工作区处于与您在全新的空目录中克隆并检出状态相同的状态,并确保您的构建不受先前构建生成的文件的影响。

这不会删除工作空间,而只是将存储库重置为原始状态,并在存在某些更改时提取新的更改。

Additional Behaviours: Clean before checkout