执行pipeline的job出错,这个问题其他同学也提过

来源:5-11 Jenkins pipeline job实战 - pipeline任务构建以及自动化部署

覆海神龙

2019-04-12

groovy.lang.MissingPropertyException: No such property: user for class: groovy.lang.Binding
	at groovy.lang.Binding.getVariable(Binding.java:63)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:264)
	at org.kohsuke.groovy.sandbox.impl.Checker$6.call(Checker.java:288)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:292)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:268)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:268)
	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:35)

以下是pipeline代码片段:

...
      stage ("Check env") {
          steps {
            	sh """
              set +x
              user=`whoami`
              if [ $user == root ]
              then
                  echo "[INFO] Current deployment user is $user"
                  echo "[INFO] Current python version"
                  python --version
                  echo "[INFO] Current ansible version"
                  ansible-playbook --version
                  echo "[INFO] Remote system disk space"
                  ssh root@prod_server2.hicoview.com df -h
                  echo "[INFO] Remote system RAM"
                  ssh root@prod_server2.hicoview.com free -m
              else
              		echo "Deployment user is incorrect, please check"
              fi
              
              set -x
              """
          }
      }
...

主要原因是$user这个变量的问题,莫非是user=whoami这句无效?

另外一个问题是,以下这句,

input "Do you approve the deployment?"

会导致执行job的时候,无论是选择Proceed或Abort都不会有效果,一直卡那里:

Do you approve the deployment?
Proceed or Abort
写回答

1回答

一路向北

2019-04-13

感谢这位同学的关注, 可以尝试这个写法

user=$(whoami)
if [[ ${user} == root ]]; then

...

fi

还有这里的input需要加括号

input("Do you approve the deployment?")

0
2
一路向北
回复
覆海神龙
这个可能跟你pipeline上下文有一定关系, 具体可以发群里探讨一下
2019-04-14
共2条回复

Jenkins+Ansible+Gitlab-三剑合璧掌握自动化部署

整合三大工具解决自动化部署&持续交付问题

1290 学习 · 319 问题

查看课程