2014-10-22 11 views
5

Mam zadanie Jenkinsa, które nazywa się groovy skryptem, a groovy skrypt używa parametrów Jenkinsa, aby wykonać to zadanie. Mogę pobrać wszystkie parametry bez problemu, z wyjątkiem parametru boolowskiego. Parametr logiczną pole wyboru w JenkinsParametr boolean Jenkinsa jest zawsze prawdziwy w groovy

unselected boolean parameter

czytam parametr Jenkins w Groovy następująco:

boolean libraryBranch = config.get('library_branch_feature'); 

Teraz kiedy wydrukować 'libraryBranch' zmienną

out.println "-- Library branch feature?: " + libraryBranch.toString(); 

Dostaję następującą wydrukowaną linię:

- biblioteka cecha oddział: prawda

Więc to nie ma znaczenia, czy wybrana jest wartość logiczna parametru Jenkins lub nie zawsze mają wartość logiczną „prawdziwy” w Groovy. Wszystkie pozostałe (ciągi) parametry wewnątrz tego samego zadania są odczytywane bez problemu.

Czy ktoś może mi pomóc w tym problemie?

EDIT

Ok Zdecydowałem się spróbować i pobrać kod w kilku innych sposobów i tyring znaleźć dobre rozwiązanie:

Boolean libraryBranch = build.buildVariableResolver.resolve("library_branch_feature"); 
String libraryBranchString = build.buildVariableResolver.resolve("library_branch_feature").toString(); 
Boolean libraryBranchStringAsBoolean = build.buildVariableResolver.resolve("library_branch_feature") as Boolean; 

Powyższe zmienne są następnie drukowane:

out.println "-- Library branch feature?: " + libraryBranch; 
out.println "-- Library branch feature to String: " + libraryBranch.toString(); 
out.println "-- Library branch feature to String: " + libraryBranch.toString(); 
out.println "-- Library branch feature as String: " + libraryBranchString; 
out.println "-- Library branch feature String as Boolean: " + libraryBranchStringAsBoolean; 

wyjście z powyższych wydruków są umieszczane poniżej:

-- Library branch feature?: true 
-- Library branch feature to String: true 
-- Library branch feature to String: true 
-- Library branch feature as String: false 
-- Library branch feature String as Boolean: true 

Jedynym sposobem, aby wartość logiczna została poprawnie odczytana jako fałszywa, nie jest przekształcenie jej w wartość boolowską, ale jedynie odczytanie jej jako ciągu znaków i użycie jej jako ciągu znaków.

Wolałbym używać tego jako boolowskiej, więc wszelkie sugestie na ten temat są nadal doceniane.

Odpowiedz

6

Odpowiedzią jest odczyt parametru Jenkins jako String, a następnie przekonwertowanie go na wartość boolean za pomocą metody .toBoolean(); Więc moja libraryBranch jest teraz ustawić w następujący sposób:

boolean libraryBranch = build.buildVariableResolver.resolve("library_branch_feature").toString().toBoolean(); 
0

I napotkał ten sam problem z czytania Właściwości Java - pobrane wartości logiczne są zawsze prawdziwe. Powiedzmy, że mam plik settings z właściwością debugging=false. Ten test nie powiedzie się:

class ConfigurationTest extends GroovyTestCase { 
    void testProcessConfiguration() { 
     Properties properties=new Properties() 
     FileReader fileReader=new FileReader('settings') 
     properties.load(fileReader) 
     boolean debug=properties.getOrDefault('debugging',false) 
     assert !debug 
     fileReader.close() 
    } 
} 

Ale jeśli je properties.getOrDefault('debugging',false).toString().toBoolean() zwróci poprawną wartość. Prawdopodobnie dzieje się tak z powodu przymusu?

1

Tak z ciekawości, próbowałem następujące:

ustawić zmienną „TESTMODE” jako wartość logiczną w konfiguracji rurociągu. Rozpocznij zadanie, z ustawionym testem false (odznaczone). W skrypcie rurociągu, natychmiast uruchomić poniższy kod na wejściu:

testmode=testmode.toBoolean() 
    if (testmode==false) { print "testmode tests true"}else{print "testmode tests false"} 

widać wynikiem „testy TESTMODE false”.

Aby zweryfikować twierdzenie, że „logiczna” zmienna TESTMODE jest faktycznie ciągiem jeśli chodzi w starałem:

testmode=testmode.toBoolean() 
    testmode=testmode.toBoolean() 

i wysadził na 2 „toBoolean”. Oszczędź ci komunikatu o błędzie ...

Tak więc twierdzę, że tryb testowy pojawia się jako ciąg "false" zamiast jako boolean (z powodu promocji, degradacji, forsowania, cokolwiek).

Tak więc, jeśli jest to parametr boolowski i naprawdę chciałbyś go traktować jak boolean i nie musisz mówić "if (booleanvar ==" true ")", to przekonwertuj go na boolean jak wyżej, a ty " gotowe.