robie prosty rurociągu:Załaduj plik ze zmiennych środowiskowych Jenkins Pipeline
Build -> Etapowania -> Produkcja
muszę różne zmienne środowiskowe dla inscenizacji i produkcji, więc staram się zmienne źródłowe:.
sh 'source $JENKINS_HOME/.envvars/stacktest-staging.sh'
ale zwraca Nie znaleziono
[Stack Test] Running shell script
+ source /var/jenkins_home/.envvars/stacktest-staging.sh
/var/jenkins_home/workspace/Stack [email protected]/durable-bcbe1515/script.sh: 2: /var/jenkins_home/workspace/Stack [email protected]/durable-bcbe1515/script.sh: source: not found
Ścieżka ma rację, bo uruchomić tego samego polecenia po zalogowaniu się przez ssh, i to działa dobrze.
Oto pomysł rurociąg:
node {
stage name: 'Build'
// git and gradle build OK
echo 'My build stage'
stage name: 'Staging'
sh 'source $JENKINS_HOME/.envvars/stacktest-staging.sh' // PROBLEM HERE
echo '$DB_URL' // Expects http://production_url/my_db
sh 'gradle flywayMigrate' // To staging
input message: "Does Staging server look good?"
stage name: 'Production'
sh 'source $JENKINS_HOME/.envvars/stacktest-production.sh'
echo '$DB_URL' // Expects http://production_url/my_db
sh 'gradle flywayMigrate' // To production
sh './deploy.sh'
}
co mam zrobić?
- Myślałem o tym, aby nie używać potoku (ale nie będę mógł używać mojego pliku Jenkins).
- lub dokonać różnych miejsc pracy dla inscenizacji i produkcji, przy użyciu EnvInject Plugin (ale tracę widok etap)
- lub dokonać withEnv (ale kod staje się duży, bo dziś pracuję z 12 env vars)
Dzięki za odpowiedź. Dokładnie tego potrzebuję. A także dzięki za szczegółowe wyjaśnienie. Bardzo łatwo było replikować. – Rafael
Należy zauważyć, że używanie zmiennej env jest odradzane, ponieważ zmienna env jest globalna. Zalecaną praktyką byłoby ładowanie lokalnych zmiennych, a następnie ustawienie ich jako zmiennych środowiskowych w części potoku za pomocą konstrukcji 'withEnv'. – stoned
@ Stonowany, jak mogę użyć hasła zEnv i Jenkinsfile? (bez narażania mojego hasła na Jenkinsfile, ponieważ nie chcę tego w repozytorium git). Czy istnieje sposób bez 'load 'myenvvars.groovy" '. – Rafael