Centos7上使用jenkins执行pipeline在容器内部拉取环境运行代码的各种坑
1|0环境
Centos 7上部署了三个服务
bitbucket 192.168.1.156:7900
jenkins 192.168.1.156:8080
docker服务
原理
在Dockerfile中定义pipeline scripts,然后拉取docker hub的镜像作为运行环境,创建容器,在容器内部拉取bitbucket代码,然后在容器中运行bitbucket代码,最后销毁容器
2|0坑一:忘了bitbucket的登录密码
解决办法
这个直接去bitbucket官网:lockout recovery process
Steps for Linux:
- Edit the
\bin_start-webapp.sh file and add the "-Datlassian.recovery.password=temporarypassword" value to the JVM_SUPPORT_RECOMMENDED_ARGS property. The property value must be non-blank, and should look like this when you've done that:
Here we are using "temporarypassword", but you should use your own value.
2. Start Bitbucket manually by running
3. Log in using the 'recovery_admin' username and the temporary password specified in Step 1.
4. Repair your configuration. We strongly recommend that you do not perform other actions while Bitbucket is in recovery mode.
5. Confirm your ability to log in with your usual admin profile.
6. Shut down Bitbucket, remove the atlassian.recovery.password argument from _start-webapp.sh, and restart Bitbucket as usual.
3|0坑二:java.io.IOException: error=2, 没有那个文件或目录
原因分析
这个是因为没有centos7上git没有找到,可以在pipeline使用如下的脚本看一下git能不能找到,和jenkins的环境变量的路径
可以看到控制台打印的信息,git并没找到,从 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin可以看出,jenkins去这些路径下去搜索git,查看了一下我本地的git安装目录是:/usr/local/git/bin/git,也有可能是环境变量配置的不对,但是我在centos7中git --version也没问题
解决办法
卸载旧的git,使用如下命令重装git和配置环境变量
4|0坑三:stderr: No RSA host key is known for [192.168.1.156]:7999 and you have requested strict checking.
原来以为是strict checking,其实这只是一个警告信息,真正的原因是无法读取远程仓库
解决办法
在Manage Jenkins --> Configure Global Security 下有一个配置,这里的选项选择为No verification
除此之外,往上有人说在~/.ssh/config可以配置,这可能是本地git pull的时候禁止strict checking,但这个问题不是主要的
5|0坑四:fatal: 无法读取远程仓库 请确认您有正确的访问权限并且仓库存在
原因分析
就是上面的第二个问题,这个是添加凭据的时候,我是直接拷贝centos7上的id_rsa私钥,但是试了很多次,每次拷贝都是无法读取远程仓库
解决办法
直接把id_rsa文件上传到mac上,使用pbcopy < id_rsa
,将内容拷贝到粘贴板上,再复制进去
但是使用ssh key-gen -t rsa
之前,记得使用git config --global设置下用户名和邮箱
6|0坑五:Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
具体的console输出信息如下:
原因分析
这个是因为作为jenkins用户执行的时候,没有加入docker组,没有docker组的权限
解决办法
7|0坑六:ls: cannot access '.': Operation not permitted
一开始的时候,想通过pipline对比下容器拉取代码前后文件的变化,因此写了下面的脚本
没想到运行后,console就报错了
在centos7上自己创建了一个容器,同样也无法在容器内部执行```ls x命令
原因分析
查看了一下centos7上的docker版本是18.06.1,本地mac上的版本是20.10.21,而本地mac执行jenkins pipline是没有任何问题的,新的包没有这个问题。不过后面找到原因是docker run创建容器的时候没有加参数--privileged=true
,不加该参数,只是外部的一个普通用户权限,加了该参数,才真正拥有root权限
解决办法
在centos7上重新加上该参数,重新生成了一个容器,容器内部执行ls
相关命令终于不报错了。但是我还没想好怎么在pipline中加这个参数
__EOF__

本文链接:https://www.cnblogs.com/my_captain/p/17003314.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器