Jenkins Linter:不包含“管道”步骤

bfrts1fy  于 2023-10-17  发布在  Jenkins
关注(0)|答案(2)|浏览(147)

当使用pipeline linter检查Jenkins脚本时,我得到以下反馈:
Jenkinsfile content 'node('xxx') ... did not contain the 'pipeline' step.
一个简短的例子给出了同样的错误:

node('xxx'){
  try  {
    stage("Get jenkins utils")    {
      echo 'get utils to support my builds'
    }
  }
  catch (Exception err)  {
    echo err.getMessage()
  }
}

如何添加管道步骤来解决此反馈,而不影响管道脚本的当前工作。理想情况下,我希望Jenkins将其作为脚本管道进行检查。
我不确定管道步骤的意图是什么,以及在哪里添加它。这感觉就像try catch必须被替换为不同的机制。

ibps3vxo

ibps3vxo1#

这将返回Jenkinsfile successfully validated.

pipeline {
  agent {
    label 'xxx'
  }
  stages {
    stage("Get jenkins utils") {
      steps {
        error 'fubar'
      }
    }
  }
  post {
    always {
      echo "done"
    }
    failure {
      echo "failure"
    }
  }
}

我使用脚本管道和linter can only handle declarative pipelines。上面应该是与我在问题中的脚本示例等效的声明性。
现在我不确定这是最好的使用方法,我需要更多的实验。

5ktev3wc

5ktev3wc2#

看看Jenkins documentation for pipeline syntax,它说得很简单:
所有有效的Declarative Pipelines必须包含在一个pipeline块中,例如:

pipeline {
    /* insert Declarative Pipeline here */
}

这不是一个实际的解决方案,这是后来的,但pipeline声明的说明,但对于初学者,你可以尝试:

pipeline {
  node('xxx'){ }
  try  {
    stage("Get jenkins utils")    {
      echo 'get utils to support my builds'
    }
  }
  catch (Exception err)  {
    echo err.getMessage()
  }
}

如果你想进一步提高你的Jenkins管道技能,CloudBees,一家由Jenkins的创建者创建的公司,提供Jenkins支持,有a nice tutorial in their GitHub
既然说到这里

  • 您的节点应该位于管道的agent部分之下。
  • stage语句应该在stages语句中。
  • try/catch语句应该在step内部。
  • 上面的step应该在“Get jenkins utils”stage中。

所以你的管道应该看起来更像:

pipeline {
  agent { 
    node { label 'labelName' } 
  }
  stages {
    stage("Get jenkins utils") {
      steps {
        step {
          try  {
            echo 'get utils to support my builds'
          }
          catch (Exception err)  {
            echo err.getMessage()
          }
        }
      }
    }
  }
}

相关问题