Если мерзавец пароль содержит специальные символы, такие как «%», «:», «@», или «/», проходящей ${env.GIT_PASSWORD}
как часть мерзавца URL т.е. https://${env.GIT_USERNAME}:${env.GIT_PASSWORD}@<REPO>
без выполнения кодирования вероятно, приведет к ошибке Invalid username or password
.
Для сохранения каких-либо хлопот с помощью инлайн credential.helper это лучший способ пойти, однако предложение о !echo password=\$GIT_PASSWORD; echo'
приведет к предупреждению их в ваших журналах warning: invalid credential line: get
как credential.helper передается аргумент, чтобы указать требуемую операцию (получить, хранить, стирать). В этом случае помощник учетных данных пытается интерпретировать операцию get
в качестве ввода учетных данных. Допустимыми входами являются протокол, хост, путь, имя пользователя, пароль, URL. См. https://git-scm.com/docs/git-credential#IOFMT
Лучшим встроенным идентификатором credential.helper будет !f() { echo password=\$GIT_PASSWORD; }; f
Таким образом, операция credential.helper get
игнорируется.
Полный пример:
try {
withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'MyID', usernameVariable: 'GIT_USERNAME', passwordVariable: 'GIT_PASSWORD']]) {
sh("${git} config credential.username ${env.GIT_USERNAME}")
sh("${git} config credential.helper '!f() { echo password=\$GIT_PASSWORD; }; f'")
sh("GIT_ASKPASS=true ${git} push origin --tags")
}
} finally {
sh("${git} config --unset credential.username")
sh("${git} config --unset credential.helper")
}
Это ваш лучший выбор на данный момент.[JENKINS-28335] (https://issues.jenkins-ci.org/browse/JENKINS-28335) предлагает более удобную систему. –
Я подтверждаю, что используя ['sshagent (['git-credentials-id'])'] (https://issues.jenkins-ci.org/browse/JENKINS-28335?focusedCommentId=269000&page=com.atlassian.jira. plugin.system.issuetabpanels: comment-tabpanel # comment-269000) работает и немного проще. Я использовал его [здесь] (http://stackoverflow.com/questions/40618449/how-to-checkout-ssh-remote-in-github-organization-and-use-ssh-credentials-in-jen) – GabLeRoux
Значения могут быть замаскированы на выходе консоли, но любой, кто имеет доступ к машине, может прочитать пароль из командной строки процесса. Будем надеяться, что скоро получим безопасную альтернативу! – Gili