Как Jenkins передает имя пользователя и пароль для операций извлечения извлечения
У меня есть последние версии Jenkins / Mercurial. Машина Red Hat Linux 6.6.
Я использую плагин Release в Jenkins. Плагины Maven (maven-scm-plugin, maven-version-plugin и maven -forcer-plugin) для выполнения процесса выпуска проекта. Все эти версии используют последние доступные версии, и конфигурация настроена правильно.
В работе Дженкинса я проверяю исходный код проекта, который находится за RhodeCode (Mercurial hg).
Вывод показывает как:
06:00:02 Started by timer
06:00:02 [EnvInject] - Loading node environment variables.
06:00:03 Building on master in workspace /main/jenkins/instance2/workspace/MyCoolProject
06:00:06 [MyCoolProject] $ hg --config auth.jenkins.prefix=* --config ******** --config ******** --config "auth.jenkins.schemes=http https" showconfig paths.default
06:00:06 [MyCoolProject] $ hg --config auth.jenkins.prefix=* --config ******** --config ******** --config "auth.jenkins.schemes=http https" pull --rev default
06:00:12 pulling from http://mercurialserver.my.company.com:9001/csa/MyCoolProject/
06:00:12 no changes found
06:00:12 [MyCoolProject] $ hg --config auth.jenkins.prefix=* --config ******** --config ******** --config "auth.jenkins.schemes=http https" update --clean --rev default
06:00:13 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
06:00:13 [MyCoolProject] $ hg --config auth.jenkins.prefix=* --config ******** --config ******** --config "auth.jenkins.schemes=http https" --config extensions.purge= clean --all
06:00:13 [MyCoolProject] $ hg --config auth.jenkins.prefix=* --config ******** --config ******** --config "auth.jenkins.schemes=http https" log --rev . --template {node}
06:00:13 [MyCoolProject] $ hg --config auth.jenkins.prefix=* --config ******** --config ******** --config "auth.jenkins.schemes=http https" log --rev . --template {rev}
06:00:13 [MyCoolProject] $ hg --config auth.jenkins.prefix=* --config ******** --config ******** --config "auth.jenkins.schemes=http https" log --rev
Как вы видите выше, поскольку мы указали пользователя для выполнения операции чтения / извлечения в инструменте Mercurial DVCS, Дженкинс передал набор параметров при запуске команд hg, т.е.
--config auth.jenkins.prefix = * --config ******** --config ******** --config "auth.jenkins.schemes = http https"
Я пытаюсь выяснить, как я могу отправить то же самое, когда я использую плагин Maven SCM и его цели.
СКМ: Checkin
СКМ: тег
и т. д., который при вызове инициирует лежащие в основе команды управления версиями (в моем случае, hg branch, hg outgoing, hg push команды).
В настоящий момент вышеприведенные команды hg не работают из-за того, что либо у пользователя нет файла ~/.hgrc, содержащего переменную имени пользователя и пароля, либо у пользователя НЕ имеется "ЗАПИСЬ" доступа к целевому репозиторию RhodeCode / Mercurial.
20:16:26 [INFO] --- maven-scm-plugin:1.9.4:checkin (default-cli) @ MyCoolProject ---
20:16:27 [INFO] EXECUTING: /bin/sh -c cd /main/jenkins/instance2/workspace/MyCoolProject && hg branch
20:16:27 [INFO] EXECUTING: /bin/sh -c cd /main/jenkins/instance2/workspace/MyCoolProject && hg outgoing
20:16:29 [INFO] EXECUTING: /bin/sh -c cd /main/jenkins/instance2/workspace/MyCoolProject && hg status
20:16:29 [INFO] [pom.xml:modified]
20:16:29 [INFO] [jenkins-MyCoolProject-43.appVersion.txt:unknown]
20:16:29 [INFO] [pom.xml.versionsBackup:unknown]
20:16:29 [INFO] EXECUTING: /bin/sh -c cd /main/jenkins/instance2/workspace/MyCoolProject && hg commit --message '"CM Jenkins - Release plugin auto check-in and creation of release tag = 0.0.29'
20:16:30 [INFO] EXECUTING: /bin/sh -c cd /main/jenkins/instance2/workspace/MyCoolProject && hg push http://cmprod2merc.my.company.com:9001/csa/MyCoolProject
20:16:34 [ERROR]
20:16:34 EXECUTION FAILED
20:16:34 Execution of cmd : push failed with exit code: 255.
20:16:34 Working directory was:
20:16:34 /main/jenkins/instance2/workspace/MyCoolProject
20:16:34 Your Hg installation seems to be valid and complete.
20:16:34 Hg version: 1.9.2 (OK)
Я попытался настроить файл ~/.hgrc (в соответствии с документацией Mercurial), и все работает, если имя пользователя, указанное в этом файле, имеет действительный доступ WRITE к целевому хранилищу исходного кода / проекту, тогда вышеупомянутое сообщение об ошибках не будет появляться.
Это также может быть решено, если я установлю / сконфигурирую keyring и расширение / плагин mercurial_keyring на сборочном компьютере (что легко в соответствии с онлайн-документацией по брелокам mercurial).
То, что я пытаюсь выяснить, это:
Как я могу передать параметры --config xxxxx (как Jenkins передает во время выполнения операций извлечения / извлечения - приходящих из-за значений параметров, которые мы ввели в разделе " Управление исходным кодом" в задании Jenkins) в команды hg, которые вызываются при подключении плагина Maven SCM инициирует цели тега scm: checkin / scm : который заканчивается вызовом команд hg (hg outgoing, hg push) / всех команд hg без установки ~/.hgrc и установки mercurial_keyring?
1 ответ
Нашел решение:
- Даже когда пользователь (jenkins) имел действительный доступ WRITE к целевому хранилищу RhodeCode/Merurial и настройка ~/.hgrc или mercurial_keyring была настроена успешно (т. Е. Имя пользователя / пароль меньше операций hg после однократного ручного ввода), scm плагина Maven SCM:checkin и scm: работа тега все еще терпела неудачу.
Причиной этого является то, что scm:checkin / scm:tag goal (из плагина Maven SCM) вызывает команды инструмента версии (в моем случае это hg-команды), но НЕ передает параметры аутентификации (имя пользователя / пароль). Для этого я мог бы добавить значения и в проекте pom.xml ИЛИ в ~/.m2/settings.xml в соответствии с конфигурацией плагина maven-scm-plugin --- ИЛИ (это более безопасный способ) создать / использовать 2 новых Jenkins Переменные глобального уровня (типа пароля) для создания переменных имени пользователя / пароля и использования / передачи им целей scm:checkin / scm: при вызове этих целей в настройках конфигурации плагина Release в Jenkins, то есть -Dusername=$username и -Dpassword=$ пароль (поскольку значения поступают от Jenkins, они будут автоматически маскироваться).
Я пошел по маршруту Jenkins и создал 2 глобальные переменные типа пароля в глобальной конфигурации Jenkins в разделе "Настройка системы" > раздел "Глобальные параметры / пароли" и просто передал их цели scm:checkin/tag при вызове их на шаге Invoke Maven (в плагине Release) Конфигурация в Дженкинс).
Я обнаружил, что если у вас установлен ~/.hgrc только с именем пользователя, то команды извлечения / извлечения Jenkins начали давать сбой, поскольку процесс Jenkins прекратил использовать учетные данные, которые я использовал для извлечения / клонирования исходного кода (кажется, что это было сначала отдавая предпочтение имени пользователя ~/.hgrc, так как задание / процесс Jenkins выполнялся с пользователем jenkins, и поскольку в ~/.hgrc не было задано переменную / поле пароля, по какой-либо причине не удалось выполнить извлечение / клон (отдали предпочтение пользователю / учетным данным, который мы указываем в самой конфигурации задания.) Если я переместил ~/.hgrc в ~/.hgrc-backup, то checkout / pull / clone работал в Jenkins, работал нормально (так как он использовал учетные данные то, что я упомянул в разделе "Управление исходным кодом" для Mercurial) НО, он все еще не работал во время подключаемого модуля Maven SCM, который не обрабатывал нижележащие команды hg.
PS: запуск "hg push" в рабочей области работал успешно (автономно, в командной строке), но когда плагин Maven SCM вызывал эти цели, а цели вызывали команды hg, он почему-то не работал.
Решение было:
pass -Dusername=$username -Dpassword=$ переменная пароля для scm:checkin / scm: цели тегов
Убедитесь, что в ~/.hgrc заданы переменные имени пользователя / пароля --OR mercurial_keyring для работы с хранилищем (без запроса имени пользователя и пароля).
Причина, по которой цели плагина Maven SCM... которые называли hg команды не работали, была вызвана проблемой с плагином, я думаю. Обходной путь заключается в том, чтобы вызывать эти цели с -D pushChanges = false, и таким образом, цели не будут вызывать нижележащую принудительную операцию контроля версий, и, таким образом, это будет успешным. Затем вам нужно вручную добавить еще один шаг в "Плагин релиза в конфигурации Jenkins" как "Выполнить командную оболочку / Выполнить команду Windows" для запуска "hg push". Затем это сработает, и в этом случае вам не нужно передавать параметры -Dusername и -Dpassword для этих целей.