Я пытаюсь реализовать докер с Дженкинсом и не уверен, что я на правильном пути.
Дано:
Запуск Дженкинс на докере из 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 вступает в игру здесь? Мой мыслительный процесс на правильном пути?