Jenkins Git плагин с https
Я пытаюсь настроить проект Git в Jenkins с помощью плагина Git. На странице конфигурации проекта я ввожу URL-адрес репозитория в конфигурацию Git, которая является URL-адресом https (https://git.mycompany.com/git/MyProject.git). Когда я создаю проект, я получаю следующую ошибку:
Started by user Hudson Administrator
[EnvInject] - Loading node environment variables.
Building in workspace /home/hudson/.hudson/jobs/MyProject/workspace
Checkout:workspace / /home/hudson/.hudson/jobs/MyProject/workspace - [email protected]
Using strategy: Default
Cloning the remote Git repository
Cloning repository https://git.mycompany.com/git/MyProject.git
git --version
git version 1.8.2.1
ERROR: Error cloning remote repo 'origin' : Could not clone https://git.mycompany.com/git/MyProject.git
hudson.plugins.git.GitException: Could not clone https://git.mycompany.com/git/MyProject.git
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:286)
at org.jenkinsci.plugins.gitclient.AbstractGitAPIImpl.clone(AbstractGitAPIImpl.java:59)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.clone(CliGitAPIImpl.java:47)
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1012)
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:948)
at hudson.FilePath.act(FilePath.java:912)
at hudson.FilePath.act(FilePath.java:885)
at hudson.plugins.git.GitSCM.determineRevisionToBuild(GitSCM.java:948)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1114)
at hudson.model.AbstractProject.checkout(AbstractProject.java:1411)
at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:652)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:557)
at hudson.model.Run.execute(Run.java:1665)
at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:507)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:230)
Caused by: hudson.plugins.git.GitException: Failed to connect to https://git.mycompany.com/git/MyProject.git
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.getURLWithCrendentials(CliGitAPIImpl.java:1374)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.getURLWithCrendentials(CliGitAPIImpl.java:1326)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:47)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:280)
... 16 more
Trying next repository
ERROR: Could not clone repository
java.io.IOException: Could not clone
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1025)
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:948)
at hudson.FilePath.act(FilePath.java:912)
at hudson.FilePath.act(FilePath.java:885)
at hudson.plugins.git.GitSCM.determineRevisionToBuild(GitSCM.java:948)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1114)
at hudson.model.AbstractProject.checkout(AbstractProject.java:1411)
at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:652)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:557)
at hudson.model.Run.execute(Run.java:1665)
at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:507)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:230)
Я могу клонировать репозиторий из командной строки, а также выполняя git clone
как команду оболочки в шагах предварительной сборки проекта Jenkins, поэтому я не понимаю, почему конфигурация плагина не работает, Думаю, что это может быть проблема аутентификации, я попытался указать учетные данные в файле .netrc, а также включить их в URL (т.е. https://username:[email protected]/git/MyProject.git), однако во всех случаях Я все еще получаю ту же ошибку. Любые идеи?
Ответы
Ответ 1
Это ошибка в плагине Jenkins Git.
Вы можете обойти проблему учетных данных, создав учетные данные, используя плагин учетных данных, а затем используйте эти учетные данные в разделе SCM/ Git вашего задания. Тем не менее, это приведет к тому, что ваш пользователь/пароль будет отображаться в открытом тексте в журнале сборки, если проверка завершится неудачно.
Кроме того, это не будет работать, если вы используете прокси-сервер HTTP с git. Лучший способ (на данный момент) - использовать JGit (для настройки в конфигурации Jenkins). Однако JGit является экспериментальным и очень ограниченным, когда дело касается прокси.
(ответ отправлен по популярному запросу;))
Ответ 2
Если вы используете самозаверяющий сертификат для своего репозитория Git, а Git работает из командной строки, но не из плагина Jenkins Git Client, вам нужно добавить сертификат в Jistkins Java Keystore ( как описано tijs в комментарии выше).
Это связано с тем, что Git Клиентский плагин пытается напрямую подключиться с использованием Java Apache HttpClient (обход git.exe), поэтому все настройки Git, которые обычно используются для создания соединения, игнорируются (включая GIT_SSL_NO_VERIFY
и сертификаты в curl-ca-bundle.crt)
. HttpClient выбрасывает SunCertPathBuilderException: unable to find valid certification path to requested target
, который, к сожалению, завернут в GitException без трассировки стека, поэтому мы можем видеть сообщение "Не удалось подключиться".
Чтобы исправить это, вы можете перейти по ссылке, предоставленной tijs:
http://www.mkyong.com/webservices/jax-ws/suncertpathbuilderexception-unable-to-find-valid-certification-path-to-requested-target/
Вам нужно будет скопировать полученный файл jssecacerts
в C:\Program Files (x86)\Jenkins\jre\lib\security
, если вы используете установку по умолчанию Jenkins.
Вы можете найти ссылку на InstallCert.java
в исходном сообщение Andreas Sterbenz (спасибо web.archive.org) или слегка измененная версия на code.google.
Я проверил приведенные выше действия подхода для Git Client plugin version 1.4.6.
Ответ 3
На главной странице плагина git есть следующее:
Если вы видите вывод, указывающий, что git не может клонировать, что-то как и результат ниже, перейдите к настройкам конфигурации Jenkins (а не параметры проекта, глобальные) и изменить путь git на полный путь (например, не "git", но "/usr/bin/git" или где угодно установлен ваш двоичный файл git). Вы также должны убедиться, что разрешения правильны, если вы выполняете клонирование на основе файловой системы.
Started by user anonymous
Checkout:workspace / C:\Documents and Settings\Administrator\.hudson\jobs\watir\workspace - [email protected]
Last Build : #4
Checkout:workspace / C:\Documents and Settings\Administrator\.hudson\jobs\watir\workspace - [email protected]
Cloning the remote Git repository
Cloning repository origin
$ git clone -o origin git://github.com/bret/watir.git "C:\Documents and Settings\Administrator\.hudson\jobs\watir\workspace"
Trying next repository
ERROR: Could not clone from a repository
FATAL: Could not clone
hudson.plugins.git.GitException: Could not clone
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:400)
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:358)
at hudson.FilePath.act(FilePath.java:676)
at hudson.FilePath.act(FilePath.java:660)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:358)
at hudson.model.AbstractProject.checkout(AbstractProject.java:833)
at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:314)
at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:266)
at hudson.model.Run.run(Run.java:948)
at hudson.model.Build.run(Build.java:112)
at hudson.model.ResourceController.execute(ResourceController.java:93)
at hudson.model.Executor.run(Executor.java:118)
Это может быть проблемой для вас тоже.
На той же странице также предлагается тестирование с помощью JGit, если есть проблема с поведением плагина по умолчанию (-Dorg.jenkinsci.plugins.gitclient.Git.useCLI=false
).
Ответ 4
Обновите свой клиент Git до версии 2.10.0 или выше.
выполните команды ниже.
git config --system http.sslVerify false
git config --global http.sslVerify false
Ответ 5
Я попробовал все, чтобы избавиться от проблемы с сертификатом, но потом, наконец, проблема с плагином git. Я откатываю плагины до git 1.5 (от 2.0.3) и git -client 1.0.7 (от 1.6.3), и он работал find. Обратите внимание, что я сначала попробовал git -client 1.4.6, чтобы использовать параметр учетных данных, но он не работает. Поэтому я считаю, что правильная комбинация этих двух плагинов важна. Это решение было упомянуто в JENKINS-20533
Ответ 6
Чтобы использовать Git в Jenkins, необходимо установить следующие два плагина:
- Git -client-плагин
- Git -plugin
Первый плагин (Git -Client-plugin) - это низкоуровневый API для выполнения операций Git (git add, Git commit, Git push, git clone,.. и т.д.).
Второй плагин (Git -plugin) добавляет Git как параметр SCM для заданий Дженкинса.
Второй плагин полагается на функциональность от первого плагина, и поэтому оба должны присутствовать для Git для работы с Jenkins.
Ответ 7
В моем случае один раб Дженкинс работал нормально, а другой - нет. Когда я заменил исполняемый файл Git по умолчанию на JGit, они оба работали.
Ответ 8
Теперь это исправлено и больше не проблема с обновленным плагином (как я пишу этот 1.19.0). Это случилось с git -plugin-client 1.6.x.
Ответ 9
используя git://вместо https://работает для меня на jenkins 1.644 с git client 1.19.6
Ответ 10
Вы можете зарегистрировать свои git учетные данные в "Учетные данные" с помощью входа и пароля для доступа репозиторий git по протоколу https (ниже "Управление Jenkins" ), он будет генерировать credentialId (например, dd0d6733-cc2e-4464-bb7d-4b6af86fe40a), который помогает Дженкинс использовать эти учетные данные в трубопроводах.
Когда вы используете Jenkins Pipeline, вы можете сделать:
node{
git url: "https://tfs:8080/tfs/job.git", branch: "feature/migration", credentialsId:'dd0d6733-cc2e-4464-bb7d-4b6af86fe40a'
}
Он загрузит ваши исходные коды в рабочее пространство
Ответ 11
Мое решение хорошо работает для Jenkins- Git -Plugin.
# create my exec
su root
fuckgit=/usr/bin/fuckgit
touch $fuckgit
echo "#! /usr/bin/env bash" > $fuckgit
echo "git -c sslVerify=false [email protected]" > $fuckgit
Перейти к настройке системы, установить git executable = /usr/bin/fuckgit
Готово.
TODO: красивый этот ans