本文主要是记录学习官网示例教程:构建多分支流水线项目期间遇到的问题。
大部分问题其实都是因为在windows下导致的,如果不需要docker容器调用宿主机docker的话,那么windows下的docker desktop其实没啥问题,但是jenkins官网示例中就需要这样操作,导致在windows下确实没法弄,所以后续转ubuntu实践了。
问题1
一开始是按照官网示例教程拉取的jenkinsci/blueocean,但这个镜像其实已经好久没更新了,可能是这个原因,所以我这里跑的示例在下载推荐插件时魔法也下不下来,跳过后还总会莫名其妙的崩溃。
后续我直接用他们最新的jenkins/jenkins镜像,然后推荐插件魔法下载完毕后,再在管理插件里面下载blue ocean。
问题2
用blue ocean 的 UI创建多分支流水项目时有时会找不到对应的jenkins文件,明明文件夹下面就是明晃晃的Jenkins文件却就是视而不见… 后面是用经典构建模式去创建解决此问题的,
问题3
还有就是创建多分支流水项目时,本地项目有安全限制导致无法创建成功,
临时解决方法(无需重启):
访问 Jenkins 管理界面 → Script Console。
执行脚本命令:
System.setProperty("hudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT", "true")
这样处理后按照经典创建方式可以成功创建,但是打开blue ocean里面就是显示不成功,可能是缓存或者版本不兼容问题,所以后续在重新创建新的容器时增加参数,
永久解决方法 最终blueocean可以正常使用的docker命令:
docker run -u root -e JAVA_OPTS="-Dhudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT=true" -p 8080:8080 -p 50000:50000 --name de
mo -v F:\Docker\resources\file:/home -v /var/run/docker.sock:/var/run/docker.sock -v F:\Docker\resources\file\jenkins:/var/jenkins_home jenkins/
jenkins
其中xxx和xxx2分别是放git仓库和jenkins相关信息存储位置的本地映射文件夹
问题4
然后遇到了新的问题,docker容器内部调用宿主机docker权限不够,加了root权限不行,加了-v /usr/bin/docker:/usr/bin/docker
不行,加了--privileged=true
也不行,
问题5->4
原本打算本地部署的,然后期间又遇到了无法识别jenkinsfile中的docker字符,插件也安装了,找了半天问题发现是空间不够节点挂掉了。 job执行转圈的问题–也是磁盘剩余位置不足,清空间或者降低设置阈值保证节点能运行。折腾半天终于能docker pull了,发现这个教程流程本意就是要通过docker容器中的jenkins实现多分支流水,,,折腾半天白作功。
现在又回到了 docker: Permission denied
的问题,猜测大概是windows系统wsl2下的用户名没办法完全对上root
导致的,搞docker还是有一些奇奇怪怪的地方没办法完全和linux下一致,我都privileged
了还是不行,
- 把windows映射的文件去掉也还是不行
- 别的镜像创建的实例也还是
docker permission denied
后续想法: 直接在linux系统上跑docker看看行不行
通过配置docker代理,搞了半天魔法终于成功pull!然后进行测试,果然linux下是可以的!
最终容器生成命令:
sudo docker run -u root --name demo --privileged -e JAVA_OPTS="-Dhudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT=true" -p 8080:8080 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v "$HOME":/home -v /usr/bin/docker:/usr/bin/docker jenkins/jenkins
问题6
npm build失败Unsupported URL Type: npm:string-width@^4.2.0
好像是npm版本过旧,把jenkins文件中npm后面的:6-alpine
去掉
成功执行完毕
后续结果展示
master分支下的执行过程:
其他分支拉取master分支后的执行流程:
网页demo效果图
执行过程
经验教训
docker是个好东西,前提是在linux下,在windows下真的是个阉割品,,反省一下自己,想偷懒省事点走捷径,从一开始的不想用linux系统凑乎用windows下的docker desktop,到docker容器jenkins安装插件映射到本地后为了省事不想再重安装于是直接用,,结果兜兜转转搞了半天还是走了最长的弯路。所以我偷懒省事了半天还不如一开始就老老实实在ubuntu下跑一遍,当然jenkins官方给的用例也是有问题的,太老了现在按原步骤走必定坎坷。类推到人生也是一样,走了半天捷径发现还不如老老实实按最稳妥的路走,慢就是快。毕竟像我这种运气差的人,另辟蹊径多半踩坑,这辈子运气也不知道能不能好起来了。。。