【问题标题】:Running jenkins on docker (on Windows)... Proper steps to run pipeline job在 docker 上运行 jenkins(在 Windows 上)...运行管道作业的正确步骤
【发布时间】: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 在哪里发挥作用?我的思维过程是否正确?

【问题讨论】:

    标签: windows docker jenkins


    【解决方案1】:
    1. 如果您更改/更新映像,每次都需要创建容器。但它不需要每次都给一个新名字。您是否停止并删除了以前运行的容器?如果不是这样,docker 会给出类似同名容器无法启动的错误。所以停止并删除你以前的容器。并且您将能够使用更新的图像启动一个新容器。

    2. 是的,需要在同一个容器中安装git才能拉取代码。它无法访问主机上的 git。但是您显示的错误就像验证错误。 (我的意思是 Jenkins 甚至在尝试提取代码之前验证输入。如果你添加一些假名,它会抛出下一个错误,比如 git not found)

    3. 你的想法是正确的。创建新的流水线作业 -> 从 scm 中选择流水线脚本 -> 输入 repo URL、凭据、要构建的分支和 Jenkinsfile -> Jenkinsfile 将执行编译、测试和部署指令。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 2020-01-16
      相关资源
      最近更新 更多