Дженкинс: избегайте использования учетных данных при неработающей интерполяции строк groovy

#jenkins #groovy #interpolation #credentials

Вопрос:

Я пытаюсь применить лучшие практики к своим конвейерам Дженкинса, поэтому я пытаюсь применить рекомендацию о том, что интерполяция строк Groovy никогда не должна использоваться с учетными данными

Сначала я выполняю в своем конвейере, как рекомендовано в документации Дженкинса — интерполяция чувствительных переменных, поэтому я использую одинарные кавычки в своем сценарии:

 withCredentials([usernamePassword(credentialsId: 'my-docker-user', passwordVariable: 'docker_pwd', usernameVariable: 'docker_usr')]) {

dcheckScriptResult = sh label: 'Retrieving image', script: ''' docker login -u $docker_usr -p $docker_pwd $dockerRegistry ''', returnStatus: true 

echo "dcheckScriptResult = $dcheckScriptResult" 
}
 

Но в результате я получаю:

 04:59:04    docker login -u **** -p ****
04:59:04  Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password
 

Теперь я пытаюсь, так как это считается неправильным (двойные кавычки):

         dcheckScriptResult = sh label: 'Retrieving image', script: """ docker login -u $docker_usr -p $docker_pwd $dockerRegistry """, returnStatus: true

        echo "dcheckScriptResult = $dcheckScriptResult"
 

И это работает…но с предупреждением об использовании заводной интерполяции:

 05:11:54  Warning: A secret was passed to "sh" using Groovy String interpolation, which is insecure.
05:11:54         Affected argument(s) used the following variable(s): [docker_pwd, docker_usr]
05:11:54         See https://jenkins.io/redirect/groovy-string-interpolation for details.
05:11:54    docker login -u **** -p **** myrepository.mycompany
05:11:54  WARNING! Your password will be stored unencrypted in /home/ccloud/.docker/config.json.
05:11:54  Configure a credential helper to remove this warning. See
05:11:54  https://docs.docker.com/engine/reference/commandline/login/#credentials-store
05:11:54  
05:11:54  Login Succeeded
 

Есть идеи, чего мне не хватает?

Комментарии:

1. Я пропустил сообщение об ошибке. Разница в первой по сравнению со второй захваченной командой docker заключается в отсутствии адреса реестра. Я думаю, что вам нужно просто сделать dockerRegistry доступным в качестве переменной среды.

2. спасибо за идею @daggett, это была проблема dockerRegistry , из-за которой отсутствовала переменная. Я решил эту проблему, убрав ее из одинарных кавычек, как это: dcheckScriptResult = sh label: 'Retrieving image', script: ''' echo $docker_pwd | docker login -u $docker_user --password-stdin ''' dockerRegistry , returnStatus: true