2011-08-08 10 views
12

Używamy Jenkinsa do automatyzacji kilku naszych procesów budowania i testowania. W przypadku niektórych naszych procesów inżynier rozpoczynający kompilację musi podać parametr. Ale zakres możliwych i optymalnych wartości dla tego parametru zmienia się w ciągu dnia.Czy podczas budowy zadania Jenkinsa możliwa jest zmiana parametrów budowania w połowie?

Chciałbym, żeby inżynier określił wartość - jeśli zna optymalną wartość - lub pozostawić ją pustą i mieć wartość obliczaną przez wczesny krok kompilacji. Jeśli wartość jest obliczana, chciałbym, aby obliczony krok kompilacji zaktualizował wartość parametru zadania. W ten sposób wszystkie kolejne kroki kompilacji nie muszą martwić się o użycie parametru lub obliczenie go, po prostu używają tego parametru niezależnie.

Wygląda na to, że Groovy Script Plugin może być w stanie to zrobić, ale nie widzę sposobu, w jaki można ustawić parametry kompilacji, po prostu POBIERZ je.

Odpowiedz

7

znalazł odpowiedź: użyć EnvInject Plugin. Jedną z funkcji jest krok kompilacji, który umożliwia "wstrzykiwanie" parametrów do zadania kompilacji z pliku ustawień. Użyłem jednego kroku kompilacji do utworzenia pliku ustawień, a następnie kolejnego kroku kompilacji, aby wprowadzić nowe wartości. Następnie wszystkie kolejne kroki kompilacji i operacje wykonywane po zakończeniu kompilacji wykorzystywały nową wartość.

3

Jenkins ma możliwość parametryzowania buildów. W przypadku parametru string programista może zostawić to pole puste, a następnie skrypty budujące mogą sprawdzić, czy env. zmienna dla parametru jest ustawiona. Jeśli env. var. nie jest ustawione, skrypt może wykonać dowolne obliczenia (nie sądzę, że Jenkins ma "wstępne kroki") i przekazać je dalej. Dla parametru wyboru z wyborem pierwsza linia może być podobna do (Default) i ponownie skrypt budujący może przetestować jej wartość i odpowiednio działać.

Uwaga na (Default)

Próbowałem pozostawiając pierwszą linię polu wyboru puste, a Jenkins zapisany poprawnie po raz pierwszy; ale kiedy wróciłem do rekonfiguracji konstrukcji, Jenkins uruchomił jakieś wykończenie opcji, a pierwsza pusta linia została usunięta, więc zdecydowałem się na (Default).

Mam nadzieję, że to pomaga,
Zachary

+2

Podejście to działa świetnie, kiedy mam tylko jednego etapu budowy. Ale mam całą masę kroków kompilacji, które odwołują się do parametru budowania na różne sposoby. Warunkowałem te oparte na skryptach (jak plik Windows BAT lub PowerScript), ale nie mogę warunkować innych, takich jak Kopiuj artefakty lub Trigger Build. Dobry pomysł. –

0

To jest moje rozwiązanie, które powinny współpracować z rurociągów Jenkins:

# Jenkinsfile 
// define job parameters 
properties([parameters([string(defaultValue: 'Hello', description: 'How should I greet the world?', name: 'Greeting')])]) 
// update or replace parameter 
void setParam(String paramName, String paramValue) { 
    List<ParameterValue> newParams = new ArrayList<>() 
    newParams.add(new StringParameterValue(paramName, paramValue)) 
    $build().addOrReplaceAction($build().getAction(ParametersAction.class).createUpdated(newParams))  
} 

print params.Greeting 
setParam("Greeting", "bonjour") 
print params.Greeting