Запуск jenkins на докере (в Windows) ... Правильные шаги для запуска конвейерного задания - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь реализовать докер с Дженкинсом и не уверен, что я на правильном пути.

Дано: Запуск Дженкинс на докере из Windows Планируйте получение кода из github, сборку решения, выполнение функциональных тестов и т. Д. На контейнере каким-либо образом

Что я сейчас сделал:

(1) Установленный Docker в Windows

(2) Успешно запустил Jenkins на Docker с помощью команды "Docker run - имя myJenkins -p 8080: 8080 -p 50000: 50000 -v ~ / Jenkins: / var / jenkins_home / jenkins / jenkins: lts" Я полагаю, что этот шаг связывает том докера с каталогом моего хоста. Это позволяет мне просматривать и получать доступ к содержимому Jenkins.

(3) В каталоге Jenkins на моем хост-компьютере я создал plugin.txt (содержащий множество плагинов Jenkins, которые я хочу установить) и Dockerfile. Dockerfile устанавливает указанные плагины в файл plugins.txt.

FROM jenkins/jenkins:lts
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt

(4) В командной строке Windows я собрал Dockerfile с помощью команды "docker build -t new_jenkins_image". (5) Я останавливаю свой текущий контейнер «myJenkins» и создаю новый контейнер с командой «docker run –name myJenkins2 -p 8080: 8080 -p 50000: 50000 -v ~ / Jenkins: / var / jenkins_home / new_jenkins_image». Это загружает Jenkins с недавно установленными плагинами jenkins.

Что я застрял / запутался в

(1) Нужно ли создавать новый контейнер с новым именем каждый раз, когда я хочу установить новые плагины jenkins через Dockerfile? Это тоже похоже на ручной процесс ... Должен быть лучший способ.

(2) Я начал базовую работу конвейера jenkins с опцией «Конвейерный скрипт из SCM». Я ввел правильный URL-адрес хранилища и учетные данные, но пока оставил «Путь к сценарию» пустым (у меня пока нет файла Jenkinsfile). Когда я выполнял сборку, Дженкинс не получил код из github.

java.lang.IllegalArgumentException: Empty path not permitted.
  at org.eclipse.jgit.treewalk.filter.PathFilter.create(PathFilter.java:80)
  at org.eclipse.jgit.treewalk.TreeWalk.forPath(TreeWalk.java:205)
  at org.eclipse.jgit.treewalk.TreeWalk.forPath(TreeWalk.java:249)
  at org.eclipse.jgit.treewalk.TreeWalk.forPath(TreeWalk.java:281)
  at jenkins.plugins.git.GitSCMFile$3.invoke(GitSCMFile.java:171)
  at jenkins.plugins.git.GitSCMFile$3.invoke(GitSCMFile.java:165)
  at jenkins.plugins.git.GitSCMFileSystem$3.invoke(GitSCMFileSystem.java:193)
  at org.jenkinsci.plugins.gitclient.AbstractGitAPIImpl.withRepository(AbstractGitAPIImpl.java:29)
  at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.withRepository(CliGitAPIImpl.java:72)
  at jenkins.plugins.git.GitSCMFileSystem.invoke(GitSCMFileSystem.java:189)
  at jenkins.plugins.git.GitSCMFile.content(GitSCMFile.java:165)
  at jenkins.scm.api.SCMFile.contentAsString(SCMFile.java:338)
  at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:110)
  at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:67)
  at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:293)
  at hudson.model.ResourceController.execute(ResourceController.java:97)
  at hudson.model.Executor.run(Executor.java:429)
Finished: FAILURE

Я полагаю, это из-за того, что в Docker контейнере не установлен git? Контейнер не может получить доступ к Git или MSBuild с моего хост-компьютера ... Нужно ли создавать новый контейнер здесь, чтобы просто получить код?

Может кто-нибудь объяснить мне, что мне не хватает или где я ошибся?

Насколько я понимаю, этот процесс выглядит следующим образом: создайте новое конвейерное задание -> выберите конвейерный сценарий из scm -> введите URL-адрес хранилища, учетные данные, ветвь для сборки и Jenkinsfile -> Jenkinsfile выполнит инструкции для компиляции, тестирования и развертывания .

Где Dockerfile вступает в игру здесь? Мой мыслительный процесс на правильном пути?

1 Ответ

0 голосов
/ 11 мая 2019
  1. вам нужно каждый раз создавать контейнер, если вы меняете / обновляете изображение.но не обязательно давать новое имя каждый раз.Вы остановили и удалили ранее запущенный контейнер?если нет, то Docker выдает ошибки, такие как контейнер с тем же именем не может запуститься.Так что остановитесь и удалите свой предыдущий контейнер.и вы сможете запустить новый контейнер с обновленным образом.

  2. Да, вам нужно установить git в тот же контейнер, чтобы получить код.он не может получить доступ к git на хост-машине.Но ошибка, которую вы показываете, похожа на ошибку проверки.(Я имею в виду, что Дженкинс проверяет ввод еще до того, как попытается извлечь код. Если вы добавите какое-нибудь поддельное имя, оно выдаст следующую ошибку, как git not found)

  3. Ваша мысль верна.Создайте новое конвейерное задание -> выберите конвейерный сценарий из scm -> введите URL-адрес хранилища, учетные данные, ветвь для сборки и Jenkinsfile -> Jenkinsfile выполнит инструкции по компиляции, тестированию и развертыванию.

В конце вопроса вы упомянули другой Dockerfile, я предполагаю, что вы говорите о Dockerfile в своем хранилище (git).Вы можете запустить свой конвейер в Docker Agent.Это удаляет все настройки на хосте jenkins, что означает, что вам не нужно устанавливать зависимости для запуска кода конвейера на хосте, например, если вы пытаетесь выполнить некоторый код nodejs в конвейере, вам нужно настроить nodejs на хосте Jenkins до запускаpipe, чтобы избавиться от этого, вы можете запустить pipe в контейнере, где все предварительно настроено.Но я не думаю, что вы можете использовать эту функцию, если вы запускаете Jenkins сам в докере.в этом случае вам нужно настроить Jenkins на хосте напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...