Пароль со специальным символом в скриптовом конвейере Дженкинса для команды 7z

#bash #jenkins #groovy

#bash #дженкинс #groovy

Вопрос:

Я работаю над скриптовым конвейером Дженкинса. Я сохранил секрет в плагине учетных данных. Я хочу использовать этот секрет при создании достижения с использованием 7z. Вот мой код:

 stage('Zip and Encrypt Artifacts') {
   withCredentials([string(credentialsId: 'encryption_key', variable: 'SHARED_PASSWORD')]) {
      archive = report.replace(".txt",".7z")
      sh "7z a -p${SHARED_PASSWORD} -mhe ${archive} ${report}"
      sh "rm ${report}"
   }

}
 

Этот код работает с простым паролем. Но это не удается с надежным паролем.
Каково ваше предложение? Как я должен изменить sh команду?

Спасибо.

Ответ №1:

Укажите все ваши переменные:

     sh '''
        7z a "-p${SHARED_PASSWORD}" -mhe "${archive}" "${report}"
        rm "${report}"
    '''
 

Обратите внимание, что вам нужно использовать одинарные кавычки вокруг скрипта, чтобы вы могли использовать двойные кавычки внутри него. Вы должны использовать двойные кавычки в команде оболочки, чтобы переменные были расширены.

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

1. Спасибо @Barmar, ваш прежний ответ сработал. я имею в виду вот это: sh "7z a -mhe '${archive}' '${report}' -p'${SHARED_PASSWORD}'" затем я протестировал вашу новую версию. Это не сработало. Я думал, что проблема в "-p${SHARED_PASSWORD}" этом. Итак, я протестировал -p"${SHARED_PASSWORD}" . Это не сработало. Я перешел -p к концу строки, и это тоже не сработало. В любом случае, спасибо за вашу помощь, и я рад, что постоянно обновлял эту страницу.

2. Может быть, я не понимаю, как заменяются переменные. Я думал, что они просто помещаются в среду, а затем заменяются оболочкой, но похоже, что Jenkins выполняет свои собственные замены.