Отключение эха в выводе консоли Jenkins
Я следую руководству, как подписать Android apk с Дженкинсом. Я параметризировал работу Дженкинса с KSTOREPWD и KEYPWD. Часть конфигурации заданий Дженкинса (Build- > Execute shell) заключается в том, чтобы взять эти параметры и сохранить их в качестве переменных среды:
export KSTOREPWD=${KSTOREPWD}
export KEYPWD=${KEYPWD}
...
./gradlew assembleRelease
Проблема в том, что сборка завершена, кто-либо может получить доступ к сборке "Выход консоли" и посмотреть, какие пароли были введены; часть этого выхода:
08:06:57 + export KSTOREPWD=secretStorePwd
08:06:57 + KSTOREPWD=secretStorePwd
08:06:57 + export KEYPWD=secretPwd
08:06:57 + KEYPWD=secretPwd
Поэтому я хотел бы подавить эхо перед выходом из команд export
и снова включить эхо после команд export
.
Ответы
Ответ 1
По умолчанию Jenkins запускает Execute Shell script с set -x
. Это заставляет все команды отвечать эхом
Вы можете набрать set +x
до того, как какая-либо команда временно переопределит это поведение. Конечно, вам понадобится set -x
, чтобы снова показать их.
Вы можете переопределить это поведение для всего script, поставив в верхней части шага сборки следующее:
#!/bin/bash +x
Ответ 2
В вашей конкретной ситуации (используя gradle и jenkins) вы также можете использовать параметр пароля, используя Gradle шаблон для переменных окружения (ORG_GRADLE_PROJECT_prop)
. gradle затем задает свойство prop
в вашем проекте.
В вашем случае это будет выглядеть примерно так.
![введите описание изображения здесь]()
И вы можете использовать его в своем gradle.properties
, как этот
signingConfigs {
release {
storeFile file(KEYSTORE)
storePassword KSTOREPWD
keyAlias ALIAS
keyPassword KEYPWD
}
}
BTW - я рекомендую использовать плагин привязки учетных данных для KEYSTORE
![введите описание изображения здесь]()
Ответ 3
Вот пример того, как записать параметр sh
в Jenkinsfile
без вывода более безопасным способом, как это предлагается в официальной документации. set +x
совершает основную магию, как было написано в этом ответе.
Одиночные кавычки будут вызвать раскрытие секрета оболочкой как средой переменная. Двойные кавычки потенциально менее безопасны, как секрет Groovy и так типичный процесс операционной системы списки (а также Blue Ocean и дерево шагов конвейера в классический пользовательский интерфейс) будет случайно раскрыть его:
Небезопасное, неправильное использование:
node {
withCredentials([string(credentialsId: 'mytoken', variable: 'TOKEN')]) {
sh /* WRONG! */ """
set +x
curl -H 'Token: $TOKEN' https://some.api/
"""
}
}
Правильное использование ✅:
node {
withCredentials([string(credentialsId: 'mytoken', variable: 'TOKEN')]) {
sh '''
set +x
curl -H 'Token: $TOKEN' https://some.api/
'''
}
}