Какой тип Groovy объекта Дженкинс "env"? - PullRequest
1 голос
/ 03 апреля 2020

В конвейерах Jenkins, если я назначу какое-либо значение ключа для env, я могу получить к нему доступ, как к обычным переменным в интерполяции строк и переменным среды в сценарии оболочки. Как это работает?

Я вижу вероятную реализацию здесь , но не могу понять, как она работает.

[Обновить]

В следующем фрагменте кода я могу получить доступ к свойствам env без доступа ->

node {
   stage('Preparation') {
        env.foo = "bar"
        echo "foo is $foo"
   }
}

1 Ответ

2 голосов
/ 04 апреля 2020

Я не углубился в код Jenkins, но вы могли бы реализовать нечто подобное, реализовав метод propertyMissing() в классе, который записывал бы в привязку скрипта. Метод propertyMissing вызывается, когда код пытается получить доступ к свойству, которое не объявлено в классе.

class MyEnv {
    groovy.lang.Script script

    MyEnv( groovy.lang.Script script ) {
        this.script = script
    }

    def propertyMissing( String name ) {
        script.getProperty( name )
    }    
    def propertyMissing( String name, value ) {
        script.setProperty( name, value )
    }    
} 

def env = new MyEnv( this )  // pass the script context to the class

env.foo = 42                 // actually assigns to the script binding

println "env.foo: $env.foo"  // prints 42
println "foo: $foo"          // prints 42

// It also works the other way around...
foo = 21                     // assign to the script binding (Note: "def foo" would not work!)
println "env.foo: $env.foo"  // prints 21

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...