按照jenkins中文挂网创建了一个创建 Hello World 流水线,使用的示例为Node.js / JavaScript
运行jenkins任务后,提示失败,然后在console output里发现以下错误信息
Failed to initialize: unable to resolve docker endpoint: open D:/Program Files/Git/certs/client/ca.pem: no such file or directory
提示信息为“初始化失败:无法解析docker端点,打开D:/Program Files/Git/certs/client/ca.pem 没有这个文件或文件夹”
根据这个报错,估计是和certs配置有关,目前这个路径的前半部分是我本地的git路径,很奇怪,因为配置里没有配置为这个路径,想了半天,猜测和运行docker命令时是用的git bash终端来运行的有关,所以计划换成powershell试试。
后面换成powershell重新运行docker run 等这些命令,重新生成容器,再尝试运行任务,成功!
现在是好了,但是也要知道之前为什么是坏的,现在对问题进行进一步分析
首先,解释一下为什么使用git bash运行docker命令生成容器,因为根据官网Docker (jenkins.io)的例子
docker run --name jenkins-docker --rm --detach ^
--privileged --network jenkins --network-alias docker ^
--env DOCKER_TLS_CERTDIR=/certs ^
--volume jenkins-docker-certs:/certs/client ^
--volume jenkins-data:/var/jenkins_home ^
--publish 2376:2376 ^
docker:dind
我把命令复制粘贴到power shell 后运行,报错
这里应该比较明显的能看出来,命令换行解析的问题,简单网上搜了一下,知道了power shell不用 ^ 作为命令换行符,而用 ` 符号,当时不想改这些符号,就参考了On macOS and Linux 下的运行例子
docker run \
--name jenkins-docker \
--rm \
--detach \
--privileged \
--network jenkins \
--network-alias docker \
--env DOCKER_TLS_CERTDIR=/certs \
--volume jenkins-docker-certs:/certs/client \
--volume jenkins-data:/var/jenkins_home \
--publish 2376:2376 \
docker:dind \
--storage-driver overlay2
然后用git bash 运行,运行后是成功的,jenkins可以正常起来,但是跑任务时就会提示上面的找不到文件的报错。
因为报错内容和certs相关,所以我就查看了docker中的jenkins-docker-certs数据卷,发现了如果用git bash运行,数据卷中为空,用cmd或者power shell运行,数据卷中有文件。所以猜测和docker命令运行时底层解析有关,目前只能查到这了,在往下深入目前没什么头绪。
这里回头再来看下问题发生的地方,官网给的例子中 ^ 符号是用在哪里呢,powser shell中不生效,那应该就是cmd了,在cmd尝试,运行成功,果然是因为我没在cmd里运行才导致的换行命令解析的错误。
经过验证,^ 确实是cmd中命令的换行符,所以这里简单做一个知识总结:
终端 | 命令换行符 |
---|---|
windows cmd | ^ |
windows powershell | ` 反引号,键盘左侧数字1的左边 |
git bash 或者linux | \ |
因为我印象中官网也没要求用cmd还是powershell,所以我再回顾文档确认一下,发现了第一句:
Open up a command prompt window and similar to the macOS and Linux instructions above do the following:
翻译成中文为:“打开命令提示符窗口,类似于上面的macOS和Linux指令,执行以下操作:”
然后我在本地搜了一下“command”或者“命令提示符”,显示如下:
尴尬了,命令提示符就是平常用的cmd,我当时没仔细看这一行,想着随便找个终端都可以,真是不仔细看文档惹的祸,以后真是要仔细看文档。
问题总结:git bash运行docker 命令导致的问题,改为cmd即可解决。
标签:--,cmd,Failed,报错,运行,initialize,jenkins,docker,certs From: https://www.cnblogs.com/zhaoguowei12/p/17928864.html