如何禁用“立即构建”选项?

时间:2019-03-07 22:22:28

标签: jenkins groovy jenkins-pipeline jenkins-groovy

对于给定的脚本化管道(詹金斯),该管道应仅通过来自GitLab的Webhook触发

应该为该管道禁用

Build Now选项。


我们可以配置Jenkins,以禁用jenkins中特定管道脚本作业的Build Now选项吗?

4 个答案:

答案 0 :(得分:2)

编辑:这是带有脚本化管道的解决方案:

node {
   def userIdCause = currentBuild.getBuildCauses('hudson.model.Cause$UserIdCause')
   stage("Authorize Usage") {
      if (userIdCause.size()) {
          error('Aborting Build due to manual start - thats not permitted!')
     }
    }
}

声明性管道上没有任何额外插件的以下解决方案如何:

pipeline {
...
stages {

  stage ("Authorize Usage") {
      when { expression { getCause() == "USER" } }
      steps {
            currentBuild.description = 'Aborting Build due to manual start - thats not permitted!'
            error('Aborting Build due to manual start - thats not permitted!')
      }
  }
...
}

答案 1 :(得分:1)

是否看过Jenkin网站上提供的此插件?矩阵授权策略插件:

Matrix Strategy

本节特别是L允许配置每个代理权限。这允许例如使用Authorize Project插件(JENKINS-46654)时限制每个代理的构建权限

答案 2 :(得分:0)

The currentBuild variable, which is of type RunWrapper, may be used to refer to the currently running build...

来源:https://opensource.triology.de/jenkins/pipeline-syntax/globals

hudson.model是大多数对应的核心jenkins类的软件包名称。之所以称其为“哈德森”,是因为詹金斯曾经从其祖先的代码库中克隆出来,名为“哈德森”。

您可以在这里查询它们:https://javadoc.jenkins.io/hudson/model/package-summary.html

您还将在其中找到https://javadoc.jenkins.io/hudson/model/Cause.UserIdCause.html。在诸如getbuildcauses之类的某些方法中直接指定package $ classname是jenkins开发团队的直接想法。这样可以减少潜在的故障,并使代码更易于阅读和理解。

答案 3 :(得分:0)

不理想,但是如果这是“自由式管道作业” 一种快速的解决方法是将构建步骤“ Execute shell”添加为第一步。注意更改后,您可以使用它来防止构建。

每次您的资源更改并推送到您的仓库时,都会触发构建,并且由于存在更改,此脚本不会退出。

当您单击“立即构建”时,您的存储库中应该没有任何更改(唯一的办法就是通过推送然后触发构建),它将导致退出并导致构建失败。

if [[ $GIT_COMMIT -eq $GIT_PREVIOUS_COMMIT ]]
then
  echo "Exiting build - Nothing has changed"
  echo "This is to prevent the usage of Jenkins 'build now'"
  exit 1
fi