Jenkins 作业从 Git 检索值

问题描述 投票:0回答:1

我有一个 Jenkins 作业管道,它有一个“构建作业”选项,它引用并执行第二个 jenkins 作业。第二个 Jenkins 作业引用了存储在 Github 中的第三个 Jenkinsfile。

第三个詹金斯尔有几个阶段。问题是,第一个 Jenkinsfile 应该只执行该 Jenkinsfile 中的一个阶段。

我认为最好在 Github Jenkinsfile 的该阶段创建一个参数,并让第一个 Jenkins 作业检索该参数的值。

如何实现这一点,什么样的参数可以访问Github Jenkinsfile?

尝试根据作业名称添加不同的作业来执行不同的阶段,但卡住了,因为 Github Jenkinsfile 无法检索 Jenkins 作业名称。

github jenkins jenkins-pipeline jenkins-groovy
1个回答
0
投票

问题是,第一个 Jenkinsfile 应该只执行该 Jenkinsfile 的一个阶段。

如果我正确理解你的设置,这是不可能的。

build
步骤运行一个作业,一个作业运行整个 Jenkinsfile。

我认为最好在 Github Jenkinsfile 的该阶段创建一个参数,并让第一个 Jenkins 作业检索该参数的值。

Jenkinsfile 阶段没有自己的参数,只能使用预先定义的管道参数。

但是,与此同时,这也带来了一个可能的解决方案。

您可以在管道的任何阶段使用

when
条件。

例如,如果您只需要在构建被任何其他作业触发时执行第一阶段,您可以这样做:

// Jenkinsfile #3

pipeline {
  // ...
  stages {
    stage('First') {
      when { triggeredBy 'BuildUpstreamCause' }
      steps {
        // ...
      }
    }
    stage('Second') {
      when { not triggeredBy 'BuildUpstreamCause' }
      steps {
        // ...
      }
    }
    // ...
  }
}

或者,您可以从第一个 Jenkinsfile 的

build
步骤传递一些参数值,如下所示:

// Jenkinsfile #1
// ...
  steps {
    // ...
    build job: 'some/job/path',
          parameters: [
            booleanParam name: 'runFirstStageOnly',
              value: true
          ]
  }
// ...

并在

when
块中检查此参数值:

// Jenkinsfile #3

pipeline {
  // ...
  stages {
    stage('First') {
      when { 
        expression {
          params.runFirstStageOnly
        }
      }
      steps {
        // ...
      }
    }
    stage('Second') {
      when { 
        expression { 
          not params.runFirstStageOnly
        }
      }
      steps {
        // ...
      }
    }
    // ...
  }
}

您可以组合条件来满足您的具体要求 - 有许多内置条件,并且使用

expression
allOf
/
anyOf
您可以做一切。

© www.soinside.com 2019 - 2024. All rights reserved.