【问题标题】:groovy script seems to timeout (jenkins)groovy 脚本似乎超时(詹金斯)
【发布时间】:2021-10-29 11:51:45
【问题描述】:

我在使用 groovy 脚本时遇到了一些问题;

sh '''
    echo \'Starting script\';
    sleep 5;
    echo \'pwd\';
    sleep 5; 
    pwd;
    sleep 5;
    find / -name jenkins.war -type f;
    sleep 5;
'''

执行时间较长的命令总是会导致管道失败;除find 外的所有命令均成功运行。在日志(浏览器)中,在管道失败之前显示了许多文件并显示消息:

Jenkins build has status: FAILURE. Notifying  Bitbucket with state: FAILED.

问题是无法直接访问 jenkins 服务器(没有简单的方法来检查日志)。

我不确定我是否以正确的方式进行此操作,但是否有任何设置可能导致此类行为?

【问题讨论】:

  • 您如何处理find ...result?只需在构建的控制台输出中打印它,还是有更多您没有向我们展示的周围管道代码?从根目录查找可能需要一段时间。您可能遇到服务器超时或运行脚本的用户无权访问某些目录/文件。我会尝试根据How to return stdout and stderr together with the status from a Jenkins Pipeline sh script step 的答案返回stderr
  • @GeroldBroser 是的,结果用于显示版本(java -jar find / -name jenkins.war -type f --version)。是的,有些文件 find 给出了 permission denied ,但奇怪的是,一些没有权限的文件仍然打印到日志中。
  • 为什么这很奇怪?这是findstderr 的输出。我绝对希望在日志中看到 any 命令(或 any 程序,就此而言)的错误输出,以防出现问题。跨度>
  • @IanW 如果您参考 [jenkins-]groovy 标签:管道步骤(此处为 sh)在技术上是 Groovy 方法(尽管这不是问题的原因在这里)。

标签: jenkins groovy jenkins-pipeline jenkins-groovy


【解决方案1】:

有一种更优雅、更准确、更高效的方式来获取 Jenkins 的版本:

    stages {
        stage('Jenkins version') {
            steps {
                print "${Jenkins.getInstance().getVersion()}"
            }
        }
    }

控制台输出

...
[Pipeline] stage
[Pipeline] { (Jenkins version)
[Pipeline] echo
2.303.2
...

注意:getInstance()getVersion() 必须由 Jenkins 管理员批准。

您也可以curl https://JENKINS_URL/about/ 并提取包含<td>org.jenkins-ci.main:jenkins-war:2.303.2</td> 的元素/行。

【讨论】:

    猜你喜欢
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多