对于给定的脚本化管道(詹金斯),该管道应仅通过来自GitLab的Webhook触发
应该为该管道禁用 Build Now
选项。
我们可以配置Jenkins,以禁用jenkins中特定管道脚本作业的Build Now
选项吗?
答案 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网站上提供的此插件?矩阵授权策略插件:
本节特别是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