Jenkins 管道中的条件步骤仅基于前一setp的输出执行

Jenkins 管道中的条件步骤仅基于前一setp的输出执行,jenkins,jenkins-pipeline,jenkins-groovy,Jenkins,Jenkins Pipeline,Jenkins Groovy,对不起,我不是詹金斯管道方面的专家,但也许有人能给我指出正确的方向 我正试图做一些类似的事情,但我还没有弄明白 因此,我想实现以下目标 我有一个脚本,可以获取一些文件并将它们存储在我的项目中 我希望在第二阶段运行它,以便在获取的文件中有一些更改时创建PR。这个想法是每天/每周运行这个管道 所以我试着这样做: #!groovy pipeline { stages { stage('Definitions updated') { steps { sh

对不起,我不是詹金斯管道方面的专家,但也许有人能给我指出正确的方向

我正试图做一些类似的事情,但我还没有弄明白

因此,我想实现以下目标

我有一个脚本,可以获取一些文件并将它们存储在我的项目中 我希望在第二阶段运行它,以便在获取的文件中有一些更改时创建PR。这个想法是每天/每周运行这个管道

所以我试着这样做:

#!groovy

pipeline {
  stages {
    stage('Definitions updated') {
      steps {
        sh "./gradlew updateDefinitions"
        gitStatus = sh(returnStdout: true, script: 'git status').trim()
        ## how to expose gitStatus to the outside
      }
    }
    stage ('Create PR') {
      when {
        // Only say hello if a "status returned something"
        ## how to use the gitStatus to check against a certain output
        expression { SOMETHING == 'SOMETHING'' }
      }
      steps {
        sh "git add ."
        etc...
      }
    }
  }
}
例如,我不确定如何将sh命令中的内容存储到环境变量中,以便在下一步的条件下使用它

我也不知道我是否正确理解这将并行运行,我希望所有阶段都是顺序的,但我不是100%确定

是否有任何示例可以找到类似于out的方法将sh的输出存储到环境变量中


感谢您的反馈

您可以在管道块之外声明gitStatus,如下所示

def gitStatus

pipeline {
  stages {
    stage('Definitions updated') {
      steps {
        sh "./gradlew updateDefinitions"
        gitStatus = sh(returnStdout: true, script: 'git status').trim()
        ## how to expose gitStatus to the outside
      }
    }
    stage ('Create PR') {
      when {
        // Only say hello if a "status returned something"
        ## how to use the gitStatus to check against a certain output
        expression { gitStatus == 'SOMETHING'' }
      }
      steps {
        sh "git add ."
        etc...
      }
    }
  }
}

谢谢,实际上我意识到我可以在我的环境块中定义这个值,当我稍后尝试重新分配它时,它给了我一个错误。但是关于在表达式中比较字符串的最基本的问题让我发疯了“hudson.remoting.ProxyException:groovy.lang.MissingPropertyException:没有这样的属性:类的gitStatus:WorkflowScript”它不需要在外部定义也可以工作。因为没有
def
关键字的变量定义被视为全局变量。在声明性管道中,它可能必须放在脚本块中。