#jenkins #jenkins-pipeline
#дженкинс #дженкинс-конвейер
Вопрос:
итак, у меня есть следующий этап конвейера, который отлично работает:
stage('Database') {
steps {
script {
remote = createDeployRemote()
withCredentials([
usernamePassword(credentialsId: "credential-id", usernameVariable: 'THE_USERNAME', passwordVariable: 'THE_PASSWORD')
]) {
sshCommand remote: remote,
command: """
somecommand
--username="${THE_USERNAME}"
--password="${THE_PASSWORD}"
"""
}
}
}
}
Теперь Дженкинс жалуется на следующее предупреждение:
Предупреждение: секрет был передан «sshCommand» с использованием интерполяции строк Groovy, что небезопасно.
Затронутые аргументы использовали следующие переменные: [THE_USERNAME, THE_PASSWORD]
Видишь https://jenkins.io/redirect/groovy-string-interpolation за подробностями.
Конечно, я понимаю, что это небезопасно, но, похоже, это sshCommand
не передает ни одну из переменных среды hosts на удаленную машину.
Например, я изменил код на следующий:
stage('Database') {
environment {
THE_CREDS = credentials("credential-id")
}
steps {
script {
remote = createDeployRemote()
sshCommand remote: remote,
command: """
printenv
somecommand
--username="$THE_CREDS_USR"
--password="$THE_CREDS_PSW"
"""
}
}
}
(printenv должен печатать переменные среды учетных данных)
Итак, возникает вопрос: есть ли какой-либо способ архивировать это без использования интерполяции строк? Я ничего не смог найти в документации.
Спасибо.
Комментарии:
1. Проблема с восходящим потоком: issues.jenkins.io/browse/JENKINS-64552
2. Смотрите документ о конвейере плагинов по адресу jenkins.io/doc/pipeline/steps/credentials-binding о том, как разрешить временные переменные среды внутри команды, а не внутри конвейера, где они будут доступны.
3. @MattSchuchard да, я это понимаю, но при использовании sshCommand (не простого sh) они недоступны.
4. В этом случае вам, вероятно, следует либо удаленно вызвать команду (т. Е. API), либо обернуть команду внутри чего-то локально выполняемого, которое может выполнять SSH (т.Е. Ansible).
5. Хотя Ansible — хорошая идея, мне не нравится, что я вижу, как каждая отдельная команда выполняется как один шаг в BlueOcean. ИТАК, я думаю, я буду придерживаться текущего менее безопасного решения и ждать, пока плагин ssh не реализует что-то для передачи переменных среды. Редактировать : спасибо за ваши усилия.