在docker上运行jenkins(在Windows上)...运行管道作业的正确步骤

时间:2019-05-10 22:17:17

标签: windows docker jenkins

我正在尝试用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的管道脚本”选项开始了一个基本的詹金斯管道作业。我输入了正确的存储库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选择管道脚本->输入回购URL,凭据,要构建的分支和Jenkinsfile-> Jenkinsfile将执行编译,测试和部署指令

Dockerfile在这里起什么作用?我的思考过程是否正确?

1 个答案:

答案 0 :(得分:0)

  1. 如果更改/更新图像,则每次都需要创建容器。但不需要每次都重新命名。您是否停止并删除了先前运行的容器?如果不是这样,码头工人会给出错误,例如同名容器无法启动。因此,停止并卸下以前的容器。您将能够使用更新的图像启动新的容器。

  2. 是的,您需要在同一容器中安装git才能提取代码。它无法在主机上访问git。但是,您显示的错误类似于验证错误。 (我的意思是,詹金斯甚至在尝试拉出代码之前都会验证输入。如果添加一些假名称,它将抛出下一个错误,例如找不到git)

  3. 您的想法正确无误。创建新的管道作业->从scm中选择管道脚本->输入回购URL,凭据,要构建的分支和Jenkinsfile-> Jenkinsfile将执行指令进行编译,测试和部署。

在问题的最后,您提到了不同的Dockerfile,我假设您正在谈论存储库(git)中的Dockerfile。您可以在Docker代理中运行管道。这样就无需在jenkins主机上设置所有内容,这意味着您无需安装依赖项即可在主机上运行管道代码,例如,如果您尝试在管道中执行一些nodejs代码,则需要在Jenkins主机上设置nodejs,然后再运行管道,要摆脱这一点,您可以在预先设置了一切的容器中运行管道。但是我不认为如果您在docker中运行Jenkins本身,则无法使用此功能。在这种情况下,您需要直接在主机上设置Jenkins。