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