Скрытие паролей в выводе журнала Jenkins Pipeline без использования WithCredentials - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть параметризованный конвейер Дженкинса, основанный на Jenkinsfile.Некоторые параметры содержат конфиденциальные пароли, которые я не хочу отображать в журналах сборки задания.

Поэтому мой вопрос: могу ли я каким-либо образом зарегистрировать строку в Jenkinsfile, которая затем будет заменена наскажем ********** - всякий раз, когда он появляется в выводе журнала?

Мне известен шаг withCredentials, но я не могу его использовать, поскольку учетные данные не хранятся в хранилище учетных данных Jenkins (нопредоставляется в качестве параметров во время выполнения).

Я нашел этот ответ здесь https://stackoverflow.com/a/42372859/1549950 и попробовал его так:

def secrets = [
    [password: firstPassword, var: 'SECRET'],
    [password: secondPassword, var: 'SECRET'],
    [password: thirdPassword, var: 'SECRET']
]

node() {
    wrap([$class: 'MaskPasswordsBuildWrapper', varPasswordPairs: secrets]) {
        // my stages containing steps...
    }
}

Где firstPassword, secondPassword, thirdPassword переменные, содержащие мои пароли.Но все же я получаю содержимое firstPassword ..., отображаемое в виде текста в выводе журнала.

У меня установлен плагин Mask Password на моем Jenkins в версии 2.12.0.

В основном я ищу что-то вроде этого: https://issues.jenkins -ci.org / browse / JENKINS-27486 - тикет разрешен, но примерный фрагмент окончательной реализации не приведен.

Ответы [ 4 ]

0 голосов
/ 28 июня 2019

Обходной путь.

Напишите простой сценарий, например, bash, и введите учетные данные параметров в некоторый файл произвольного формата, вплоть до вашего подхода.

Например, базовый сценарий оболочки:

$ cat executor/obfuscate.sh 
#!/bin/bash

echo "PASSWORD: ${AWX_PW}" > ./executor/credential.yml

В вашем конвейере:

stages {
    stage('Placing') {
        steps {
            **sh './executor/obfuscate.sh'** }
            [...]
            < something reading credential.yml>
    }
}

Результат, ничего не отображается в консоли:

enter image description here

0 голосов
/ 29 сентября 2018

Вы можете взглянуть на https://github.com/jenkinsci/log-file-filter-plugin

Этот плагин позволяет фильтровать вывод консоли Jenkins с помощью регулярных выражений.Если какой-либо шаблон соответствует совпадающей строке, он заменяется строкой, которую можно указать для каждого шаблона в конфигурации.

В настоящее время плагин не поддерживает добавление шаблонов фильтров из файла jenkins, а только из глобальных настроек Jenkins.,

0 голосов
/ 16 октября 2018

На самом деле я не знаю, почему это не сработало, но вот решение проблемы.

Определите массив с секретами, которые вы хотите скрыть, вот так:

def splunkPassword = 'verySecretPa55w0rd'
def basicAuthPassword = 'my8asicAuthPa55w0rd'

def getSecrets() {
    [
            [password: splunkPassword, var: 'SECRET'],
            [password: basicAuthPassword, var: 'SECRET']
    ]
}

Отказ от ответственности: я не знаю, играет ли значение SECRET важную роль, скопируйте и вставьте его из некоторого фрагмента, и он будет работать, как и ожидалось:)

После этого вы можете обернутьлюбые вызовы в вашем конвейерном сценарии , например:

node {
    wrap([$class: 'MaskPasswordsBuildWrapper', varPasswordPairs: getSecrets()]) {
        stage 'First Stage' { ... }
        stage 'Second Stage' { ... }
    }
}

Все пароли, предоставленные в массиве getSecrets(), будут затем маскироваться в выводе вашей сборки следующим образом:

SPLUNK_PASSWORD: ********
BASIC_AUTH_ADMIN_PASSWORD: ********
0 голосов
/ 28 сентября 2018

Я думаю, что вы ищете JENKINS-36007 ?

...