Трубопроводы из общей библиотеки Jenkins: синглтоны против синглетонов по требованию - PullRequest
2 голосов
/ 18 мая 2019

В документации Jenkins упоминается, что все определения var являются одиночными по требованию, но не объясняется, что это значит. Ссылка на документацию: https://jenkins.io/doc/book/pipeline/shared-libraries/#defining-global-variables

Означает ли это, что синглтон определяется в момент вызова задания и является ли он уникальным экземпляром для этой конкретной работы? И как это соотносится с явным вызовом @Singleton при размещении в классе?

Я попытался настроить свой общий конвейер, чтобы я мог просмотреть обе его стороны. Когда я запускаю приведенный ниже код, я вижу в выводе, что оба класса выводят ожидаемую информацию. Они оба начинаются как пустые строки , а затем устанавливаются равными env.BUILD_TAG (список поддерживаемых переменных env здесь) .

Меня беспокоит то, что если у меня одновременно запущено несколько заданий, они используют один и тот же синглтон или он уникален для каждой сборки? До сих пор я не смог доказать это, поэтому я надеялся, что у кого-то есть ответ на этот вопрос.

Структура

src
  - org
   - utilities
     - GlobalStateClass.groovy
vars
  - globalStateVar.groovy
  - main.groovy

GlobalStateClass.groovy

#!groovy
package org.utilities

@Singleton
class GlobalStateClass implements Serialization{
  public String version = ""
}

globalStateVar.groovy

#!groovy
class globalStateVar implements Serialization{
  public String version = ""
}

main.groovy

#!groovy
import org.utilities.GlobalStateClass

def call () {
  println "Old Values: ${ GlobalStateClass.instance.version } ${ globalStateVar.version }"
  String v = env.BUILD_TAG
  GlobalState.instance.version = v
  globalStateVar.version = v
  println "New Values: ${ GlobalStateClass.instance.version } ${ globalStateVar.version }"
}

Jenkinsfile

pipeline {
  agent any
  stages {
    stage('test 0'){
      main()
    }
    stage('test 1'){
      main()
    }
    stage('test 2'){
      main()
    }
    stage('test 3'){
      main()
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...