Jenkins Pipeline的hasProperty函数

函数的作用

用于判断某个参数或者字段是否存在。

用法

例子一

def projectStr = "P1,P2,P3"
pipeline {agent anyparameters {extendedChoice(defaultValue: "${projectStr}",description: '选择要发布的项目',multiSelectDelimiter: ',',name: 'SELECT_PROJECTS',quoteValue: false,saveJSONParameterToFile: false,type: 'PT_CHECKBOX',value: "${projectStr}",visibleItemCount: 1000)}stages {stage('Git Pull') {steps {script {// 判断参数字段是否存在if (this.hasProperty("SELECT_PROJECTS")) {echo "${SELECT_PROJECTS}"} else {echo "SELECT_PROJECTS is null"}}}}}
}

出现的场景: 我想通过参数配置进来一个选择框列表,根据选择的情况做不同的处理;在过程中,我发首次构建Job的时候会报错误。错误如下:

groovy.lang.MissingPropertyException: No such property: SELECT_PROJECTS for class: groovy.lang.Bindingat groovy.lang.Binding.getVariable(Binding.java:63)at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:285)at org.kohsuke.groovy.sandbox.impl.Checker$7.call(Checker.java:375)at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:379)at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:355)at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:355)at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:355)at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:29)at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)at WorkflowScript.run(WorkflowScript:78)at ___cps.transform___(Native Method)at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.get(PropertyishBlock.java:74)at com.cloudbees.groovy.cps.LValueBlock$GetAdapter.receive(LValueBlock.java:30)at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.fixName(PropertyishBlock.java:66)at sun.reflect.GeneratedMethodAccessor323.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)at com.cloudbees.groovy.cps.Next.step(Next.java:83)at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:177)at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:166)at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:136)at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:275)at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:166)at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18)at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:51)at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:187)at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:420)at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$400(CpsThreadGroup.java:95)at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:330)at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:294)at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:67)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:139)at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:750)

原因是:可能是因为首次构建,parameters 中的extendedChoice还没有初始化好导致本次构建上线文没有SELECT_PROJECTS变量 。我又没有做提前判断,直接取值去判断的。 代码如下:

def projectStr = "P1,P2,P3"
pipeline {agent anyparameters {extendedChoice(defaultValue: "${projectStr}",description: '选择要发布的项目',multiSelectDelimiter: ',',name: 'SELECT_PROJECTS',quoteValue: false,saveJSONParameterToFile: false,type: 'PT_CHECKBOX',value: "${projectStr}",visibleItemCount: 1000)}stages {stage('Git Pull') {steps {script {// 不是使用hasProperty函数判断的,而是直接用变量判断的,所以会报错if (null == SELECT_PROJECTS) {echo "${SELECT_PROJECTS}"} else {echo "SELECT_PROJECTS is null"}}}}}
}

遇到的问题

问题一

没有执行的权限,解决方法授权执行即可,具体怎么授权自行百度。
错误如下:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods hasProperty java.lang.Object java.lang.Stringat org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectStaticMethod(StaticWhitelist.java:243)at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:123)at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:178)at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:182)at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)at WorkflowScript.run(WorkflowScript:78)at ___cps.transform___(Native Method)at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:90)at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:113)at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:83)at sun.reflect.GeneratedMethodAccessor301.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)at com.cloudbees.groovy.cps.Next.step(Next.java:83)at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:177)at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:166)at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:136)at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:275)at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:166)at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18)at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:51)at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:187)at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:420)at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$400(CpsThreadGroup.java:95)at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:330)at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:294)at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:67)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:139)at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:750)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/10509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习Java,需要知道的网站30+网站,你知道哪些?

以下是 30 个 Java 学习网站,并详细介绍: Java 官方文档:https://docs.oracle.com/javase/8/docs/api/ Java 官方文档是 Java 学习者必备的参考资料,提供了 Java 核心库的详细说明和示例代码,包括类、接口、方法和属性…

分布式锁:Redis、Zookeeper

1.基于Redis实现分布式锁 Redis分布式锁原理如上图所示,当有多个Set命令发送到Redis时,Redis会串行处理,最终只有一个Set命令执行成功,从而只有一个线程加锁成功 2.SetNx命令加锁 利用Redis的setNx命令在Redis数据库…

TensorFlow 进阶:定制模型和训练算法

本文将为你提供关于 TensorFlow 的中级知识,你将学习如何通过子类化构建自定义的神经网络层,以及如何自定义训练算法。 一、创建自定义层 在 TensorFlow 中,神经网络的每一层都是一个类,我们可以通过创建一个新的类并继承 tf.ke…

Vision Transformer (ViT)

生成式模型与判别式模型 生成式模型,又称概率模型,是指通过学习数据的分布来建立模型P(y|x),然后利用该模型来生成新的数据。生成式模型的典型代表是朴素贝叶斯模型,该模型通过学习数据的分布来建立概率模型,然后利用…

【个人笔记】Linux命令之查看使用过的命令

1.使用 history 显示出所有使用过的命令 history2.使用 history 和 grep 命令进行过滤 history | grep docker3.查看 ~/.bash_history 文件,Bash的命令历史默认保存在~/.bash_history中 vim ~/.bash_history #或 cat -n ~/.bash_history4.使用 ctrlr …

【人工智能】深度神经网络、卷积神经网络(CNN)、多卷积核、全连接、池化

深度神经网络、卷积神经网络(CNN)、多卷积核、全连接、池化) 文章目录 深度神经网络、卷积神经网络(CNN)、多卷积核、全连接、池化)深度神经网络训练训练深度神经网络参数共享卷积神经网络(CNN)卷积多卷积核卷积全连接最大池化卷积+池化拉平向量激活函数优化小结深度神经…

如何在Debian中配置代理服务器?

开始搭建代理服务器 首先我参考如下文章进行搭建代理服务器,步骤每一个命令都执行过报了各种错,找了博客 目前尚未开始,我已经知道我的路很长,很难走呀,加油,go!go!go! …

MySQL数据库关于表的一系列操作

MySQL中的数据类型 varchar 动态字符串类型(最长255位),可以根据实际长度来动态分配空间,例如:varchar(100) char 定长字符串(最长255位),存储空间是固定的,例如&#…

Nginx | Nginx返回的状态码详情

200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 201 (已创建) 请求成功并且服务器创建了新的资源。 202 (已接受) 服务器已接受请求,但尚未处理。 203 &…

博客更新notion版本01

官网视频娇嗔 Your connected workspace for wiki, docs & projects | Notion 【Notion教程】:https://www.bilibili.com/video/[BV1so4y1V7nX](https://www.bilibili.com/video/BV1so4y1V7nX/?spm_id_from333.788.video.desc.click) 【Notion汉化】&#x…

系统架构设计师-软件架构设计(4)

目录 一、软件架构评估 1、敏感点 2、权衡点 3、风险点 4、非风险点 5、架构评估方法 5.1 基于调查问卷或检查表的方式 5.2 基于度量的方式 5.3 基于场景的方式 6、基于场景的评估方法 6.1 软件架构分析法(SAAM) 6.2 架构权衡分析法(ATAM&am…

J2EE通用分页02

目录 一.重构-提取公用方法 1.为了进行公共方法的抽取,需要找出上面实习中的可通用部分,和差异化部分 2.公用方法封装思路 3. 具体实现 二.分页标签 2.1 准备一个Servlet 3.2 结果展示页面 三. 过滤器解决中文乱码问题 四.加入分页功能 四…

Visio制作特征矩阵

Visio制作特征矩阵 https://blog.csdn.net/sinat_39620217/article/details/115577962?ops_request_misc&request_id&biz_id102&utm_termvisio%E6%9C%89%E7%BD%91%E6%A0%BC%E5%90%97&utm_mediumdistribute.pc_search_result.none-task-blog-2allsobaiduweb~de…

Yolov8引入 清华 ICCV 2023 最新开源移动端网络架构 RepViT | RepViTBlock即插即用,助力检测

💡💡💡本文独家原创改进:轻量级 ViT 的高效架构选择,逐步增强标准轻量级 CNN(特别是 MobileNetV3)的移动友好性。 最终产生了一个新的纯轻量级 CNN 系列,即 RepViT RepViTBlock即插即用,助力检测 | 亲测在多个数据集能够实现涨点,并实现轻量化 💡💡💡Yo…

Unity UGUI的StandaloneInputModule (标准输入模块)组件的介绍及使用

Unity UGUI的StandaloneInputModule (标准输入模块)组件的介绍及使用 1. 什么是StandaloneInputModule组件? StandaloneInputModule是Unity UGUI系统中的一个标准输入模块组件,用于处理鼠标和键盘的输入事件。它可以将鼠标和键盘的输入转化为UGUI系统中…

Clion开发STM32之W5500系列(NTP服务封装)

概述 在w5500基础库中进行封装,获取服务端的时间,来校准本地时间。本次使用的方案是通过ntp获取时间定时器更新保证时间准确。 NTP封装 头文件 /*******************************************************************************Copyright (c) [sc…

2:SpringIOC

文章目录 一:Spring_IOC概念引入_重要1:Spring解耦合的原理2:创建一个spring项目并实现IOC基本功能 二:Spring_IOC原理分析 ***1:XML解析技术读取配置文件**2**:反射技术实例化对象,放到容器中3&#xff1a…

uniapp的传参encodeURIComponent和解码decodeURIComponent

跳转页面时传参数&#xff1a; encodeURIComponent 编码 decodeURIComponent 解码 如果是对象则先转json字符串 <view class"goodedList"><view class"list-items" v-for"(v,i) in dataList" :key"i" click"ha…

【算法训练营】字符串转成整数

字符串转成整数 题目题解代码 题目 点击跳转: 把字符串转换为整数 题解 【题目解析】&#xff1a; 本题本质是模拟实现实现C库函数atoi&#xff0c;不过参数给的string对象 【解题思路】&#xff1a; 解题思路非常简单&#xff0c;就是上次计算的结果10&#xff0c;相当于10…

【大数据之Flume】三、Flume进阶之Flume Agent 内部原理和拓扑结构

1 Flume事务 2 Flume Agent 内部原理 重要组件&#xff1a; 1、ChannelSelector&#xff08;选择器&#xff09;   ChannelSelector 的作用就是选出 Event 将要被发往哪个 Channel。   &#xff08;1&#xff09;Replicating ChannelSelector&#xff08;复制或副本&#x…