【问题标题】:Is there a way to run a pre-checkout step in declarative Jenkins pipelines?有没有办法在声明性 Jenkins 管道中运行预结帐步骤?
【发布时间】:2018-01-03 01:20:16
【问题描述】:

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

例如:

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

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

【问题讨论】:

  • 我一直在寻找相同的功能,因为我们利用一个松弛频道来发布我们的构建。这是“开始构建 X”的好方法

标签: jenkins build jenkins-pipeline


【解决方案1】:

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'
      }
    }
  }
}

【讨论】:

  • 搜索我的自定义 Dockerfile 时出现错误。
【解决方案2】:

目前没有pre-build 步骤,但为了您正在寻找的目的,它可以在管道作业配置和多分支管道作业中完成,当您定义 jenkinsfile 的位置时,选择 Additional行为 -> 清除存储库并强制克隆。

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

如果您真的不想删除所有内容并节省一些网络使用量,则可以使用其他选项:Additional Behaviors -> Clean before checkout。

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

这个不会删除工作区,只是将存储库重置为原始状态,如果有一些更改,则拉取新的更改。

【讨论】:

  • 谢谢,Clean before checkout 正是我的多分支管道配置所需要的!
  • 还有一个名为 cleanWs() 的内置方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
相关资源
最近更新 更多