【发布时间】:2019-05-10 22:17:16
【问题描述】:
我正在尝试使用 jenkins 实现 docker,但不确定我是否走在正确的轨道上。
鉴于: 从 Windows 在 docker 上运行 jenkins 计划以某种方式从 github 获取代码、构建解决方案、在容器上运行功能测试等
我目前做了什么:
(1) 在 Windows 上安装 Docker
(2) 使用命令在Docker上成功启动Jenkins “docker run –name myJenkins -p 8080:8080 -p 50000:50000 -v ~/Jenkins:/var/jenkins_home/jenkins/jenkins:lts” 我相信这一步将 docker 卷绑定到我的主机目录。这允许我查看和访问 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 命令提示符下,我使用命令“docker build -t new_jenkins_image”构建了 Dockerfile。 (5) 我停止当前容器“myJenkins”并使用命令“docker run –name myJenkins2 -p 8080:8080 -p 50000:50000 -v ~/Jenkins:/var/jenkins_home/new_jenkins_image”创建一个新容器。这会使用新安装的 jenkins 插件加载 Jenkins。
我的困惑/困惑
(1) 每次我想通过 Dockerfile 安装新的 jenkins 插件时,是否必须创建一个具有新名称的新容器?这似乎也是一个手动过程......必须有更好的方法。
(2) 我使用“来自 SCM 的管道脚本”选项启动了一个基本的 jenkins 管道作业。我输入了正确的存储库 URL 和凭据,但现在将“脚本路径”留空(我还没有 Jenkinsfile)。当我执行构建时,Jenkins 没有从 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 中选择管道脚本 -> 输入 repo URL、凭据、要构建的分支和 Jenkinsfile -> Jenkinsfile 将执行编译、测试和部署的指令.
Dockerfile 在哪里发挥作用?我的思维过程是否正确?
【问题讨论】: